Cassandra Bahasa Kueri (CQL): Sisipkan, Perbarui & Hapus
⚡ Ringkasan Cerdas
Cassandra Bahasa Kueri menangani operasi sisipkan, perbarui, hapus, dan baca dengan sintaks yang mirip dengan SQL tetapi semantik yang berbeda di baliknya. Halaman ini membahas setiap pernyataan, perilaku upsert yang menggabungkan sisipkan dan perbarui, dan batasan sebenarnya dari klausa WHERE.
Sisipkan Data
The Cassandra masukkan pernyataan menulis data Cassandra kolom dalam bentuk baris. Cassandra masukkan kueri hanya akan menyimpan kolom yang diberikan oleh pengguna. Anda harus menentukan kolom kunci utama saja.
Tidak akan memakan ruang untuk nilai yang tidak diberikan. Tidak ada hasil yang dikembalikan setelah penyisipan.
Sintaksis
INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3) VALUES (Column1Value, Column2Value, Column3Value);
Example
Berikut cuplikan eksekusinya Cassandra Masukkan ke dalam kueri tabel yang akan memasukkan satu catatan ke dalamnya Cassandra tabel 'Siswa'.
INSERT INTO University.Student (RollNo, Name, dept, Semester) VALUES (2, 'Michael', 'CS', 2);
Setelah berhasil menjalankan perintah Sisipkan ke Cassandra, satu baris akan disisipkan ke dalam Cassandra tabel Mahasiswa dengan RollNo 2, Nama Michael, jurusan CS dan Semester 2.
Berikut adalah cuplikan status database saat ini.
Masukkan Data
Cassandra tidak mengecewakan. Upsert maksudnya Cassandra akan menyisipkan baris jika kunci utama belum ada, sebaliknya jika kunci utama sudah ada, maka baris tersebut akan diperbarui.
Hal ini memiliki konsekuensi praktis yang perlu dijelaskan secara gamblang: perintah INSERT tidak pernah melaporkan kesalahan kunci duplikat, sehingga penyisipan ulang yang tidak disengaja akan menimpa baris yang sudah ada tanpa peringatan. Jika hal itu harus dicegah, tambahkan IF NOT EXISTS untuk menjadikan pernyataan tersebut sebagai transaksi yang ringan.
INSERT INTO University.Student (RollNo, Name) VALUES (2, 'Michael') IF NOT EXISTS;
Transaksi ringan menggunakan putaran konsensus di seluruh replika, sehingga jauh lebih lambat daripada penulisan normal dan sebaiknya hanya digunakan untuk kasus-kasus yang benar-benar membutuhkan pengecekan tersebut.
Perbaharui data
The Cassandra Update query digunakan untuk memperbarui data di Cassandra tabelJika tidak ada hasil yang ditampilkan setelah memperbarui data, berarti data berhasil diperbarui, jika tidak, kesalahan akan ditampilkan. Nilai kolom diubah dalam klausa 'Set' sementara data difilter dengan klausa 'Where'.
Sintaksis
UPDATE KeyspaceName.TableName SET ColumnName1 = NewValue1, ColumnName2 = NewValue2 WHERE ColumnName = ColumnValue;
Example
Berikut adalah screenshot yang menunjukkan status database sebelum melakukan update data.
Berikut cuplikan eksekusinya Cassandra Perintah update yang mengupdate record pada tabel Student.
UPDATE University.Student SET name = 'Hayden' WHERE rollno = 1;
Setelah berhasil mengeksekusi permintaan pembaruan di Cassandra 'Update Siswa', nama siswa akan diubah dari 'Clark' menjadi 'Hayden' yang memiliki rollno 1.
Berikut adalah screenshot yang menunjukkan status database setelah update data.
Karena perilaku upsert, UPDATE terhadap primary key yang tidak ada akan membuat baris baru alih-alih gagal.
Cassandra Hapus Data
Perintah 'Hapus' menghapus seluruh baris atau beberapa kolom dari tabel Siswa. Ketika data dihapus, data tersebut tidak langsung dihapus dari tabel. Sebaliknya data yang dihapus ditandai dengan batu nisan dan dihapus setelah pemadatan.
Sintaksis
DELETE FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Atas Cassandra sintaks hapus baris akan menghapus satu atau lebih baris tergantung pada penyaringan data di klausa mana.
DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName WHERE ColumnName1 = ColumnValue;
Sintaks di atas akan menghapus beberapa kolom dari tabel.
Example
Berikut adalah snapshot yang menunjukkan status database saat ini sebelum menghapus data.
Berikut adalah cuplikan dari perintah yang akan menghapus satu baris dari tabel Siswa.
DELETE FROM University.Student WHERE rollno = 1;
Setelah perintah CQL Delete berhasil dieksekusi, satu baris akan dihapus dari tabel Student jika nilai rollno adalah 1.
Berikut adalah snapshot yang menunjukkan status database setelah data dihapus.
Tombstone bertahan selama gc_grace_seconds, sepuluh hari secara default, sehingga node yang offline selama penghapusan tidak dapat memulihkan baris tersebut ketika kembali aktif. Oleh karena itu, penghapusan volume besar meninggalkan penanda yang harus dilewati oleh setiap pembacaan berikutnya.
Apa Cassandra tidak mendukung
CQL meminjam sintaks SQL tetapi tidak model eksekusi relasionalnya, sehingga beberapa konstruksi yang familiar berperilaku berbeda atau tidak ada.
- CQL tidak mendukung penggabungan (join) antar tabel. Data terkait harus dinormalisasi menjadi satu tabel pada saat penulisan.
- CQL tidak mendukung kondisi OR dalam klausa WHERE. Gunakan IN pada satu kolom, atau jalankan kueri terpisah.
- CQL tidak mendukung UNION atau INTERSECT.
- Kolom yang bukan kolom kunci utama tidak dapat difilter sampai indeks tersedia pada kolom tersebut.
- Perbandingan lebih besar dari dan lebih kecil hanya berlaku untuk kolom pengelompokan, karena hanya kolom-kolom tersebut yang diurutkan di disk.
- Pencocokan pola dengan LIKE memerlukan indeks SASI dan tidak tersedia pada kolom biasa.
Satu klaim yang sudah lama beredar perlu dikoreksi. Fungsi agregat didukung: HITUNG, MINIMUM, MAKS, JUMLAH dan AVG tiba di Cassandra 2.2, dan KELOMPOK OLEH Tiba pada 3.10. Yang menjadi masalah adalah cakupan, bukan ketersediaan.
SELECT dept, COUNT(*) FROM University.Student WHERE RollNo = 1 GROUP BY dept;
Jika dibatasi pada satu partisi seperti di atas, agregasi akan efisien. Namun, jika dijalankan di seluruh tabel, itu akan menjadi pemindaian di seluruh klaster, itulah sebabnya Cassandra tetap tidak cocok untuk analitik ad hoc dan mengapa pelaporan yang berat biasanya didorong ke Spark atau gudang eksternal.
Cassandra Dimana klausul
In Cassandra, pengambilan data adalah masalah sensitif. Kolom disaring Cassandra dengan membuat indeks pada kolom non-kunci utama.
Sintaksis
SELECT ColumnNames FROM KeyspaceName.TableName WHERE ColumnName1 = Column1Value AND ColumnName2 = Column2Value;
Example
- Berikut adalah cuplikan yang menunjukkan pengambilan data dari tabel Siswa tanpa penyaringan data.
SELECT * FROM University.Student;
Dua catatan diambil dari tabel Siswa.
- Berikut adalah snapshot yang menunjukkan pengambilan data dari Student dengan penyaringan data. Satu catatan diambil.
Data difilter berdasarkan kolom nama. Semua catatan yang memiliki nama sama dengan [nama] akan diambil. Guru99.
SELECT * FROM University.Student WHERE name = 'Guru99';
Aturan yang mengatur kolom mana yang dapat dirujuk oleh klausa WHERE mengikuti langsung dari kunci utama.
- The kunci partisi Informasi ini harus diberikan secara lengkap agar kueri dapat berjalan efisien, karena informasi ini mengidentifikasi node yang menyimpan data.
- Clusterkolom ing Kemudian mungkin dibatasi, tetapi hanya sesuai urutan deklarasinya. Lewatiping Salah satunya ditolak.
- Perbandingan rentang diperbolehkan pada kolom pengelompokan terakhir yang dirujuk, bukan pada kolom sebelumnya.
- Apa saja kolom lainnya membutuhkan indeks sekunder, yang dibahas dalam buat dan hapus indeks tutorial.
Ketika sebuah permintaan ditolak, Cassandra Seringkali disarankan untuk menambahkan ALLOW FILTERING. Anggap itu sebagai peringatan, bukan perbaikan: sistem memindai setiap partisi di setiap node, dan perubahan skema hampir selalu merupakan respons yang tepat.











