4.1 Katrangan

Apache Cassandra minangka sistem manajemen basis data sing disebarake sing kalebu ing kelas sistem NoSQL lan dirancang kanggo nggawe panyimpenan sing bisa diukur lan dipercaya saka susunan data sing gedhe banget sing ditampilake ing wangun hash.

Kaping pisanan, proyek kasebut dikembangake ing weteng Facebook lan ing taun 2009 ditransfer ing sangisore sayap Yayasan Perangkat Lunak Apache, organisasi iki terus ngembangake proyek kasebut. Solusi industri adhedhasar Cassandra disebarake kanggo nyedhiyakake layanan kanggo perusahaan kayata Cisco, IBM, Cloudkick, Reddit, Digg, Rackspace, Huawei, Netflix, Apple, Instagram, GitHub, Twitter lan Spotify. Ing taun 2011, kluster server paling gedhe sing nglayani database siji ing sangisore Cassandra duwe luwih saka 400 mesin lan ngemot luwih saka 300 TB data.

Ditulis nganggo basa Jawa , iki ngetrapake sistem hash sing disebarake padha karo DynamoDB, sing nyedhiyakake skalabilitas sing meh linear kanthi nambah volume data. Iki nggunakake model panyimpenan data adhedhasar kulawarga kolom, sing beda karo sistem kaya MemcacheDB, sing nyimpen data mung ing pasangan nilai kunci, kanthi kemampuan kanggo nyimpen hash kanthi sawetara tingkat nesting.

Kagolong kategori fault-tolerant DBMS: data sing diselehake ing basis data kanthi otomatis ditiru menyang sawetara simpul jaringan sing disebarake utawa malah disebarake kanthi rata ing sawetara pusat data. Nalika simpul gagal, fungsi sing dijupuk munggah ing fly dening kelenjar liyane, nambah kelenjar anyar kanggo kluster lan nganyari versi Cassandra wis rampung ing fly, tanpa melu-melu manual tambahan lan reconfiguration saka kelenjar liyane.

Nanging, dianjurake banget kanggo ngasilake kunci (label) kanggo saben simpul, kalebu sing wis ana, supaya bisa njaga kualitas load balancing. Generasi kunci kanggo simpul sing ana bisa nyingkiri yen ana paningkatan kaping pirang-pirang ing jumlah simpul (2 kaping, 3 kaping, lan sateruse).

4.2 Model data

Ing terminologi Cassandra, aplikasi bisa digunakake karo keyspace, sing cocog karo konsep skema database ing model relasional. Papan tombol iki bisa ngemot sawetara kulawarga kolom, sing cocog karo konsep tabel relasional.

Sabanjure, kulawarga kolom ngemot kolom (kolom), sing digabungake nggunakake tombol (tombol baris) ing rekaman (baris). Kolom kasebut dumadi saka telung bagean: jeneng (jeneng kolom), cap wektu (cap wektu) lan nilai (nilai). Kolom ing rekaman diurutake. Ora kaya database relasional, ora ana watesan babagan apa cathetan (lan ing babagan basis data iki minangka baris) ngemot kolom kanthi jeneng sing padha karo cathetan liyane - ora.

Kulawarga kolom bisa dadi pirang-pirang jinis, nanging ing artikel iki kita bakal ngilangi rincian kasebut. Uga ing versi paling anyar saka Cassandra, sampeyan bisa nindakake pitakon kanggo nemtokake lan ngganti data (DDL, DML) nggunakake basa CQL, uga nggawe indeks sekunder.

Nilai spesifik sing disimpen ing cassandra diidentifikasi kanthi:

  • keyspace minangka ikatan kanggo aplikasi (domain). Ngidini sampeyan dadi tuan rumah data saka macem-macem aplikasi ing kluster sing padha;
  • kulawarga kolom minangka naleni pitakon;
  • tombol punika naleni menyang simpul cluster. Tombol nemtokake simpul ing kolom sing disimpen bakal rampung;
  • jeneng kolom minangka ikatan karo atribut ing rekaman. Ngidini sampeyan nyimpen sawetara nilai ing siji entri.

Saben nilai digandhengake karo timestamp, nomer sing ditemtokake pangguna sing digunakake kanggo ngatasi konflik sajrone ngrekam: sing luwih gedhe nomer kasebut, kolom sing luwih anyar dianggep, lan yen dibandhingake, nimpa kolom lawas.

4.3 Jinis data

Miturut jinis data: keyspace lan kulawarga kolom minangka strings (jeneng); timestamp minangka nomer 64-bit; lan kunci, jeneng kolom, lan nilai kolom minangka array bita. Cassandra uga nduweni konsep jinis data. Jinis iki bisa ditemtokake (opsional) dening pangembang nalika nggawe kulawarga kolom.

Kanggo jeneng kolom iki diarani komparator, kanggo nilai lan kunci kasebut diarani validator. Pisanan nemtokake nilai byte apa sing diidini kanggo jeneng kolom lan cara supaya. Kapindho yaiku nilai bait sing bener kanggo kolom lan nilai kunci.

Yen jinis data kasebut ora disetel, banjur cassandra nyimpen nilai kasebut lan mbandhingake minangka string bait (BytesType) amarga, nyatane, disimpen sacara internal.

Jinis data yaiku:

  • BytesType : sembarang byte strings (ora validasi)
  • AsciiType : ASCII string
  • UTF8Type : UTF-8 string
  • IntegerType : nomer kanthi ukuran sembarang
  • Int32Type : 4-byte nomer
  • LongType : 8-byte nomer
  • UUIDtipe : UUID tipe 1 utawa 4
  • WektuUUIDTtipe : Tipe 1 UUID
  • DateType : Nilai timestamp 8-byte
  • BooleanType : rong nilai: bener = 1 utawa salah = 0
  • FloatType : 4-bait angka floating point
  • DoubleType : 8-byte angka floating point
  • DecimalType : nomer kanthi ukuran sing kawenang-wenang lan titik ngambang
  • CounterColumnType : 8 byte counter

Ing cassandra, kabeh operasi nulis data tansah operasi nulis ulang, sing, yen kolom karo tombol padha lan jeneng sing wis ana teka menyang kulawarga kolom, lan timestamp luwih saka siji sing disimpen, banjur Nilai bakal ditindih. . Nilai sing direkam ora bakal owah, mung kolom sing luwih anyar teka kanthi nilai anyar.

Nulis kanggo cassandra luwih cepet tinimbang maca. Iki ngganti pendekatan sing dijupuk ing desain. Yen kita nganggep cassandra saka sudut pandang ngrancang model data, mula luwih gampang mbayangno kulawarga kolom ora minangka tabel, nanging minangka tampilan materialized - struktur sing makili data saka sawetara pitakonan rumit, nanging nyimpen ing disk.

Tinimbang nyoba nyipta data kanthi cara nggunakake pitakon, luwih becik nyoba nyimpen kabeh sing bisa dibutuhake kanggo pitakon iki ing kulawarga target. Tegese, perlu nyedhaki ora saka sisih hubungan antarane entitas utawa hubungan antarane obyek, nanging saka sisih pitakon: lapangan sing kudu dipilih; ing urutan apa cathetan kudu pindhah; data apa sing ana hubungane karo sing utama kudu dijaluk bebarengan - kabeh iki kudu disimpen ing kulawarga kolom.

Jumlah kolom ing rekaman sacara teoritis diwatesi nganti 2 milyar. Iki minangka digression singkat, lan rincian liyane bisa ditemokake ing artikel babagan teknik desain lan optimasi. Lan saiki ayo goleki proses nyimpen data menyang cassandra lan maca.