Pengindeksan sekunder di Azure Cosmos DB untuk Apache Cassandra

BERLAKU UNTUK: Cassandra

API untuk Cassandra di Azure Cosmos DB memanfaatkan infrastruktur pengindeksan yang mendasar untuk mengekspos kekuatan pengindeksan yang melekat dalam platform. Namun, tidak seperti API inti untuk NoSQL, API untuk Cassandra di Azure Cosmos DB tidak mengindeks semua atribut secara default. Sebaliknya, ia mendukung pengindeksan sekunder untuk membuat indeks pada atribut tertentu, yang berperilaku sama seperti Apache Cassandra.

Secara umum, tidak disarankan untuk menjalankan kueri filter pada kolom yang tidak dipartisi. Anda harus menggunakan sintaks ALLOW FILTERING secara eksplisit, yang menghasilkan operasi yang mungkin tidak berperforma baik. Di Microsoft Azure Cosmos DB Anda dapat menjalankan kueri tersebut pada atribut kardinalitas rendah karena mereka menyebar ke seluruh partisi untuk mengambil hasilnya.

Tidak disarankan untuk membuat indeks pada kolom yang sering diperbarui. Sangat bijaksana bila membuat indeks saat Anda menentukan tabel. Langkah ini memastikan bahwa data dan indeks berada dalam keadaan konsisten. Jika Anda membuat indeks baru pada data yang ada, saat ini, Anda tidak dapat melacak perubahan kemajuan indeks untuk tabel. Jika Anda perlu melacak kemajuan untuk operasi ini, Anda harus meminta perubahan kemajuan melalui tiket dukungan.

Catatan

Indeks sekunder hanya dapat dibuat dengan menggunakan perintah CQL yang disebutkan dalam artikel ini, dan bukan melalui utilitas Penyedia Sumber Daya (templat ARM, Azure CLI, PowerShell, atau Terraform). Indeks sekunder tidak didukung pada objek berikut:

  • jenis data seperti jenis koleksi beku, desimal, dan jenis varian.
  • Kolom statis
  • Tombol pengelompokan

Peringatan

Kunci partisi tidak diindeks secara default dalam API untuk Cassandra. Jika Anda memiliki kunci primer gabungan dalam tabel Anda, lalu Anda memfilter entah kunci partisi dan kunci pengklusteran atau hanya kunci partisi, Anda akan melihat perilaku yang diinginkan. Namun, jika Anda memfilter kunci partisi dan bidang lainnya yang tidak diindeks selain dari kunci pengklusteran, Anda akan menghasilkan fan-out kunci partisi - meski bidang lainnya yang tidak diindeks memiliki indeks sekunder. Jika Anda memiliki kunci primer gabungan di dalam tabel, lalu Anda ingin memfilter elemen nilai kunci partisi dari kunci primer gabungan, ditambah bidang lain yang bukan merupakan kunci partisi maupun kunci pengklusteran, pastikan Anda menambahkan indeks sekunder secara eksplisit pada kunci partisinya. Indeks dalam skenario ini harus secara signifikan meningkatkan performa kueri, bahkan jika bidang kunci non-partisi dan kunci non-pengklusteran lainnya tidak memiliki indeks. Tinjau artikel kami tentang partisi untuk informasi selengkapnya.

Contoh pengindeksan

Pertama, buat contoh ruang kunci dan tabel dengan menjalankan perintah berikut pada prompt shell CQL:

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

Lalu, sisipkan contoh data pengguna dengan perintah berikut:

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');

Jika Anda mencoba mengeksekusi pernyataan berikut, Anda akan mengalami kesalahan yang meminta Anda untuk menggunakan ALLOW FILTERING:

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

Meskipun API untuk Cassandra mendukung ALLOW FILTERING, seperti yang disebutkan di bagian sebelumnya, api tidak disarankan. Sebagai gantinya, Anda harus membuat indeks seperti yang diperlihatkan dalam contoh berikut:

CREATE INDEX ON sampleks.t1 (lastname);

Setelah membuat indeks pada bidang "nama belakang", Sekarang Anda dapat menjalankan kueri sebelumnya dengan berhasil. Dengan API untuk Cassandra di Azure Cosmos DB, Anda tidak perlu memberikan nama indeks. Indeks default dengan format tablename_columnname_idx digunakan. Misalnya, t1_lastname_idx adalah nama indeks untuk tabel sebelumnya.

Menghapus indeks

Anda perlu tahu apa nama indeks untuk menghapusnya. Jalankan perintah desc schema untuk mendapatkan deskripsi tabel Anda. Output dari perintah ini mencakup nama indeks dalam format CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname). Anda kemudian dapat menggunakan nama indeks untuk menghapus indeks tersebut seperti yang diperlihatkan dalam contoh berikut:

drop index sampleks.t1_lastname_idx;

Langkah berikutnya