У документації Кассандри зазначено:
Не використовуйте індекс у таких ситуаціях:
- У стовпцях з високою кардинальністю, оскільки ви запитуєте величезний обсяг записів для невеликої кількості результатів. Див. Проблеми із використанням індексу стовпців високої кардинальності нижче.
Це продовжується,
Якщо створити індекс у стовпці з високою кардинальністю, який має багато чітких значень, запит між полями спричинить багато запитів за дуже мало результатів. У таблиці з мільярдом пісень пошук пісень письменника (значення, яке зазвичай є унікальним для кожної пісні) замість їх виконавця, ймовірно, буде дуже неефективним. Напевно, було б ефективніше підтримувати таблицю як форму індексу вручну, а не використовувати вбудований індекс Cassandra. Для стовпців, що містять унікальні дані, іноді досить зручно використовувати індекс для зручності, якщо об'єм запитів до таблиці, що має індексований стовпець, є помірним і не знаходиться під постійним навантаженням.
Але ніколи насправді не відповідає на питання: чому це неефективно? Я поняття не маю, що означає "вручну підтримувати таблицю як форму індексу". Але тоді це дещо суперечить самому собі "... іноді чудово ефективність використання індексу для зручності до тих пір, поки обсяг запиту є помірним ..."
Це просто намагаюся сказати мені використовувати ПК, коли і де я можу? У чому полягає неефективність? Я розумію, що запит, який би потрапив до індексу, повинен запитувати кожен вузол кластера, і тоді кожен вузол зробив би пошук у своєму локальному індексі, а результати отримали б агрегацію. Це не обов'язково дорого (кожен пошук індексу повинен бути досить дешевим), за винятком того, що ми платимо в мережевій затримці, оскільки нам потрібно чекати найповільнішого вузла партії. Я чогось тут пропускаю?
Але якщо у мене є колекція, яка містить мільйони предметів, які - рідко - потрібно шукати за іншим, але майже унікальним атрибутом ... це правильне використання, правда?
¹Всі? IDK, якщо реплікація означає, що це може вразити 1/3 кластера для коефіцієнта реплікації 3 чи ні?