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 Perilaku: Hanya kunci utama yang wajib diisi, dan kolom yang dihilangkan tidak memakan ruang penyimpanan.
  • 🔄 Semantik Upsert: Operasi penyisipan dan pembaruan adalah operasi yang sama, sehingga menulis kunci yang sudah ada akan menimpanya secara otomatis.
  • Biaya Penghapusan: Barisan yang dihilangkan menjadi batu nisan dan hanya menghilang setelah proses pemadatan selesai.
  • 🔍 Klausul Where Membatasi: Pemfilteran bekerja pada kolom kunci utama, atau pada kolom lain setelah indeks ada.
  • 📊 Dukungan Agregat: HITUNG, MINIMUM, MAKS, JUMLAH, AVG dan GROUP BY didukung, meskipun hanya efektif di dalam satu partisi.
  • 🚫 Masih Belum Didukung: Penggabungan (join), kondisi OR, dan analitik lintas partisi tetap berada di luar CQL sesuai dengan rancangannya.

Cassandra CQL Sisipkan Perbarui Hapus

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'.

Sisipkan Data

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.

Sisipkan Data

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.

Perbaharui data

Berikut cuplikan eksekusinya Cassandra Perintah update yang mengupdate record pada tabel Student.

Perbaharui data

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.

Perbaharui 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.

Cassandra Hapus Data

Berikut adalah cuplikan dari perintah yang akan menghapus satu baris dari tabel Siswa.

Cassandra Hapus Data

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.

Cassandra Hapus Data

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.

  1. CQL tidak mendukung penggabungan (join) antar tabel. Data terkait harus dinormalisasi menjadi satu tabel pada saat penulisan.
  2. CQL tidak mendukung kondisi OR dalam klausa WHERE. Gunakan IN pada satu kolom, atau jalankan kueri terpisah.
  3. CQL tidak mendukung UNION atau INTERSECT.
  4. Kolom yang bukan kolom kunci utama tidak dapat difilter sampai indeks tersedia pada kolom tersebut.
  5. Perbandingan lebih besar dari dan lebih kecil hanya berlaku untuk kolom pengelompokan, karena hanya kolom-kolom tersebut yang diurutkan di disk.
  6. 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.

Cassandra Dimana klausul

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.

Cassandra Dimana klausul

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.

Pertanyaan Umum Demo Slot

Batch mengelompokkan pernyataan sehingga berhasil atau gagal bersamaan. Gunakan ini untuk menjaga agar tabel yang duplikat tetap sinkron, bukan untuk pemuatan massal, di mana batch di banyak partisi sangat memperlambat koordinator.

Driver melakukan paging secara otomatis menggunakan token status paging. Di cqlsh, PAGING mengatur ukurannya. Hindari meniru OFFSET dengan penghitung, karena Cassandra tidak memiliki fungsi lewati baris yang efisienping mekanisme.

Jika replika tidak aktif lebih lama dari gc_grace_seconds dan tombstone sudah dipadatkan, replika tersebut masih menyimpan baris lama dan menyebarkannya kembali. Perbaikan rutin mencegah hal ini.

Pernyataan SELECT sederhana dari satu tabel dapat dikonversi dengan baik. Pernyataan apa pun yang melibatkan JOIN, OR, atau subquery tidak memiliki padanan CQL langsung, dan AI sering kali menutupi kekurangan tersebut dengan ALLOW FILTERING, yang bukanlah solusi yang tepat.

Ya. Menempel TRACOutput ING ON biasanya memberikan pembacaan yang jelas tentang pemindaian tombstone, partisi lebar, atau lompatan antar node. Verifikasi perubahan skema yang disarankan pada salinan sebelum menerapkannya.

Ringkaslah postingan ini dengan: