Документация Кассандры гласит:
Не используйте индекс в следующих ситуациях:
- Для столбцов с большим количеством элементов, потому что вы запрашиваете огромный объем записей для небольшого числа результатов. См. Проблемы с использованием индекса столбца с большим количеством элементов ниже.
Это продолжается,
Если вы создадите индекс для столбца с высокой степенью кардинальности, который имеет много различных значений, запрос между полями повлечет за собой много поисков для очень немногих результатов. В таблице с миллиардом песен поиск песен по автору (значение, которое обычно уникально для каждой песни), а не по исполнителю, скорее всего, будет очень неэффективным. Вероятно, было бы более эффективно поддерживать таблицу как форму индекса вручную, а не использовать встроенный индекс Cassandra. Для столбцов, содержащих уникальные данные, иногда для удобства целесообразно использовать индекс, если объем запросов к таблице, содержащей индексированный столбец, является умеренным и не находится под постоянной нагрузкой.
Но на самом деле никогда не отвечает на вопрос: почему это неэффективно? Я понятия не имею, что означает «ручное ведение таблицы как формы индекса». Но тогда это несколько противоречит самому себе: «… иногда для удобства целесообразно использовать индекс, если объем запросов умеренный…»
Это просто пытается сказать мне, чтобы использовать ПК, когда и где я могу? В чем неэффективность? Насколько я понимаю, запрос, который будет попадать в индекс, должен будет запрашивать каждый узел в кластере, а затем каждый узел будет выполнять поиск в своем локальном индексе, а затем результаты будут агрегироваться. Это не обязательно дорого (каждый поиск индекса должен быть довольно дешевым), за исключением того, что мы платим с задержкой в сети, так как мы должны ждать самого медленного узла в лоте. Я что-то здесь упускаю?
Но если у меня есть коллекция с баджиллионными предметами, которые - в редких случаях - нужно искать по другому, но почти уникальному атрибуту ... это подходящее использование, верно?
¹Every? IDK, если репликация означает, что это может поразить 1/3 кластера при коэффициенте репликации 3 или нет?