Кассандра и Вторичные индексы, как они работают внутри страны?

Как работает вторичный индекс 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