Apache Cassandra için Azure Cosmos DB'de ikincil dizin oluşturma

ŞUNLAR IÇIN GEÇERLIDIR: Cassandra

Azure Cosmos DB'deki Cassandra API'si, temel alınan dizin oluşturma altyapısından yararlanarak platformun doğasında bulunan dizin oluşturma gücünü kullanıma sunar. Ancak NoSQL için çekirdek API'nin aksine Azure Cosmos DB'deki Cassandra API'si varsayılan olarak tüm özniteliklerin dizinini oluşturmaz. Bunun yerine, apache Cassandra ile aynı şekilde davranan belirli özniteliklerde dizin oluşturmak için ikincil dizin oluşturmayı destekler.

Genel olarak, bölümlenmemiş sütunlarda filtre sorguları yürütmeniz önerilmez. allow FILTERING söz dizimini açıkça kullanmanız gerekir ve bu da düzgün çalışmayabilecek bir işlemle sonuçlanabilir. Azure Cosmos DB'de düşük kardinalite özniteliklerinde bu tür sorgular çalıştırabilirsiniz çünkü bunlar sonuçları almak için bölümler arasında yayılabilir.

Sık güncelleştirilen bir sütunda dizin oluşturmanız önerilmez. Tabloyu tanımlarken dizin oluşturmak akıllıca olur. Bu, verilerin ve dizinlerin tutarlı bir durumda olmasını sağlar. Mevcut veriler üzerinde yeni bir dizin oluşturmanız durumunda, şu anda tablonun dizin ilerleme durumu değişikliğini izleyemezsiniz. Bu işlemin ilerleme durumunu izlemeniz gerekiyorsa, bir destek bileti aracılığıyla ilerleme değişikliğini istemeniz gerekir.

Not

İkincil dizinler yalnızca bu makalede belirtilen CQL komutları kullanılarak oluşturulabilir ve Kaynak Sağlayıcısı yardımcı programları (ARM şablonları, Azure CLI, PowerShell veya Terraform) aracılığıyla oluşturulamayabilir. İkincil dizinler aşağıdaki nesnelerde desteklenmez:

  • dondurulan koleksiyon türleri, ondalık ve değişken türleri gibi veri türleri.
  • Statik sütunlar
  • Kümeleme anahtarları

Uyarı

Cassandra IÇIN API'de bölüm anahtarları varsayılan olarak dizine alınmaz. Tablonuzda bileşik bir birincil anahtar varsa ve bölüm anahtarı ve kümeleme anahtarına veya yalnızca bölüm anahtarına göre filtre uygularsanız, bu istenen davranışı sağlar. Ancak, kümeleme anahtarı dışında bölüm anahtarına ve dizine eklenmemiş diğer alanlara filtre uygularsanız, diğer dizine eklenmemiş alanlar ikincil dizine sahip olsa bile bu durum bölüm anahtarının yayılışına neden olur. Tablonuzda bir bileşik birincil anahtar varsa ve bileşik birincil anahtarın hem bölüm anahtarı değer öğesini hem de bölüm anahtarı veya kümeleme anahtarı olmayan başka bir alanı filtrelemek istiyorsanız, bölüm anahtarına açıkça ikincil dizin eklediğinizden emin olun. Bu senaryodaki dizin, diğer bölüm dışı anahtar ve kümeleme olmayan anahtar alanlarında dizin olmasa bile sorgu performansını önemli ölçüde geliştirmelidir. Daha fazla bilgi için bölümleme makalemizi gözden geçirin.

Dizin oluşturma örneği

İlk olarak, CQL kabuk isteminde aşağıdaki komutları çalıştırarak örnek bir anahtar alanı ve tablo oluşturun:

CREATE KEYSPACE sampleks WITH REPLICATION = {'class' : 'SimpleStrategy'};
CREATE TABLE sampleks.t1(user_id int PRIMARY KEY, lastname text) WITH cosmosdb_provisioned_throughput=400;

Ardından aşağıdaki komutlarla örnek kullanıcı verilerini ekleyin:

insert into sampleks.t1(user_id,lastname) values (1, 'nishu');
insert into sampleks.t1(user_id,lastname) values (2, 'vinod');
insert into sampleks.t1(user_id,lastname) values (3, 'bat');
insert into sampleks.t1(user_id,lastname) values (5, 'vivek');
insert into sampleks.t1(user_id,lastname) values (6, 'siddhesh');
insert into sampleks.t1(user_id,lastname) values (7, 'akash');
insert into sampleks.t1(user_id,lastname) values (8, 'Theo');
insert into sampleks.t1(user_id,lastname) values (9, 'jagan');

Aşağıdaki deyimi yürütmeyi denerseniz, kullanmanızı ALLOW FILTERINGisteyen bir hatayla karşılaşırsınız:

select user_id, lastname from sampleks.t1 where lastname='nishu';

Cassandra API'sinin FILTRELEMEye İzİn VERMESİ desteklese de, önceki bölümde belirtildiği gibi önerilmez. Bunun yerine, aşağıdaki örnekte gösterildiği gibi içinde bir dizin oluşturmanız gerekir:

CREATE INDEX ON sampleks.t1 (lastname);

"lastname" alanında bir dizin oluşturduktan sonra, önceki sorguyu başarıyla çalıştırabilirsiniz. Azure Cosmos DB'de Cassandra API'siyle dizin adı sağlamanız gerekmez. Biçimi tablename_columnname_idx olan bir varsayılan dizin kullanılır. Örneğin, t1_lastname_idx önceki tablonun dizin adıdır.

Dizin bırakılıyor

Dizini bırakmak için dizin adının ne olduğunu bilmeniz gerekir. desc schema Tablonuzun açıklamasını almak için komutunu çalıştırın. Bu komutun çıktısı biçiminde CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname)dizin adını içerir. Ardından dizin adını kullanarak aşağıdaki örnekte gösterildiği gibi dizini bırakabilirsiniz:

drop index sampleks.t1_lastname_idx;

Sonraki adımlar