INDEX'i Oluşturun ve Bırakın Cassandra
⚡ Akıllı Özet
İndeks oluşturma ve silme Cassandra Birincil anahtarın parçası olmayan sütunlarda filtreleme yapmayı sağlar. Bu sayfa, CREATE INDEX ve DROP INDEX komutlarını, adlandırma kurallarını, mevcut indeks türlerini ve indeksin yanlış çözüm olduğu durumları kapsamaktadır.

Cassandra Dizin Oluştur
'Dizin oluştur' komutu, kullanıcı tarafından belirtilen sütunda bir dizin oluşturur. Dizine eklemek istediğiniz sütuna ilişkin veriler zaten mevcutsa, Cassandra 'dizin oluştur' ifadesinin yürütülmesi sırasında veriler üzerinde dizinler oluşturur.
- Bir indeks oluşturduktan sonra, Cassandra veri eklendiğinde yeni verileri otomatik olarak indeksler.
- Birincil anahtar zaten dizine eklendiğinden dizin birincil anahtarda oluşturulamaz.
- Koleksiyon sütunlarında, aranacak veriye bağlı olarak KEYS, VALUES veya ENTRIES biçiminde indeksleme desteklenmektedir.
- Sütunda indeksleme olmadan, Cassandra Birincil anahtar olmadığı sürece o sütunu filtreleyemeyiz.
Bu nedenle, sütunları filtrelemek için Cassandraİndekslerin oluşturulması gerekiyor.
Sözdizimi
CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);
Örnek E-posta
İşte indeks oluşturulmadan “dept” sütununun filtrelenmeye çalışıldığı anlık görüntü. Yanıt olarak hata döndürüldü.
Dept sütununda indeksin oluşturulduğu anlık görüntü burada.
CREATE INDEX DeptIndex ON University.Student (dept);
İşte 'dept' sütununun başarıyla filtreleneceği anlık görüntü.
SELECT * FROM University.Student WHERE dept = 'CS';
Dizin adı isteğe bağlıdır. Adını belirtmemek, dizin adının girilmemesine olanak tanır. Cassandra Bir tanesini otomatik olarak oluşturmak, daha sonra dizinin silinmesi gerektiğinde önem taşır.
CREATE INDEX IF NOT EXISTS ON University.Student (dept);
Cassandra Düşen Dizin
'Dizin bırak' komutu belirtilen dizini bırakır. Dizin oluşturma sırasında dizin adı verilmediyse dizin adı TabloAdı_SütunAdı_idx olur.
- Dizin yoksa, IF EXISTS kullanılmadığı sürece no-op döndürecek bir hata döndürecektir.
- İndeks adıyla birlikte keyspace adını da belirtmeniz gerekir, aksi takdirde indeks mevcut keyspace içinde aranacaktır.
Sözdizimi
DROP INDEX IF EXISTS KeyspaceName.IndexName;
Örnek E-posta
Aşağıda DeptIndex indeksini düşüren, çalıştırılan 'Drop index' komutunun anlık görüntüsü bulunmaktadır.
DROP INDEX IF EXISTS University.DeptIndex;
Komutun başarıyla yürütülmesinden sonra DeptIndex anahtar alanından çıkarılacaktır. Artık veriler sütun bölümü tarafından filtrelenemez.
Silinmeden önce hangi indekslerin mevcut olduğunu doğrulamak içinping Öncelikle tabloyu tanımlayın ve çıktının altındaki indeks tanımlarını okuyun.
DESCRIBE TABLE University.Student;
İndeks Türleri Cassandra
Yukarıdaki komut standart bir ikincil dizin oluşturur, ancak üç farklı mekanizma mevcuttur ve bunlar çok farklı şekilde davranırlar.
| Menşei | Nasıl çalışır | İçin en iyisi |
|---|---|---|
| İkincil indeks | Her düğüm yalnızca kendi yerel verilerini indeksler, bu nedenle bölümleme anahtarı olmayan bir sorgu her düğümle iletişime geçmelidir. | Orta büyüklükteki sütunlar, bölümleme anahtarıyla birlikte sorgulanır. |
| SASI endeksi | LIKE önek ve sonek eşleştirmesini ve sayısal aralıkları destekleyen ekli bir dizin. | Metin arama kalıpları. Henüz deneysel olarak işaretlenmiştir, bu nedenle üretimde kullanmadan önce test edin. |
| Depolamaya Ekli Dizin (SAI) | Tanıtıldı Cassandra 5.0, daha düşük yazma yüküyle sütunlar arasında tek bir indeks yapısını paylaşıyor. | Yukarıdakilerin her ikisinin de modern alternatifi şudur: Cassandra 5 küme. |
Bir koleksiyon sütununu indekslemek, hangi bölümün indeksleneceğini belirten bir değiştirici kullanır.
CREATE INDEX ON University.Teacher (VALUES(Email)); CREATE INDEX ON University.Course (KEYS(prereq)); CREATE INDEX ON University.Course (ENTRIES(prereq));
VALUES bir kümenin veya listenin öğelerini arar, KEYS harita anahtarlarını arar ve ENTRIES bir anahtar ve değer çiftini eşleştirir. Koleksiyon indekslemesi daha ayrıntılı olarak ele alınmıştır. Cassandra koleksiyon öğretici.
İndeks Ne Zaman Kullanılmamalıdır? Cassandra
İkincil bir indeks kullanışlıdır ancak ilişkisel bir indeks değildir ve yanlış yerde kullanılması, kümeleme işlemlerinin yavaşlamasına neden olan yaygın bir durumdur. Dört durum farklı bir yaklaşım gerektirir.
- Çok yüksek kardinalite. E-posta adresi gibi neredeyse benzersiz bir şeyi indekslemek, neredeyse her bölümün yalnızca bir eşleşen satır içermesi anlamına gelir; bu nedenle sorgu, tek bir kayıt döndürmek için tüm kümeye yayılır.
- Çok düşük kardinalite. Aktif veya pasif gibi iki değerli bir bayrağı indekslemek, çok büyük indeks bölümleri oluşturur ve bunlardan birini okumak tablonun yarısını döndürür.
- Sık sık güncellenen köşe yazıları. Her değişiklik, eski kayıt için bir indeks girişi ve bir silme kaydı oluşturur; bu nedenle, silme kayıtlarının birikmesi zamanla okuma performansını düşürür.
- Bölümleme anahtarı olmayan sorgular. Böyle bir mekanizma olmadan, koordinatörün her düğümle iletişime geçmesi ve sonuçları birleştirmesi gerekir ki bu da düğüm sayısı arttıkça ölçeklenebilir bir yöntem değildir.
Kalıcı alternatif, aranması gereken sütuna göre anahtarlanmış ve ilk tabloyla aynı anda yazılmış ikinci bir tablodur. Bu, açıklanan sorgu öncelikli ilkeye uygundur. Cassandra veri modeli kurallarıVe her okuma işlemini tek bir düğümdeki tek bir bölüme kaydeder.
Genel bir kural olarak, bir indeks, bilinen bir bölümleme anahtarıyla birlikte sorgulanan, orta düzeyde kardinaliteye sahip bir sütun için uygundur. Bu tanımın dışında kalan her şey için özel olarak oluşturulmuş bir tablo daha iyi bir çözümdür.




