4.1 Deskripsi
Apache Cassandra adalah sistem manajemen basis data terdistribusi yang termasuk dalam kelas sistem NoSQL dan dirancang untuk membuat penyimpanan array data besar yang sangat skalabel dan andal yang disajikan dalam bentuk hash.
Awalnya, proyek ini dikembangkan di perut Facebook dan pada tahun 2009 ditransfer di bawah naungan Apache Software Foundation, organisasi ini terus mengembangkan proyek tersebut. Solusi industri berdasarkan Cassandra digunakan untuk memberikan layanan kepada perusahaan seperti Cisco, IBM, Cloudkick, Reddit, Digg, Rackspace, Huawei, Netflix, Apple, Instagram, GitHub, Twitter, dan Spotify. Pada tahun 2011, cluster server terbesar yang melayani database tunggal di bawah Cassandra memiliki lebih dari 400 mesin dan berisi lebih dari 300 TB data.
Ditulis dalam bahasa Java , ini mengimplementasikan sistem hash terdistribusi yang mirip dengan DynamoDB, yang memberikan skalabilitas hampir linier dengan peningkatan volume data. Ini menggunakan model penyimpanan data berdasarkan keluarga kolom, yang berbeda dari sistem seperti MemcacheDB, yang menyimpan data hanya dalam pasangan nilai kunci, dengan kemampuan untuk menyimpan hash dengan beberapa tingkat bersarang.
Milik kategori DBMS yang toleran terhadap kesalahan: data yang ditempatkan dalam database secara otomatis direplikasi ke beberapa node jaringan terdistribusi atau bahkan didistribusikan secara merata di beberapa pusat data. Ketika sebuah node gagal, fungsinya diambil dengan cepat oleh node lain, menambahkan node baru ke cluster dan memperbarui versi Cassandra dilakukan dengan cepat, tanpa intervensi manual tambahan dan konfigurasi ulang node lain.
Namun, sangat disarankan untuk membuat ulang kunci (label) untuk setiap node, termasuk yang sudah ada, untuk menjaga kualitas load balancing. Pembangkitan kunci untuk node yang ada dapat dihindari jika terjadi peningkatan beberapa kali dalam jumlah node (2 kali, 3 kali, dan seterusnya).
4.2 Model data
Dalam terminologi Cassandra, sebuah aplikasi bekerja dengan keyspace, yang sesuai dengan konsep skema database dalam model relasional. Ruang kunci ini dapat berisi beberapa keluarga kolom, yang sesuai dengan konsep tabel relasional.
Pada gilirannya, keluarga kolom berisi kolom (kolom), yang digabungkan menggunakan kunci (kunci baris) dalam catatan (baris). Kolom terdiri dari tiga bagian: nama (nama kolom), cap waktu (timestamp) dan nilai (value). Kolom dalam catatan dipesan. Tidak seperti basis data relasional, tidak ada batasan apakah catatan (dan dalam istilah basis data ini adalah baris) berisi kolom dengan nama yang sama seperti pada catatan lain - tidak.
Keluarga kolom dapat terdiri dari beberapa jenis, tetapi dalam artikel ini kami akan menghilangkan detail ini. Juga di versi terbaru Cassandra, dimungkinkan untuk mengeksekusi kueri untuk mendefinisikan dan mengubah data (DDL, DML) menggunakan bahasa CQL, serta membuat indeks sekunder.
Nilai spesifik yang disimpan di cassandra diidentifikasi oleh:
- keyspace adalah pengikatan ke aplikasi (domain). Memungkinkan Anda menghosting data dari berbagai aplikasi di cluster yang sama;
- keluarga kolom mengikat ke kueri;
- kunci adalah pengikatan ke node cluster. Kunci menentukan simpul mana kolom yang disimpan akan berakhir;
- nama kolom adalah pengikatan ke atribut dalam catatan. Memungkinkan Anda menyimpan banyak nilai dalam satu entri.
Setiap nilai dikaitkan dengan stempel waktu, nomor yang ditentukan pengguna yang digunakan untuk menyelesaikan konflik selama perekaman: semakin besar angkanya, kolom yang lebih baru dipertimbangkan, dan bila dibandingkan, menimpa kolom lama.
4.3 Tipe data
Menurut tipe data: keyspace dan keluarga kolom adalah string (nama); cap waktu adalah angka 64-bit; dan kunci, nama kolom, dan nilai kolom adalah larik byte. Cassandra juga memiliki konsep tipe data. Jenis ini dapat ditentukan (opsional) oleh pengembang saat membuat keluarga kolom.
Untuk nama kolom disebut pembanding, untuk nilai dan kunci disebut validator. Yang pertama menentukan nilai byte apa yang diizinkan untuk nama kolom dan cara memesannya. Yang kedua adalah nilai byte apa yang valid untuk nilai kolom dan kunci.
Jika tipe data ini tidak disetel, maka cassandra menyimpan nilainya dan membandingkannya sebagai string byte (BytesType) karena sebenarnya disimpan secara internal.
- BytesType : sembarang byte string (tanpa validasi)
- AsciiType : string ASCII
- UTF8Type : string UTF-8
- IntegerType : angka dengan ukuran sembarang
- Int32Type : angka 4-byte
- LongType : angka 8-byte
- UUIDType : UUID tipe 1 atau 4
- TimeUUIDType : Tipe 1 UUID
- DateType : Nilai stempel waktu 8-byte
- BooleanType : dua nilai: true = 1 atau false = 0
- FloatType : Angka floating point 4-byte
- DoubleType : Angka floating point 8-byte
- DecimalType : angka dengan ukuran sembarang dan floating point
- CounterColumnType : penghitung 8 byte
Di cassandra, semua operasi penulisan data selalu merupakan operasi penulisan ulang, yaitu jika kolom dengan kunci dan nama yang sama yang sudah ada masuk ke keluarga kolom, dan stempel waktu lebih besar dari yang disimpan, maka nilainya ditimpa . Nilai yang direkam tidak pernah berubah, hanya kolom baru yang masuk dengan nilai baru.
Menulis ke cassandra lebih cepat daripada membaca. Ini mengubah pendekatan yang diambil dalam desain. Jika kita mempertimbangkan cassandra dari sudut pandang merancang model data, maka lebih mudah membayangkan keluarga kolom bukan sebagai tabel, tetapi sebagai tampilan terwujud - struktur yang mewakili data dari beberapa kueri kompleks, tetapi menyimpannya di disk.
Daripada mencoba menyusun data dengan cara tertentu menggunakan kueri, lebih baik mencoba menyimpan semua yang mungkin diperlukan untuk kueri ini di keluarga target. Artinya, perlu untuk mendekati bukan dari sisi relasi antar entitas atau relasi antar objek, tetapi dari sisi query: field mana yang harus dipilih; dalam urutan apa catatan harus pergi; data apa yang terkait dengan yang utama harus diminta bersama - semua ini harus sudah disimpan di kolom keluarga.
Jumlah kolom dalam catatan secara teoritis dibatasi hingga 2 miliar. Ini adalah penyimpangan singkat, dan detail lebih lanjut dapat ditemukan di artikel tentang teknik desain dan pengoptimalan. Dan sekarang mari kita selidiki proses menyimpan data ke cassandra dan membacanya.
GO TO FULL VERSION