Jump to content

Хэрэглэгчийн яриа:Tushighen

Page contents not supported in other languages.
Сэдэв нэмэх
Википедиа — Чөлөөт нэвтэрхий толь

NoSql - Cassandra

  • Cassandra сургалт

Cassandra нь Apache-ийн тархсан өгөгдлийн сан бөгөөд энэ нь маш их өргөтгөх боломжтой мөн маш их хэмжээний бүтэцлэгдсэн өгөгдлийг удирдахад зориулагдсан юм. Энэ нь алдаа гарч болох нэг ч цэггүйгээр хангагдсан.

Энэхүү сургалт нь Cassandra-ийн архитектур, суулгалт, чухал классууд болон интерфэйсийн үндсэн танилцуулгаас эхэлнэ. Үүний дараа CQLSH болон Java API ашиглан түлхүүр, хүснэгт, индекс зэргүүд дээр үүсгэх, өөрчлөх, шинэчлэх, устгах зэрэг үйлдлийг хэрхэн гүйцэтгэх талаар тайлбарлах болно. Энэхүү сургалт нь CQL-д байгаа өгөгдлийн төрөл, цуглуулгууд болон хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг хэрхэн ашиглах талаар тайлбар зориулалт бүхий бүлгүүдтэй.


Энэ сургалт нь Cassanda-ийн дадал хэвшилтэй болох мөн практик дээр хэрэгжүүлэх эрмэлзэлтэй програм хангамжийн мэргэжилтэнүүдэд маш их хэрэгтэй юм.

Шаардлага

Энэ сургалт нь маш энгийн бөгөөд Java програмчлалын үндсэн мэдлэгтэйгээр энд тайлбарлагдсан ойлголтуудыг амархан ойлгох боломжтой.

  • Cassandra - Танилцуулга

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

  • NoSQLDatabase

NoSQL өгөгдлийн сан (заримдаа Зөвхөн SQL Биш гэж нэрлэгддэг) нь өгөгдлийн хадгалах, сэргээх механизмаар хангагдсан харьцаа өгөгдлийн санд ашиглагддаг хүснэгтэн харицаанаас өөр өгөгдлийн сан юм. Эдгээр өгөгдлийн сангууд нь схемгүй, хялбар хуулбарлахыг дэмждэг, энгийн API-тэй эцэст нь тогтвортой мөн их хэмжээний өгөгдлийг удирдаг чаддаг.

NoSQL өгөгдлийн сангийн үндсэн зорилго нь

  1. Энгийн дизайн
  2. Хэвтээ хэмжээс
  3. Хүртээмжтэй байдлыг нарийн хянах

NoSQL өгөгдлийн сан нь харьцаа өгөгдлийн сантай харьцуулахад өөр өөр өгөгдлийн бүтцийг ашигладаг. Энэ нь NoSQL-д зарим үйл ажиллагааг хурдан гүйцэтгэдэг. NoSQL өгөгдлийн санг ашиглах нь шийдэх ёстой асуудлаас хамаардаг.

  • NoSQL vs Харьцаа өгөгдлийн сан

Дараах хүснэгдэт NoSQL болон харьцаа өгөгдлийн сангуудын ялгааг жагсаасан.

Relational Database NoSql Database
Хүчтэй query хэлийг дэмждэг Маш хялбар query хэлийг дэмждэг
Энэ нь тогтмол схемтэй байдаг Ямар ч тогтмол схем байхгүй
ACID (Атомчлалтай, Нийцтэй байдал, Салангид мөн Эдэлгээ) Энэ нь зөвхөн “эцэст нь тогтвортой”
Гүйлгээг дэмждэг Гүйлгээг дэмждэггүй

Cassandra-аас гадна дараах NoSQL өгөгдлийн сангууд нь түгээмэл байдаг:

Apache HBase HBase нь нээлттэй эх, харилцан хамааралгүй, Google-ийн BigTable дараа загварчлагдсан тархсан өгөгдлийн сан өгөөд Java дээр бичигдсэн. Энэ нь Apache Hadoop төслийн нэг хэсэг болон хөгжүүлэгдсэн өгөөд HDFS-ийн дээр ажилладаг бөгөөд Hadoop-ийн BigTable-тэй төстэй боломжуудыг олгодог юм.

MongoDB MongoDB нь баримт бичиг баримтад чиглэгдсэн өгөгдлийн сангийн систем бөгөөд энэ нь уламжлалт хүснэгтэнд суурилсан өгөгдлийн сангийн бүтцээс зайлсхийсэн JSON-той адил динамиз схем бүхий баримтууд нь тодорхой төрлийн хэрэглээний өгөгдлийг нэгтгэх боломжийг илүү хурдан, хялбар болгодог.


  • Apache Cassandra гэж юу вэ?

Apache Cassandra нь маг их хэмжээний бүтэцлэгдсэн өгөгдлийн удирдахад зориулагдсан дэлхий даяар тархсан нээлттэй эхийн, тархсан болон төвлөрсөн бус хадгалалтын систем(өгөгдлийн сан) юм. Энэ нь алдаа гарч болох нэг ч цэггүйгээр хангагдсан юм.

Доор дурдсан зүйлс нь Apache Cassandra-ийн онцлох зүйлүүд юм:

-Энэ нь өргөтгөх боломжтой, алдаанд тэсвэртэй, тогтвортой.

-Энэ нь баганад чиглэсэн өгөгдлийн сан юм

-Түүний тархалтын загвар нь Amazon-ы Dynamo дээр суурилдаг мөн Google-ийн Bigtable дээрх өгөгдлийн загвар

-Facebook-д үүсгэгдсэн мөн энэ нь харьцаа өгөгдлийн сангийн удирдлагын системээс эрс ялгаатай

-Cassandra нь Dynamo загварын ямар ч алдаагүйгээр хуулбарлахыг хэрэгжүүлдэг гэхдээ илүү хүчирхэг “багана гэр бүл” өгөгдлийн загварыг нэмж өгсөн

-Cassandra-г Facebook, Twitter, Cisco, Rackspace, Ebay, Twitter, Netflix зэрэг олон томоохон компаниуд ашигладаг.


  • Cassandra-ийн онцлог

Cassandra нь маш гайхалтай технологийн онцлогоосоо болоод алдартай болсон юм. Cassandra-ийн зарим онцлогууд нь:

Налархай хуваарилалт - Cassandra нь маш сайн өргөтгөх боломжтой; энэ нь шаардлага болгонд илүү олон хэрэглэгчийг болон өгөгдөл байрлуулахад илүү олон төхөөрөмж нэмэх боломжийг олгодог.

Үргэлж архитектур дээр - Cassandra нь алдаа гарч болох нэг ч цэггүйгээр хангагдсан бөгөөд энэ нь алдаа гаргаж болохгүй бизнесийн чухал програмуудад үргэлж бэлэн байдаг

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

Уян хатан өгөгдөл хадгалалт - Cassandra нь бүх боломжит өгөгдлийн форматыг багтаадаг. Үүнд: бүтэцлэгдсэн, хагас бүтэцлэгдсэн мөн бүтэцлэгдээгүй. Энэ нь таны хэрэгцээний дагуу өгөгдлийн бүтцэд өөрчлөлтүүдийг динамикаар зохицуулж чадна.

Хялбар өгөгдөл хуваарилалт - Cassandra нь олон тооны өгөгдлийн төвүүдээр өгөгдлийг хуулбарлах замаар хэрэгцээтэй газраа түгээх уян хатан боломжийг олгодог.

Гүйлгээний дэмжлэг - Cassandra нь (Атомчлалтай, Нийцтэй байдал, Салангид мөн Эдэлгээ) зэрэг шинж чанаруудыг дэмждэг.

Хурдан бичилт - Cassandra нь хямд техник хангамж дээр ажиллахаар бүтээгдсэн. Энэ нь гайхалтай хурдан бичдэг болон уншилтын үр ашгийн алдагдалгүйгээр terabyte хэмжээний өгөгдлийг хадгалж чаддаг.

  • Cassandra-ийн түүх

-Cassandra нь inbox хайлт хийхээр Facebook-д хөгжүүлэгдсэн.

-Энэ нь 2008 оны 7 сард Facebook-ээр нээлттэй эх болсон.

-Cassandra нь 2009 оны 3 сард Apache Incubator-оор хүлээн зөвшөөрөгдсөн.

-Энэ нь 2010 оны 2 сараас хойш Apache-ийн дээд түвшний төсөл болсон.


  • Cassandra - Архитектур

Cassandra-ийн загварчлалын зорилго нь их хэмжээний өгөгдлийн ачааллыг олон тооны зангилааны хооронд алдаа гарч болох нэг ч цэггүйгээр зохицуулагддаг. Cassandra нь зангилаануудын хооронд цэгээс цэгийн хооронд тархсан систем болон өгөгдөл нь кластер дахь бүх зангилаануудыг хооронд тархсан байдаг.

-Кластерийн зангилаа бүр нь ижил үүрэг гүйцэтгэдэг. Зангилаа бүр нь бие даасан байдаг болон нэг цагт бусад зангилаануудтай хоорондоо холбогддог.

-Кластерийн зангилаа бүр нь өгөгдөл нь кластерт байрлаж байгаа эсэхээс үл хамааран унших болон бичих хүсэлтийг хүлээн авдаг.

-Зангилаа нь унасан үед унших/бичих хүсэлтийг сүлжээний бусад зангилаанаас гүйцэтгэж болно.


  • Cassandra-ийн өгөгдлийн хуулбар

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

Дараах зураг нь Cassandra нь ямар ч алдаагүйгээр кластерийн зангилаа бүрт өгөгдлийг хэрхэн хуулбарлаж байгааг харуулж байна.


Тэмдэглэл - Cassandra нь зангилаанууд хоорондоо харилцах болон кластерийн алдаатай зангилаануудыг олоход Gossip Protocol-ийг ард нь ашигладаг.


  • Cassandra-ийн бүрэлдэхүүн хэсгүүд

Cassandra-ийн гол бүрэлдэхүүн хэсгүүд нь дараах байдалтай байна:

-Зангилаа - Энэ нь өгөгдөл хадгалах газар

-Өгөгдлийн төв - Энэ нь холбогдох зангилаануудын цуглуулга

-Кластер - Кластер нь нэг болон хэд хэдэн өгөгдлийн төвийг агуулсан бүрэлдэхүүн хэсэг

-Бүртгэл - Бүртгэл нь Cassandra дахь сүйрэл-сэргээх механизм юм. Бүх бичилтийн үйлдэл нь бүртгэлд бүртгэгдэж байдаг

-Mem-хүснэгт - Mem-хүснэгт нь ой санамжийн байрлагчийн өгөгдлийн бүтэц юм. Бүртгэлийн дараа өгөгдөл нь mem-хүснэгт рүү бичигддэг. Зарим тохиолдолд нэг баганын гэр бүлийн хувьд олон mem-хүснэгтүүд байж болдог.

-SSХүснэгт - Энэ нь контент нь хязгаараас давах үед mem-хүснэгтэд байгаа өгөгдлийг устгасан диск файл юм.

-Bloom шүүлтүүр - Эдгээр нь элемент нь багцийн гишүүн эсэхийг турших хурдан, бусдаас ялгаатай, алгоритмууд юм. Энэ нь тусгай төрөл бүхий кэш юм. Bloom шүүлтүүрүүд нь query болгоны дараа ханддаг.


  • Cassandra Query хэл

Хэрэглэгч нь Cassandra Query хэл ашиглан зангилаануудаар дамжуулан Cassandra-д хандаж болно. CQL нь өгөгдлийн сантай хүснэгтүүдийн контейнерт ханддаг. Программистууд нь cqlsh-ийг ашигладаг: SQL-тэй ажиллахад шуурхай эсвэл аппликэйшний хэлний драйверийг тусгаарладаг.

Клинтүүд нь зангилаануудын аль нэг рүү тэдний унших-бичих үйл ажиллагаагар ханддаг. Зангилаа нь клинт болон өгөгдлийг агуулах зангилааны хоорон дахь проксигоор тоголдог.

Бичих үйл ажиллагаа Зангилааны бичих үйлдэл бүр нь зангилаанд бичигдсэн бүртгэлүүдээс олддог. Дараа нь өгөгдлийг mem-хүснэгтэнд хадгална. Mem-хүснэгт нь дүүрсэн бол өгөгдлийг SSХүснэгт өгөгдлийн файл руу бичнэ. Бүх бичилтүүд нь автоматаар хуваагдаж мөн кластерийн туршид хуулбарлагдана. Cassandra нь SSХүснэгтийг нэгтгэж, шаардлагагүй илүү өгөгдлийг хаядаг.

Унших үйл ажиллагаа Унших үйл ажиллагааны явцад Cassandra нь mem-хүснэгтийн утгыг авдаг бөгөөд шаардлагатай өгөгдлийг агуулж буй SSХүснэгтийг олохын тулд bloom шүүлтүүрийг шалгадаг.


  • Cassandra - Өгөгдлийн загвар

Cassandra-ийн өгөгдлийн загвар нь бидний энгийнээр хардаг RDBMS-ээс мэдэгдэхүйц ялгаатай. Энэ бүлэгт Cassandra нь өгөгдлийг хэрхэн хадгалдаг талаарх тоймыг харуулсан.

Кластер

Cassandra өгөгдлийн сан нь хамтран ажилладаг хэд хэдэн машинууд дээр тархаж байрладаг. Контейнерийг кластер гэж нэрлэдэг. Алдаа дутагдалыг зохицуулахын тулд бүх зангилаа нь хуулбарыг агуулдаг бөгөөд алдаа гарсан тохиолдолд хуулбарыг цэнэглэдэг. Cassandra нь кластерийн зангилааг цагираган хэлбэрээр зохион байгуулж өгөгдлийг тэдэнд өгдөг.

Keyspace

Keyspace нь Cassandra-ийн хамгийн сайн контейнер юм. Cassandra-ийн Keyspace-ийн үндсэн шинж чанарууд нь:

Хуулбарлах фактор - Энэ нь кластерийн машин бүрийн тоо бөгөөд энэ нь ижил өгөгдлийн хуулбарыг хүлээж авдаг

Хуулбарлах байршлын стратеги - Энэ нь цагираган дахь хуулбаруудыг байрлуулах стратеги юм. Бид энгийн стратеги гэх мэт стратегиудтай (rack-aware strategy), хуучин сүлжээний топологийн стратеги(rack-aware strategy) мөн сүлжээний топологийн стратеги (төв цэг-хуваалцсан стратеги).

Багана гэр бүл - Keyspace нь нэг эсвэл хэд хэдэн баганын гэр бүлийн жагсаалтын агуулах юм. Баганын гэр бүл нь эргээд мөрийн цуглуулгын агуулах болдог. Мөр болгон нь эрэмбэлэгдсэн баганыг агуулдаг. Баганын гэр бүл нь таны өгөгдлийн бүтцийг илэрхийлж байдаг. Keyspace болгон нь хамгийн багадаа нэг ба олон баганын гэр бүлтэй байдаг.

Keyspace үүсгэх бичиглэлт нь:

CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor'

Дараах зураглал нь Keyspace-ийн бүдүүвчилсэн дүр зургийг харуулж байна.


  • Баганын гэр бүл

Баганын гэр бүл нь эрэмбэлэгдсэн мөрийн цуглуулгыг агуулж байдаг. Мөр болгон нь эргээд эрэмбэлэгдсэн багана юм. Доор үзүүлсэн хүснэгтэд харьцаа өгөгдлийн сангийн хүснэгт болон баганын гэр бүлийн ялгааг харуулж байна.

Relational Table Cassandra column Family
Харьцаа загварын схем нь тогтоогдсон байдаг. Хүснэгтэд тодорхой багануудыг тодорхойлж өгөгдлийг оруулах үед мөр бүрт наад зах нь бүх утгыг null утгатайгаар бөглөсөн байх ёстой. Cassandra-ийн хувьд баганын гэр бүлийг тодорхойлсон ч багана биш юм. Та ямар ч үед ямар ч баганыг ямар ч баганын гэр бүлд чөлөөтэйгээр нэмж болно.
Харьцаа хүснэгт нь зөвхөн баганыг тодорхойлдог ба хэрэглэгч нь хүснэгтийг утгуудаар бөглөдөг. Cassandra нь хүснэгтэд баганыг агуулдаг эсвэл супер баганын гэр бүл гэж тодорхойлдог

Cassandra-ийн баганын гэр бүлийн шинж чанарууд:

keys_cached - Энэ нь SSХүснэгт бүрээр кэшийг хадгалах байршлын тоог илэрхийлдэг.

rows-cached - Энэ нь санах ойд бүхэлдээ кэшлэгдсэн контэнтийн мөрийн тоог илэрхийлдэг.

preload_row_cache - энэ нь мөрийн кэшийг урьдчилан байрлуулахыг хүсч байгаа эсэхийг тодорхойлно

Тэмдэглэл - Баганын гэр бүлийн схемийг засах боломжгүй харьцааа хүснэгтээс ялгаатай нь Cassandra нь мөрүүдийг бүх баганад байлгахыг шаарддаггүй.

Дараах зураг нь Cassandra-ийн баганын гэр бүлийн жишээх харуулж байна.

  • Багана

Cassandra-ийн үндсэн өгөгдлийн бүтэц нь тухайлбал түлхүүр эсвэл баганы нэр, утга мөн цагны тамга гэсэн 3 утгатай. Доорхыг баганы бүтэц гэж үзье.


  • СуперБагана

Супер багана нь тусгай багана тиймээс энэ нь түлхүүр утга бүхий хос байна. Гэвч супер багана нь дэд баганы газрын зургийг хадгалдаг.

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


  • Cassandra болон RDBMS-ийн өгөгдлийн загварууд

Доор үзүүлсэн хүснэгтэд Cassandra болон RDBMS-ийн ялгааг харуулж байна.

RDBMS Cassandra
RDBMS нь бүтэцлэгдсэн өгөгдөлтэй. Cassandra нь бүтэцлэгдсэн бус өгөгдөлтэй.
Энэ нь тогтмол схетмэй байдаг. Cassandra нь уян хатан схемтэй байдаг.
RDBMS-ийн хүснэгт нь массивийн массив юм. (МӨР x БАГАНА) Cassandra-д хүснэгт нь “хайрцаглагдсан түлхүүр-утгын хос”-ын жагсаалт юм. (МӨР x БАГАНЫН түлхүүр x БАГАНЫН утга)
Өгөгдлийн сан нь аппликэйшнд хамаарах өгөгдөл агуулсан хамгийн том агуулах юм. Keyspace нь аппликэйшнд хамаарах өгөгдөл агуулсан хамгийн том агуулах юм.
Хүснэгт нь өгөгдлийн сангийн нэгж хэсэг юм. Хүснэгтүүд эсвэл баганын гэр бүл нь keyspace-ийн нэгж хэсэг юм.
Мөр нь RDBMS-ийн тусдаа бичлэг юм. Мөр нь Cassandra-ийн хуулбарлах нэгж юм
Багана нь харьцааны шинж чанарыг илэрхийлдэг. Багана нь Cassandra-ийн хадгалалтын нэгж юм.
RDBMS нь гадаад түлхүүр, join зэрэг концепцийг дэмждэг. Харилцаа хамаарал нь цуглуулгуудын ашиглалтыг төлөөлдөг.