Кассандра и Вторичные индексы, как они работают внутри страны?
Как работает вторичный индекс Cassandra внутри? В документах указано, что это какой-то индекс хеширования:
Учитывая, что у меня есть colum username="foobar"
(имя пользователя столбца будет scondary index) в CF User
с RandomOrderingPartitioner
- Я правильно понял, что кассандра использует "Распределенный индекс хеширования" (= поэтому индекс не находится на одном единственном node= индекс разделен)?
- Сколько узлов занимают части индекса (то же самое, что и коэффициент репликации)?
-
На каких узлах хранятся индексы (Кассандра разделяет индекс по той же логике, что и ключ с RandomOrderingPartitioner)?
-
Если индекс удерживается только на одном node (и, конечно, реплицируется), как кассандра "определяет" node, который отвечает за
index (путем хэширования столбца, а затем с помощью логика randompartitioner для определения node)?
-
Действительно ли это, что этот индекс оптимизирован для низкой мощности? Если да, то какая приблизительная оценка (
есть конкретная фигура, которую я могу судить), что я не должен использовать вторичный индекс (а скорее использовать
отдельный CF для индекса)?
Или иначе сказал, как вычислить мощность и принять правильное решение?
Я пытаюсь понять это.
Ответы
Ответ 1
Вторичные индексы - это в основном просто другое семейство столбцов. Они не доступны напрямую пользователям, но вы можете просмотреть статистику через JMX bean:
org.apache.cassandra.db.IndexedColumnFamilies
Здесь вы можете проконсультироваться с статистикой, чтобы оценить эффективность вашего индекса, так как вы бы использовали обычное семейство столбцов.
Подробнее см. в этих предыдущих сообщениях:
Как сохраняются вторичные индексы Cassandra 0.7?
Насколько масштабируемы автоматические вторичные индексы в Cassandra 0.7?
И поскольку у вас есть тег hector, вот ссылка на тестовый пример для IndexedSlicesQuery:
https://github.com/rantav/hector/blob/master/core/src/test/java/me/prettyprint/cassandra/model/IndexedSlicesQueryTest.java