Aracılığıyla paylaş


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 öznitelikleri dizine almaz. 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 tükenebilir.

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 tablo için 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, kaynak sağlayıcısı yardımcı programları (ARM şablonları, Azure CLI, PowerShell veya Terraform) aracılığıyla değil, yalnızca bu makalede belirtilen CQL komutları kullanılarak oluşturulabilir. İ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 birincil anahtarınız varsa ve bölüm anahtarı ve kümeleme anahtarına göre 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 alınamayan diğer alanlara filtre uygularsanız, diğer dizine alınamayan alanlar ikincil dizine sahip olsa bile bu durum bölüm anahtarının tükenmiş olmasına neden olur. Tablonuzda bir bileşik birincil anahtarınız varsa ve bileşik birincil anahtarın bölüm anahtarı değer öğesinin yanı sıra 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 bir dizin eklediğinizden emin olun. Bu senaryodaki dizin, bölümlenmeyen diğer anahtar ve kümelenmeyen anahtar alanlarının dizini 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ı verileri 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 IÇIN API, önceki bölümde belirtildiği gibi ALLOW FILTERING'i desteklese de ö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);

"soyadı" 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 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