4.1 Paglalarawan

Ang Apache Cassandra ay isang distributed database management system na kabilang sa klase ng NoSQL system at idinisenyo upang lumikha ng lubos na nasusukat at maaasahang mga storage ng malalaking data array na ipinakita sa anyo ng hash.

Sa una, ang proyekto ay binuo sa mga bituka ng Facebook at noong 2009 inilipat sa ilalim ng pakpak ng Apache Software Foundation, ang organisasyong ito ay patuloy na bumuo ng proyekto. Ang mga solusyong pang-industriya na batay sa Cassandra ay naka-deploy upang magbigay ng mga serbisyo sa mga kumpanya tulad ng Cisco, IBM, Cloudkick, Reddit, Digg, Rackspace, Huawei, Netflix, Apple, Instagram, GitHub, Twitter at Spotify. Noong 2011, ang pinakamalaking cluster ng server na naghahatid ng isang database sa ilalim ni Cassandra ay may higit sa 400 machine at naglalaman ng higit sa 300 TB ng data.

Nakasulat sa wikang Java , nagpapatupad ito ng isang distributed hash system na katulad ng DynamoDB, na nagbibigay ng halos linear na scalability sa pagtaas ng dami ng data. Gumagamit ito ng modelo ng pag-iimbak ng data batay sa isang pamilya ng mga column, na naiiba sa mga system tulad ng MemcacheDB, na nag-iimbak ng data lamang sa isang key-value pares, sa pamamagitan ng kakayahang mag-imbak ng mga hash na may ilang antas ng nesting.

Nabibilang sa kategorya ng fault-tolerant na DBMS: ang data na inilagay sa database ay awtomatikong ginagaya sa ilang mga node ng isang distributed network o kahit na pantay na ipinamamahagi sa ilang mga data center. Kapag nabigo ang isang node, ang mga function nito ay mabilis na kukunin ng iba pang mga node, pagdaragdag ng mga bagong node sa cluster at ang pag-update ng bersyon ng Cassandra ay ginagawa nang mabilis, nang walang karagdagang manu-manong interbensyon at muling pagsasaayos ng iba pang mga node.

Gayunpaman, lubos na inirerekomendang muling bumuo ng mga key (label) para sa bawat node, kabilang ang mga umiiral na, upang mapanatili ang kalidad ng load balancing. Maaaring iwasan ang pagbuo ng pangunahing para sa mga umiiral nang node sa kaso ng maraming pagtaas sa bilang ng mga node (2 beses, 3 beses, at iba pa).

4.2 Modelo ng data

Sa terminolohiya ng Cassandra, gumagana ang isang application sa isang keyspace, na tumutugma sa konsepto ng isang database schema sa relational na modelo. Ang keyspace na ito ay maaaring maglaman ng ilang pamilya ng column, na tumutugma sa konsepto ng isang relational table.

Sa turn, ang mga pamilya ng column ay naglalaman ng mga column (column), na pinagsama-sama gamit ang key (row key) sa record (row). Ang column ay binubuo ng tatlong bahagi: pangalan (column name), timestamp (timestamp) at value (value). Ang mga column sa loob ng isang tala ay inayos. Hindi tulad ng isang relational database, walang mga paghihigpit sa kung ang mga talaan (at sa mga tuntunin ng database ito ay mga hilera) ay naglalaman ng mga hanay na may parehong mga pangalan tulad ng sa iba pang mga talaan - hindi.

Ang mga pamilya ng column ay maaaring may ilang uri, ngunit sa artikulong ito ay aalisin natin ang detalyeng ito. Gayundin sa mga pinakabagong bersyon ng Cassandra, naging posible na magsagawa ng mga query para sa pagtukoy at pagbabago ng data (DDL, DML) gamit ang wikang CQL, pati na rin ang paglikha ng mga pangalawang indeks.

Ang tiyak na halaga na nakaimbak sa cassandra ay kinilala ng:

  • Ang keyspace ay isang umiiral sa application (domain). Binibigyang-daan kang mag-host ng data mula sa iba't ibang mga application sa parehong cluster;
  • ang isang column family ay isang binding sa isang query;
  • Ang key ay isang binding sa isang cluster node. Tinutukoy ng susi kung sa aling mga node mapupunta ang mga naka-save na column;
  • Ang pangalan ng column ay isang binding sa isang attribute sa record. Binibigyang-daan kang mag-imbak ng maramihang mga halaga sa isang entry.

Ang bawat halaga ay nauugnay sa isang timestamp, isang numerong tinukoy ng user na ginagamit upang lutasin ang mga salungatan habang nagre-record: kung mas malaki ang numero, isasaalang-alang ang mas bagong column, at kapag inihambing, ino-overwrite ang mga lumang column.

4.3 Mga uri ng data

Ayon sa mga uri ng data: ang keyspace at pamilya ng column ay mga string (mga pangalan); timestamp ay isang 64-bit na numero; at ang key, pangalan ng column, at value ng column ay isang hanay ng mga byte. Si Cassandra ay mayroon ding konsepto ng mga uri ng data. Ang mga uri na ito ay maaaring tukuyin (opsyonal) ng developer kapag gumagawa ng pamilya ng column.

Para sa mga pangalan ng column ito ay tinatawag na comparator, para sa mga value at key ay tinatawag itong validator. Tinutukoy ng una kung anong mga halaga ng byte ang pinapayagan para sa mga pangalan ng column at kung paano i-order ang mga ito. Ang pangalawa ay kung anong mga halaga ng byte ang wasto para sa mga halaga ng column at key.

Kung ang mga uri ng data na ito ay hindi nakatakda, pagkatapos ay iniimbak ni cassandra ang mga halaga at inihahambing ang mga ito bilang mga byte string (BytesType) dahil, sa katunayan, sila ay naka-imbak sa loob.

Ang mga uri ng data ay:

  • BytesType : anumang byte string (walang validation)
  • AsciiType : ASCII string
  • UTF8Type : UTF-8 string
  • IntegerType : numero na may di-makatwirang laki
  • Int32Type : 4-byte na numero
  • LongType : 8-byte na numero
  • UUIDype : UUID type 1 o 4
  • TimeUUIDType : Uri 1 UUID
  • DateType : 8-byte timestamp value
  • BooleanType : dalawang value: true = 1 o false = 0
  • FloatType : 4-byte na numero ng floating point
  • DoubleType : 8-byte na floating point na numero
  • DecimalType : isang numero na may arbitrary na laki at isang lumulutang na punto
  • CounterColumnType : 8 byte na counter

Sa cassandra, ang lahat ng mga operasyon sa pagsulat ng data ay palaging mga operasyon sa pagsulat muli, iyon ay, kung ang isang column na may parehong key at pangalan na mayroon na ay dumating sa column family, at ang timestamp ay mas malaki kaysa sa isa na na-save, pagkatapos ay ang halaga ay ma-overwrite. . Ang mga naitala na halaga ay hindi kailanman nagbabago, ang mga mas bagong column lamang ang pumapasok na may mga bagong halaga.

Ang pagsulat kay cassandra ay mas mabilis kaysa sa pagbabasa. Binabago nito ang diskarte na kinuha sa disenyo. Kung isasaalang-alang namin si cassandra mula sa punto ng view ng pagdidisenyo ng isang modelo ng data, kung gayon mas madaling isipin ang isang pamilya ng haligi hindi bilang isang talahanayan, ngunit bilang isang materyal na pananaw - isang istraktura na kumakatawan sa data ng ilang kumplikadong query, ngunit iniimbak ito sa disk.

Sa halip na subukang gumawa ng data sa ilang paraan gamit ang mga query, mas mainam na subukang iimbak ang lahat ng maaaring kailanganin para sa query na ito sa target na pamilya. Iyon ay, ito ay kinakailangan upang lapitan hindi mula sa gilid ng mga relasyon sa pagitan ng mga entity o mga relasyon sa pagitan ng mga bagay, ngunit mula sa gilid ng mga query: kung aling mga patlang ang kinakailangang mapili; sa anong pagkakasunud-sunod dapat pumunta ang mga talaan; kung anong data na nauugnay sa mga pangunahing dapat hilingin nang magkasama - lahat ng ito ay dapat na naka-imbak sa pamilya ng column.

Ang bilang ng mga column sa isang record ay theoretically limitado sa 2 bilyon. Ito ay isang maikling digression, at higit pang mga detalye ang makikita sa artikulo sa disenyo at mga diskarte sa pag-optimize. At ngayon, alamin natin ang proseso ng pag-save ng data kay cassandra at basahin ito.