Dokumentasi Cassandra menyatakan,
Jangan gunakan indeks dalam situasi ini:
- Pada kolom kardinalitas tinggi karena Anda kemudian meminta volume rekaman yang besar untuk sejumlah kecil hasil. Lihat Masalah menggunakan indeks kolom kardinalitas tinggi di bawah ini.
Ini berlanjut,
Jika Anda membuat indeks pada kolom kardinalitas tinggi, yang memiliki banyak nilai berbeda, kueri di antara bidang akan menimbulkan banyak pencarian untuk hasil yang sangat sedikit. Di meja dengan satu miliar lagu, mencari lagu oleh penulis (nilai yang biasanya unik untuk setiap lagu) alih-alih oleh artis mereka, cenderung sangat tidak efisien. Mungkin akan lebih efisien untuk mempertahankan tabel secara manual sebagai bentuk indeks daripada menggunakan indeks bawaan Cassandra. Untuk kolom yang berisi data unik, kadang-kadang kinerja yang baik untuk menggunakan indeks untuk kenyamanan, selama volume kueri ke tabel yang memiliki kolom yang diindekskan sedang dan tidak di bawah beban konstan.
Tetapi tidak pernah benar-benar menjawab pertanyaan: mengapa itu tidak efisien? Saya tidak tahu apa artinya "mempertahankan tabel secara manual sebagai bentuk indeks". Tapi kemudian itu agak bertentangan dengan "... kadang-kadang kinerja yang baik untuk menggunakan indeks untuk kenyamanan selama volume permintaan moderat ..."
Apakah ini hanya mencoba untuk memberitahu saya untuk menggunakan PK kapan dan di mana saya bisa? Apa inefisiensi? Pemahaman saya adalah bahwa kueri yang akan memukul indeks perlu kueri setiap node dalam cluster, dan kemudian setiap node akan melakukan pencarian dalam indeks lokal dan hasilnya kemudian akan dikumpulkan. Ini belum tentu mahal (setiap pencarian indeks harus cukup murah) kecuali bahwa kita membayar dalam latensi jaringan, karena kita harus menunggu node paling lambat dari banyak. Apakah saya kehilangan sesuatu di sini?
Tetapi jika saya memiliki koleksi yang memiliki barang-barang bajillion yang - pada kesempatan langka - perlu dilihat oleh atribut yang berbeda tetapi hampir unik ... ini adalah penggunaan yang tepat, bukan?
¹Setiap? IDK jika replikasi berarti bahwa ini bisa mengenai 1/3 cluster untuk faktor replikasi 3 atau tidak?