Cassandra Sorgu Dili (CQL): Ekleme, Güncelleme ve Silme

⚡ Akıllı Özet

Cassandra Sorgu Dili, SQL'e yakın bir sözdizimiyle ancak altta yatan farklı anlambilimle ekleme, güncelleme, silme ve okuma işlemlerini ele alır. Bu sayfa, her bir ifadeyi, ekleme ve güncellemeyi birleştiren upsert davranışını ve WHERE yan tümcesinin gerçek sınırlarını ele almaktadır.

  • Davranış Ekle: Yalnızca birincil anahtar zorunludur ve atlanan sütunlar depolama alanı tüketmez.
  • 🔄 Upsert Anlambilimi: Ekleme ve güncelleme aynı işlemdir, bu nedenle mevcut bir anahtarı yazmak, onu sessizce üzerine yazar.
  • 🗑️ Silme Maliyeti: Kaldırılan satırlar mezar taşına dönüşür ve ancak sıkıştırma işlemleri tamamlandıktan sonra kaybolur.
  • 🔍 Madde Sınırlamaları: Filtreleme, birincil anahtar sütunlarında veya bir indeks oluşturulduktan sonra diğer sütunlarda çalışır.
  • 📊 Toplu Destek: SAYI, MİN, MAKS, TOPLAM, AVG ve GROUP BY komutları desteklenmektedir, ancak yalnızca tek bir bölüm içinde verimli bir şekilde kullanılabilirler.
  • ???? Hâlâ Desteklenmiyor: Birleştirme işlemleri, VEYA koşulları ve bölümler arası analizler, tasarım gereği CQL'nin dışında tutulmuştur.

Cassandra CQL Ekle Güncelleme Sil

Veri Girin

MKS Cassandra insert ifadesi veriyi içine yazar Cassandra satır biçimindeki sütunlar. Cassandra ekleme sorgusu yalnızca kullanıcı tarafından verilen sütunları saklar. Yalnızca birincil anahtar sütununu mutlaka belirtmeniz gerekir.

Verilmeyen değerler için yer kaplamaz. Eklemeden sonra hiçbir sonuç döndürülmez.

Sözdizimi

INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3)
VALUES (Column1Value, Column2Value, Column3Value);

Örnek E-posta

İşte idamın görüntüsü Cassandra Bir kayıt ekleyecek tablo sorgusuna ekleyin Cassandra 'Öğrenci' tablosu.

Veri Girin

INSERT INTO University.Student (RollNo, Name, dept, Semester)
VALUES (2, 'Michael', 'CS', 2);

İçine ekle komutunun başarılı bir şekilde yürütülmesinden sonra Cassandra, bir satır eklenecek Cassandra Tablo Öğrenci No. 2, Adı Michael, bölüm CS ve Dönem 2.

İşte mevcut veritabanı durumunun anlık görüntüsü.

Veri Girin

Verileri Yükselt

Cassandra üzülüyor. Upsert şu anlama gelir Cassandra Birincil anahtar mevcut değilse bir satır ekler, aksi takdirde birincil anahtar mevcutsa bu satırı günceller.

Bunun açıkça belirtilmesi gereken pratik bir sonucu vardır: bir INSERT işlemi asla yinelenen anahtar hatası bildirmez, bu nedenle yanlışlıkla yapılan bir yeniden ekleme, mevcut satırı uyarı vermeden üzerine yazar. Bunun önlenmesi gerektiğinde, ifadeyi hafif bir işlem haline getirmek için IF NOT EXISTS ekleyin.

INSERT INTO University.Student (RollNo, Name)
VALUES (2, 'Michael') IF NOT EXISTS;

Hafif işlemler, kopyalar arasında bir mutabakat turu kullandığından, normal bir yazma işleminden önemli ölçüde daha yavaştır ve gerçekten kontrole ihtiyaç duyulan durumlar için saklanmalıdır.

Veriyi güncelle

MKS Cassandra Güncelleme sorgusu, veriyi güncellemek için kullanılır. Cassandra tablo. Veriler güncellendikten sonra hiçbir sonuç döndürülmezse, bu verilerin başarıyla güncellendiği anlamına gelir, aksi takdirde bir hata döndürülür. Veriler 'Where' ifadesiyle filtrelenirken sütun değerleri 'Set' ifadesinde değiştirilir.

Sözdizimi

UPDATE KeyspaceName.TableName
SET ColumnName1 = NewValue1,
    ColumnName2 = NewValue2
WHERE ColumnName = ColumnValue;

Örnek E-posta

Verileri güncellemeden önce veritabanı durumunu gösteren ekran görüntüsü.

Veriyi güncelle

İşte idamın görüntüsü Cassandra Öğrenci tablosundaki kaydı güncelleyen Güncelleştirme komutu.

Veriyi güncelle

UPDATE University.Student
SET name = 'Hayden'
WHERE rollno = 1;

Güncelleme sorgusunun başarıyla yürütülmesinden sonra Cassandra 'Öğrenciyi Güncelle', öğrenci adı 'Clark'tan 1 numaralı rollno'ya 'Hayden' olarak değiştirilecektir.

Verileri güncelledikten sonra veritabanı durumunu gösteren ekran görüntüsü.

Veriyi güncelle

Upsert davranışından dolayı, mevcut olmayan birincil anahtara karşı yapılan bir UPDATE işlemi, başarısız olmak yerine satırı oluşturur.

Cassandra Verileri Sil

'Sil' komutu, Öğrenci tablosundan bir satırın tamamını veya bazı sütunları kaldırır. Veriler silindiğinde tablodan hemen silinmez. Bunun yerine silinen veriler bir mezar taşıyla işaretlenir ve sıkıştırıldıktan sonra kaldırılır.

Sözdizimi

DELETE FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

Yukarıdaki Cassandra satır silme sözdizimi, Where cümlesindeki veri filtrelemesine bağlı olarak bir veya daha fazla satırı siler.

DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

Yukarıdaki sözdizimi tablodan bazı sütunları silecektir.

Örnek E-posta

Verileri silmeden önce mevcut veritabanı durumunu gösteren anlık görüntü buradadır.

Cassandra Verileri Sil

İşte Öğrenci tablosundan bir satırı kaldıracak komutun anlık görüntüsü.

Cassandra Verileri Sil

DELETE FROM University.Student WHERE rollno = 1;

CQL Delete komutunun başarılı bir şekilde yürütülmesinin ardından, Student tablosundan rollno değeri 1 olan bir satır silinecektir.

İşte verileri sildikten sonra veritabanı durumunu gösteren anlık görüntü.

Cassandra Verileri Sil

Mezar taşları, varsayılan olarak on gün olan gc_grace_seconds süresince kalır; böylece silme işlemi sırasında çevrimdışı olan bir düğüm, geri döndüğünde satırı yeniden canlandıramaz. Bu nedenle, büyük hacimli silme işlemleri, her sonraki okuma işleminin taramasını gerektiren işaretler bırakır.

Ne Cassandra desteklemez

CQL, SQL sözdizimini ödünç alır ancak ilişkisel yürütme modelini almaz; bu nedenle birçok tanıdık yapı farklı davranır veya mevcut değildir.

  1. CQL, tablolar arasında birleştirmeyi desteklemez. İlişkili veriler, yazma sırasında tek bir tabloda denormalize edilmelidir.
  2. CQL, WHERE yan tümcesinde OR koşullarını desteklemez. Tek bir sütun üzerinde IN operatörünü kullanın veya ayrı sorgular çalıştırın.
  3. CQL, UNION veya INTERSECT işlemlerini desteklemez.
  4. Birincil anahtar olmayan sütunlar, üzerlerinde bir indeks oluşturulana kadar filtrelenemez.
  5. "Büyüktür" ve "küçüktür" karşılaştırmaları yalnızca kümeleme sütunları için geçerlidir, çünkü diskte yalnızca bu sütunlar sıralanır.
  6. LIKE ile desen eşleştirme, SASI dizini gerektirir ve sıradan sütunlarda kullanılamaz.

Uzun süredir devam eden bir iddianın düzeltilmesi gerekiyor. Toplama işlevleri desteklenmektedir: SAYIM, MİN, MAKS, TOPLAM ve AVG geldi Cassandra 2.2 ve GROUP BY 3.10 sürümünde geldi. Buradaki önemli nokta, kullanılabilirlik değil, kapsamdır.

SELECT dept, COUNT(*) FROM University.Student
WHERE RollNo = 1 GROUP BY dept;

Yukarıdaki gibi tek bir bölüme kısıtlandığında, toplama işlemi verimlidir. Tüm tablo üzerinde çalıştırıldığında ise küme çapında bir tarama haline gelir, bu yüzden Cassandra Geçici analizler için uygun olmamasının ve kapsamlı raporlamanın genellikle bu yüzden ertelenmesinin nedeni budur. Spark veya harici bir depo.

Cassandra nerede Clause

In Cassandra, veri alımı hassas bir konudur. Sütun filtrelendi Cassandra birincil olmayan anahtar sütunlarda bir dizin oluşturarak.

Sözdizimi

SELECT ColumnNames FROM KeyspaceName.TableName
WHERE ColumnName1 = Column1Value
  AND ColumnName2 = Column2Value;

Örnek E-posta

  • Veri filtreleme olmadan Öğrenci tablosundan veri alımını gösteren anlık görüntü buradadır.

Cassandra nerede Clause

SELECT * FROM University.Student;

Öğrenci tablosundan iki kayıt alınır.

  • Burada Öğrenci'den veri filtreleme ile veri alımını gösteren anlık görüntü yer almaktadır. Bir kayıt alındı.

Veriler ad sütununa göre filtrelenir. Adı "..." değerine eşit olan tüm kayıtlar alınır. Guru99

Cassandra nerede Clause

SELECT * FROM University.Student WHERE name = 'Guru99';

WHERE yan tümcesinin hangi sütunlara referans verebileceğini düzenleyen kurallar doğrudan birincil anahtardan kaynaklanır.

  • MKS bölüm anahtarı Veriyi tutan düğümü tanımladığı için, verimli bir sorgulama için bu bilgi eksiksiz olarak sağlanmalıdır.
  • Clustersütunlar Daha sonra kısıtlanabilirler, ancak yalnızca ilan edildikleri sıraya göre. Atlaping Bir tanesi reddedildi.
  • Aralık karşılaştırmalarına, daha önceki sütunlarda değil, referans alınan son kümeleme sütununda izin verilir.
  • Farketmez diğer sütun İkinci bir dizine ihtiyaç duyulmaktadır, bu da şurada ele alınmıştır: dizin oluştur ve sil öğretici.

Bir sorgu reddedildiğinde, Cassandra Genellikle ALLOW FILTERING eklemeyi önerir. Bunu bir düzeltme değil, bir uyarı olarak değerlendirin: her düğümdeki her bölümü tarar ve şema değişikliği neredeyse her zaman doğru çözümdür.

SSS

Toplu işlem, ifadeleri bir araya getirerek başarılı veya başarısız olmalarını sağlar. Bunu, yinelenen tabloları senkronize halde tutmak için kullanın; ancak birçok bölüm üzerinde toplu yükleme için kullanmayın, çünkü toplu yükleme koordinatörünü ciddi şekilde yavaşlatır.

Sürücüler, sayfalama durumu belirteci kullanarak otomatik olarak sayfalama yaparlar. cqlsh'de PAGING, boyutu belirler. OFFSET'i bir sayaçla taklit etmekten kaçının, çünkü Cassandra verimli bir satır atlama özelliği yok.ping mekanizması.

Eğer bir kopya gc_grace_seconds'tan daha uzun süre kapalı kalırsa ve mezar taşı zaten sıkıştırılarak ortadan kaldırılmışsa, o kopya yine de eski satırı tutar ve geri yayar. Düzenli onarım bunu önler.

Basit tek tablolu SELECT sorguları iyi dönüştürülür. JOIN, OR veya alt sorgu içeren her şeyin doğrudan CQL karşılığı yoktur ve AI genellikle bu açığı ALLOW FILTERING ile kapatır ki bu bir çözüm değildir.

Evet. Yapıştırma TRACING ON çıktısı genellikle mezar taşı taramaları, geniş bölümler veya düğümler arası atlamalar hakkında net bir bilgi verir. Önerilen şema değişikliğini uygulamadan önce bir kopyası üzerinde doğrulayın.

Bu yazıyı şu şekilde özetleyin: