4.1 Penerangan

Apache Cassandra ialah sistem pengurusan pangkalan data teragih yang tergolong dalam kelas sistem NoSQL dan direka bentuk untuk mencipta storan berskala dan boleh dipercayai bagi tatasusunan data besar yang dibentangkan dalam bentuk cincang.

Pada mulanya, projek itu dibangunkan di dalam perut Facebook dan pada tahun 2009 dipindahkan di bawah sayap Yayasan Perisian Apache, organisasi ini terus membangunkan projek itu. Penyelesaian industri berdasarkan Cassandra digunakan untuk menyediakan perkhidmatan kepada syarikat seperti Cisco, IBM, Cloudkick, Reddit, Digg, Rackspace, Huawei, Netflix, Apple, Instagram, GitHub, Twitter dan Spotify. Menjelang 2011, kluster pelayan terbesar yang menyediakan pangkalan data tunggal di bawah Cassandra mempunyai lebih daripada 400 mesin dan mengandungi lebih daripada 300 TB data.

Ditulis dalam bahasa Java , ia melaksanakan sistem cincang yang diedarkan serupa dengan DynamoDB, yang menyediakan kebolehskalaan hampir linear dengan peningkatan volum data. Ia menggunakan model storan data berdasarkan keluarga lajur, yang berbeza daripada sistem seperti MemcacheDB, yang menyimpan data hanya dalam pasangan nilai kunci, dengan keupayaan untuk menyimpan cincangan dengan beberapa peringkat sarang.

Digolongkan dalam kategori DBMS toleran kesalahan: data yang diletakkan dalam pangkalan data secara automatik direplikasi kepada beberapa nod rangkaian teragih atau bahkan diedarkan secara sama rata di beberapa pusat data. Apabila nod gagal, fungsinya diambil dengan cepat oleh nod lain, menambah nod baharu pada kluster dan mengemas kini versi Cassandra dilakukan dengan cepat, tanpa campur tangan manual tambahan dan konfigurasi semula nod lain.

Walau bagaimanapun, adalah sangat disyorkan untuk menjana semula kunci (label) untuk setiap nod, termasuk yang sedia ada, untuk mengekalkan kualiti pengimbangan beban. Penjanaan kunci untuk nod sedia ada boleh dielakkan sekiranya berlaku peningkatan berganda dalam bilangan nod (2 kali, 3 kali dan seterusnya).

4.2 Model data

Dalam terminologi Cassandra, aplikasi berfungsi dengan ruang kekunci, yang sepadan dengan konsep skema pangkalan data dalam model hubungan. Ruang kekunci ini boleh mengandungi beberapa keluarga lajur, yang sepadan dengan konsep jadual hubungan.

Seterusnya, keluarga lajur mengandungi lajur (lajur), yang digabungkan menggunakan kekunci (kunci baris) dalam rekod (baris). Lajur terdiri daripada tiga bahagian: nama (nama lajur), cap masa (cap masa) dan nilai (nilai). Lajur dalam rekod disusun. Tidak seperti pangkalan data hubungan, tiada sekatan sama ada rekod (dan dari segi pangkalan data ini adalah baris) mengandungi lajur dengan nama yang sama seperti dalam rekod lain - tidak.

Keluarga lajur boleh terdiri daripada beberapa jenis, tetapi dalam artikel ini kami akan meninggalkan butiran ini. Juga dalam versi terkini Cassandra, ia menjadi mungkin untuk melaksanakan pertanyaan untuk mentakrif dan menukar data (DDL, DML) menggunakan bahasa CQL, serta mencipta indeks sekunder.

Nilai khusus yang disimpan dalam cassandra dikenal pasti oleh:

  • ruang kekunci adalah pengikat kepada aplikasi (domain). Membolehkan anda mengehos data daripada aplikasi yang berbeza pada kelompok yang sama;
  • keluarga lajur adalah terikat pada pertanyaan;
  • kunci ialah pengikatan pada nod kluster. Kekunci menentukan nod mana lajur yang disimpan akan berakhir;
  • nama lajur ialah pengikatan pada atribut dalam rekod. Membolehkan anda menyimpan berbilang nilai dalam satu entri.

Setiap nilai dikaitkan dengan cap masa, nombor yang ditentukan pengguna yang digunakan untuk menyelesaikan konflik semasa rakaman: semakin besar nombor, lajur yang lebih baharu dipertimbangkan dan apabila dibandingkan, menimpa lajur lama.

4.3 Jenis data

Mengikut jenis data: ruang kekunci dan keluarga lajur ialah rentetan (nama); cap waktu ialah nombor 64-bit; dan kunci, nama lajur dan nilai lajur ialah tatasusunan bait. Cassandra juga mempunyai konsep jenis data. Jenis ini boleh ditentukan (sebagai pilihan) oleh pembangun semasa membuat keluarga lajur.

Untuk nama lajur ini dipanggil pembanding, untuk nilai dan kunci ia dipanggil pengesah. Yang pertama mentakrifkan nilai bait yang dibenarkan untuk nama lajur dan cara memesannya. Yang kedua ialah nilai bait yang sah untuk nilai lajur dan kunci.

Jika jenis data ini tidak ditetapkan, maka cassandra menyimpan nilai dan membandingkannya sebagai rentetan bait (BytesType) kerana, sebenarnya, ia disimpan secara dalaman.

Jenis data ialah:

  • BytesType : sebarang rentetan bait (tiada pengesahan)
  • AsciiType : rentetan ASCII
  • UTF8Type : rentetan UTF-8
  • IntegerType : nombor dengan saiz sewenang-wenangnya
  • Int32Type : Nombor 4-bait
  • Jenis Panjang : nombor 8-bait
  • UUIDtype : UUID jenis 1 atau 4
  • TimeUUIDTtype : Jenis 1 UUID
  • DateType : Nilai cap masa 8-bait
  • BooleanType : dua nilai: benar = 1 atau palsu = 0
  • FloatType : Nombor titik terapung 4-bait
  • DoubleType : Nombor titik terapung 8-bait
  • DecimalType : nombor dengan saiz arbitrari dan titik terapung
  • CounterColumnType : pembilang 8 bait

Dalam cassandra, semua operasi penulisan data sentiasa operasi menulis semula, iaitu, jika lajur dengan kunci dan nama yang sama yang sudah wujud datang ke keluarga lajur, dan cap masa lebih besar daripada yang disimpan, maka nilai itu akan ditulis ganti. . Nilai yang direkodkan tidak pernah berubah, hanya lajur yang lebih baharu masuk dengan nilai baharu.

Menulis kepada cassandra lebih pantas daripada membaca. Ini mengubah pendekatan yang diambil dalam reka bentuk. Jika kita menganggap cassandra dari sudut pandangan mereka bentuk model data, maka lebih mudah untuk membayangkan keluarga lajur bukan sebagai jadual, tetapi sebagai pandangan terwujud - struktur yang mewakili data beberapa pertanyaan kompleks, tetapi menyimpannya pada cakera.

Daripada cuba mengarang data dalam beberapa cara menggunakan pertanyaan, lebih baik cuba menyimpan semua yang mungkin diperlukan untuk pertanyaan ini dalam keluarga sasaran. Iaitu, adalah perlu untuk mendekati bukan dari sisi hubungan antara entiti atau hubungan antara objek, tetapi dari sisi pertanyaan: medan mana yang diperlukan untuk dipilih; dalam susunan apa rekod harus pergi; apakah data yang berkaitan dengan yang utama harus diminta bersama - semua ini sepatutnya disimpan dalam keluarga lajur.

Bilangan lajur dalam rekod secara teorinya terhad kepada 2 bilion. Ini adalah penyimpangan ringkas, dan butiran lanjut boleh didapati dalam artikel mengenai reka bentuk dan teknik pengoptimuman. Dan sekarang mari kita mendalami proses menyimpan data kepada cassandra dan membacanya.