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.

  • 🔎 Endeks Neden Önemli? İndeks olmadan, WHERE yan tümcesi yalnızca birincil anahtar sütunlarına referans verebilir.
  • ???? ️ Adlandırma Kuralı: TableName_ColumnName_idx şeklinde isimsiz bir indeks oluşturulur ve bu indeks aynı isimle silinmelidir.
  • 🔁 Otomatik Bakım: Mevcut satırlar oluşturulma anında indekslenir ve yeni satırlar herhangi bir ek işlem yapılmadan yazma işlemi sırasında indekslenir.
  • ???? Kısıtlamalar: Birincil anahtar sütunları zaten indekslenmiş durumda, bu nedenle bunlar üzerinde ikincil indeks oluşturulması reddediliyor.
  • 📉 Kardinalite Önemlidir: Çok yüksek veya çok düşük kardinaliteye sahip sütunlar, bir dizini yavaşlatır veya kullanışsız hale getirir.
  • 🧱 Daha İyi Alternatif: Özel olarak tasarlanmış bir sorgu tablosu, genellikle büyük ölçekte ikincil bir dizinden daha iyi performans gösterir.

Dizin Oluşturma ve Silme Cassandra

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

Cassandra Dizin Oluştur

Dept sütununda indeksin oluşturulduğu anlık görüntü burada.

Cassandra Dizin Oluştur

CREATE INDEX DeptIndex ON University.Student (dept);

İşte 'dept' sütununun başarıyla filtreleneceği anlık görüntü.

Cassandra Dizin Oluştur

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.

Cassandra Düşen Dizin

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.

SSS

Kesin bir sınır yok, ancak her indeks yazma maliyetini ve bellek kullanımını artırır. Tablo başına iki veya üç indeks pratik bir üst sınırdır; bunun ötesinde, veri modelini yeniden gözden geçirmek gerekir.

Hayır. Mevcut satırlar arka planda indekslenir ve tablo erişilebilir kalır. Büyük tablolar zaman alır ve ilerleme nodetool compactionstats komutuyla izlenebilir.

Bir indeks, temel tablodaki satırlara işaret eder. Somutlaştırılmış görünüm, kendi bölümleme anahtarıyla otomatik olarak tutulan ayrı bir tablodur, bu nedenle okuma işlemleri tek bir bölüme isabet eder.

Sorgu listesi ve sütun sayısı göz önüne alındığında, yapay zeka adayları mantıklı bir şekilde sıralayabilir. Ancak, dizinin silinen kayıtları biriktirip biriktirmeyeceğini belirleyen güncelleme sıklığını göremez.

Genellikle, reddedilen bir sorgunun çalıştırılmasını sağladığı için bu öneri yapılır. Bu öneriyi, gerçekten bir dizine veya yeni bir sorgu tablosuna ihtiyaç duyulduğunun bir işareti olarak değerlendirin.

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