SQL болон NoSQL хоёрын ялгааг эмээдээ хэрхэн тайлбарлах вэ

SQL болон NoSQL хоёрын ялгааг эмээдээ хэрхэн тайлбарлах вэ

Хөгжүүлэгчийн гаргадаг хамгийн чухал шийдвэрүүдийн нэг бол ямар мэдээллийн санг ашиглах вэ гэдэг юм. Олон жилийн турш сонголтууд нь бүтэцлэгдсэн асуулгын хэлийг (SQL) дэмждэг янз бүрийн харилцааны мэдээллийн сангийн сонголтоор хязгаарлагдаж байсан. Эдгээрт MS SQL Server, Oracle, MySQL, PostgreSQL, DB2 болон бусад олон зүйлс орно.

Сүүлийн 15 жилийн хугацаанд No-SQL аргын дагуу олон шинэ мэдээллийн сан зах зээлд нэвтэрсэн. Үүнд Redis, Amazon DynamoDB зэрэг түлхүүр үнэ цэнийн дэлгүүрүүд, Cassandra болон HBase зэрэг өргөн баганын мэдээллийн сан, MongoDB болон Couchbase зэрэг баримт бичгийн сангууд, Elasticsearch, Solr зэрэг график мэдээллийн сан болон хайлтын системүүд багтана.

Энэ нийтлэлд бид SQL болон NoSQL-г тэдгээрийн функциональ байдалд нь оруулахгүйгээр ойлгохыг хичээх болно.
Дээрээс нь бид замдаа хөгжилтэй байх болно.

Эмээдээ SQL-г тайлбарлаж байна

Эмээ, би чиний цорын ганц ач хүү биш гэж төсөөлөөд үз дээ. Харин аав, ээж хоёр бие биенээ туулай шиг хайрлаж, 100 хүүхэдтэй болж, дараа нь 50 хүүхэд өргөж авсан.

Тиймээс та бид бүгдэд хайртай бөгөөд бидний нэрс, төрсөн өдөр, дуртай зайрмагны амт, хувцасны хэмжээ, хобби, ханийн нэр, үр удмын нэр болон бусад чухал баримтуудыг мартахыг хүсэхгүй байна. Гэсэн хэдий ч үүнийг хүлээн зөвшөөрье. Та 85 настай, сайн санах ой үүнийг даван туулж чадахгүй.

Азаар ач зээ нарын чинь хамгийн ухаантай нь болохоор би тусалж чадна. Тиймээс би танай гэрт ирээд хэдэн хуудас цаас гаргаж ирээд, эхлэхээсээ өмнө жигнэмэг жигнэхийг танаас хүсч байна.

Нэг хуудсан дээр бид "гэж нэрлэсэн жагсаалтыг гаргадаг.Ач зээ нар". Бүр ач хүү Түүний тухай зарим чухал мэдээлэл, тэр дундаа одоо хэрхэн яаж байгааг харуулах өвөрмөц тоогоор бичигдсэн ач хүү тэр бол. Түүнчлэн, зохион байгуулалтын үүднээс бид жагсаалтад ямар мэдээлэл агуулагдаж байгааг үргэлж мэдэхийн тулд нэрлэсэн шинж чанаруудыг жагсаалтын эхэнд бичдэг.

id
нэр
төрсөн өдөр
сүүлчийн айлчлал
хувцасны хэмжээ
дуртай зайрмаг
батлагдсан

1
Жимми
09-22-1992
09-01-2019
L
гаа шоколад
хуурамч

2
Jessica
07-21-1992
02-22-2018
M
чулуурхаг зам
үнэн

... бид жагсаалтыг үргэлжлүүлж байна!

Ач, зээ нарын жагсаалт

Хэсэг хугацааны дараа та бүх зүйлийг ойлгож байгаа бөгөөд бид жагсаалтаа бараг дуусгах болно! Гэсэн хэдий ч та над руу эргэж хараад: "Бид эхнэр, нөхөр, хобби, ач зээ нартаа орон зай нэмэхээ мартсан байна!" Гэхдээ үгүй, бид мартаагүй! Энэ нь цааш үргэлжлэх бөгөөд шинэ хуудас цаас шаардана.

Тиймээс би өөр нэг хуудас цаас гаргаж ирээд түүн дээр бид жагсаалт гэж нэрлэдэг Гэрлэгчид. Бид дахин жагсаалтын эхэнд бидэнд чухал ач холбогдолтой шинж чанаруудыг нэмж, эгнээнд нэмж эхэлнэ.

id
ачийн_id
нэр
төрсөн өдөр

1
2
Жон
06-01-1988

2
9
Фернанда
03-05-1985

... илүү эхнэрүүд!

Эхнэр нөхрийн жагсаалт

Энэ үе шатанд би эмээдээ хэн хэнтэй гэрлэсэн болохыг мэдэхийг хүсч байвал тэр зөвхөн таарах хэрэгтэй гэдгийг тайлбарладаг. id жагсаалтад ач зээ нар с ачийн_id эхнэр, нөхөр хоёрын жагсаалтад.

Хэдэн арван жигнэмэгийн дараа би унтаж амрах хэрэгтэй байна. "Эмээ та үргэлжлүүлж болох уу?" Би унтаж амрахаар явлаа.

Би хэдхэн цагийн дараа буцаж ирнэ. Та сайхан байна, эмээ! Жагсаалтаас бусад бүх зүйл сайхан харагдаж байна хобби. Жагсаалтад 1000 орчим хобби бий. Тэдний ихэнх нь давтагддаг; Юу болов?

ачийн_id
Хобби

1
унадаг дугуй

4
унадаг дугуй

3
унадаг дугуй

7
ажиллаж байгаа

11
унадаг дугуй

... бид үргэлжлүүлнэ!

Уучлаарай, би хэлэхээ мартсан байна! Нэг жагсаалтыг ашигласнаар та зөвхөн хянах боломжтой хобби. Дараа нь өөр жагсаалтад бид мөрдөх хэрэгтэй ач зээ нархэн үүнийг хийж байна хобби. Бид үүнийг дуудах болно "Нийтлэг жагсаалт". Чамайг дургүй байгааг хараад би санаа зовж, жагсаалтын горим руу буцлаа.

id
Хобби

1
унадаг дугуй

2
ажиллаж байгаа

3
усан

... илүү хобби!

Хоббигийн жагсаалт

Хобби жагсаалтаа гаргасны дараа бид хоёр дахь жагсаалтаа үүсгэж, түүнийгээ "Ач, зээ нарын хобби".

ачийн_id
хобби_id

4
1

3
1

7
2

…илүү!

Ач, зээ нарын хоббигийн ерөнхий жагсаалт

Энэ бүх ажлын дараа эмээ одоо гайхалтай том гэр бүлээ бүхэлд нь хянах гайхалтай санах ойн системтэй болсон. Тэгээд намайг удаан байлгахын тулд тэр шидэт асуулт асууж байна: "Чи энэ бүгдийг хаанаас сурсан бэ?"

Харилцааны мэдээллийн сан

Харилцааны мэдээллийн сан нь албан ёсоор тайлбарласан хүснэгтүүдийн багц (бидний жишээнд эдгээр нь хуудаснууд) бөгөөд тэдгээрээс та хандах боломжтой. өгөгдөл эсвэл хүснэгтүүдийг дахин зохион байгуулах шаардлагагүйгээр тэдгээрийг янз бүрийн аргаар цуглуулах Өгөгдлийн сан. Олон төрлийн харилцааны мэдээллийн сан байдаг ч харамсалтай нь цаасан дээрх жагсаалт нь тэдний нэг биш юм.

Хамгийн алдартай харилцааны мэдээллийн сангуудын онцлог нь SQL (Structured Query Language) асуулгын хэл юм. Түүний ачаар эмээ санах ойн системээ компьютерт шилжүүлбэл "Өнгөрсөн жил над дээр хэн ирээгүй, гэрлэсэн, хоббигүй хүн байна уу?" гэх мэт асуултуудад хурдан хариулт авах боломжтой.

Хамгийн алдартай SQL мэдээллийн сангийн удирдлагын системүүдийн нэг бол нээлттэй эхийн MySQL юм. Энэ нь үндсэндээ вэбд суурилсан програм хангамжийн хэрэглээний мэдээллийн сангийн удирдлагын систем (RDBMS) хэлбэрээр хэрэгждэг.

MySQL-ийн зарим гол онцлогууд:

  • Энэ нь нэлээд сайн мэддэг, өргөн хэрэглэгддэг, өргөнөөр туршиж үзсэн.
  • SQL болон харилцааны өгөгдлийн сангийн туршлагатай олон чадварлаг хөгжүүлэгчид байдаг.
  • Өгөгдөл нь янз бүрийн хүснэгтэд хадгалагддаг бөгөөд энэ нь үндсэн болон гадаад түлхүүр (танигч) ашиглан харилцаа тогтооход хялбар болгодог.
  • Энэ нь ашиглахад хялбар, үр ашигтай тул том, жижиг бизнесүүдэд тохиромжтой.
  • Эх код нь GNU General Public License-ийн нөхцлийн дагуу байна.

Одоо март Бүгд.

Эмээдээ NoSQL-г тайлбарлаж байна

Эмээ, бид асар том гэр бүлтэй. Тэр 150 ач зээтэй! Тэдний олонх нь гэрлэсэн, хүүхэдтэй, ямар нэгэн зүйлд дуртай гэх мэт. Таны насан дээр бид бүгдийн тухай бүгдийг санах боломжгүй юм. Танд хэрэгтэй зүйл бол санах ойн систем юм!

Аз болоход би үгүй Чамайг миний төрсөн өдөр болон зайрмагны дуртай амтыг мартаасай гэж хүсэж байгаа тул би тусалж чадна. Тиймээс би хамгийн ойрын дэлгүүр рүү гүйж, дэвтэр аваад гэрт чинь буцна.

Миний хийх хамгийн эхний алхам бол дэвтэрийнхээ хавтас дээр "Ач, зээ нар" гэж том том үсгээр бичих явдал юм. Дараа нь би эхний хуудсыг эргүүлж, миний тухай санаж байх ёстой бүх зүйлийг бичиж эхлэв. Хэдэн минутын дараа хуудас иймэрхүү харагдах болно.

{ 
  "_id":"dkdigiye82gd87gd99dg87gd",
  "name":"Cody",
  "birthday":"09-12-2006",
  "last_visit":"09-02-2019",
  "clothing_size":"XL",
  "favorite_ice_cream":"Fudge caramel",
  "adopted":false,
  "hobbies":[ 
     "video games",
     "computers",
     "cooking"
  ],
  "spouse":null,
  "kids":[ 

  ],
  "favorite_picture":"file://scrapbook-103/christmas-2010.jpg",
  "misc_notes":"Prefers ice-cream cake on birthday instead of chocolate cake!"
}

Я: "Бүх зүйл бэлэн байх шиг байна!"
Эмээ: "Хүлээгээрэй, бусад ач зээ нар яах вэ?"
Я: "Яг тийм. Дараа нь тус бүрт нэг хуудас хуваарил."
Эмээ: "Би чамтай адил бүх мэдээллийг бичих шаардлагатай юу?"
Я: "Үгүй, зөвхөн та хүсвэл. Би үзүүлье."
Би эмээгийнхээ үзэгийг шүүрэн аваад хуудсыг эргүүлж, хамгийн дургүй үеэлийнхээ тухай мэдээллийг хурдан тэмдэглэв.

{ 
  "_id":"dh97dhs9b39397ss001",
  "name":"Tanner",
  "birthday":"09-12-2008",
  "clothing_size":"S",
  "friend_count":0,
  "favorite_picture":null,
  "remember":"Born on same day as Cody but not as important"
}

Эмээ нь ач зээ нарынхаа талаар ямар нэг зүйлийг санах шаардлагатай бол зөвхөн ач, зээ нарынхаа дэвтрийн зөв хуудас руу шилжихэд л хангалттай. Тэдний тухай бүх мэдээлэл тэдний хуудсан дээр хадгалагдах бөгөөд тэр үүнийг хурдан өөрчилж, шинэчлэх боломжтой.

Бүх зүйл дууссаны дараа тэр шидэт асуултыг асууна: "Чи энэ бүгдийг хаанаас сурсан бэ?"

NoSQL мэдээллийн сан

Олон бий NoSQL мэдээллийн сан (“зөвхөн SQL биш”). Бидний жишээн дээр бид харуулсан баримт бичгийн мэдээллийн сан. NoSQL өгөгдлийн сан нь харилцааны өгөгдлийн санд хэрэглэгддэг хүснэгтийн харилцааг оруулахгүй байхаар өгөгдлийг загварчилдаг. Эдгээр мэдээллийн сангууд нь 2000-аад оны эхээр үүлэнд суурилсан мэдээллийн баазын бөөгнөрөл хийх шаардлагатай компаниудын дунд түгээмэл болсон бөгөөд тэдгээрийн тодорхой масштабын шаардлагын улмаас (Facebook гэх мэт). Ийм хэрэглээнд өгөгдлийн тууштай байдал нь гүйцэтгэл, өргөтгөх чадвараас хамаагүй бага байсан.

Эхэндээ NoSQL өгөгдлийн сангууд нь өгөгдлийн менежментийн үйл ажиллагаанд ихэвчлэн ашиглагддаг байсан. Үндсэндээ вэб болон үүлэн программуудын тухай ярихад NoSQL мэдээллийн баазууд ихээхэн хэмжээний өгөгдлийг боловсруулж, түгээдэг. NoSQL инженерүүдэд уян хатан өгөгдлийн схем (эсвэл байхгүй) таалагдсан тул шинэчлэгдсэн програмуудад хурдан өөрчлөлт хийх боломжтой байв.

NoSQL-ийн гол онцлогууд:

  • Өгөгдөл хадгалах маш уян хатан арга
  • Кластерт хэвтээ масштаблах
  • Тогтвортой байдал/тархалт бүрт боломжит дараалал
  • Өвөрмөц түлхүүрүүдийг ашиглан тодорхойлсон баримтууд

Нарийвчилсан харьцуулалт

MySQL нь тодорхой бүтэцтэй схем шаарддаг.
NoSQL нь ямар ч өгөгдлийг "баримт бичигт" хадгалах боломжийг олгодог.

MySQL нь асар том нийгэмлэгтэй.
NoSQL нь жижиг бөгөөд хурдацтай хөгжиж буй нийгэмлэгтэй.

NoSQL нь масштаблахад хялбар байдаг.
MySQL илүү удирдах чадвартай байх шаардлагатай.

MySQL нь олон төрлийн мэдээллийн санд хэрэглэгддэг SQL-г ашигладаг.
NoSQL нь өгөгдлийн санд суурилсан түгээмэл хэрэглүүртэй загвар юм.

MySQL нь стандарт асуулгын хэлийг (SQL) ашигладаг.
NoSQL нь стандарт хайлтын хэл ашигладаггүй.

MySQL нь тайлан гаргах олон гайхалтай хэрэгслүүдтэй.
NoSQL нь стандартчилахад хэцүү тайлагнах хэд хэдэн хэрэгсэлтэй.

MySQL нь том өгөгдлийн гүйцэтгэлийн асуудлыг харуулж чадна.
NoSQL нь том өгөгдөл дээр маш сайн гүйцэтгэлийг хангадаг.

Бодол санаа 8 суурь

Компани дээр 8 суурьМиний ажиллаж байгаа газар бид AWS дээр байрлуулсан Aurora MySQL харилцааны мэдээллийн сан бүхий төсөл бүрт ажлын талбар өгдөг. Таны програм өндөр гүйцэтгэл, өргөтгөх боломжтой байх үед NoSQL нь логик сонголт боловч SaaS програм болон бусад бизнесийн программ хангамжийг бүтээхэд DBMS-ийн өгсөн өгөгдлийн хүчтэй нийцтэй байх нь чухал гэж бид үзэж байна.

Тайлан, гүйлгээний бүрэн бүтэн байдал, сайн тодорхойлсон өгөгдлийн загвар шаардсан бизнесийн программуудыг бүтээж буй гарааны бизнес эрхлэгчид болон хөгжүүлэгчдэд бидний бодлоор харилцааны мэдээллийн санд хөрөнгө оруулах нь зөв сонголт юм.

8base.com дээрээс Aurora, Serverless болон GraphQL програмуудыг хөгжүүлэх талаар илүү ихийг мэдэж аваарай энд.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх