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

Как работает вторичный индекс Кассандры? Документы утверждают, что это какой-то хэш-индекс:

Учитывая, что у меня есть колум username="foobar" (Имя пользователя столбца будет индекс Scondary) в CF User с RandomOrderingPartitioner

  1. Верно ли мое предположение, что Кассандра использует "Распределенный индекс хэша" (= так что индекс не на одном узле = индекс разделен)?
  2. На скольких узлах хранятся индексные части (столько же, сколько и фактор репликации)?
  3. На каких узлах хранятся части индекса (разделяет ли Кассандра индекс по той же логике, что и ключ с RandomOrderingPartitioner)?

  4. Если индекс удерживается только на одном узле (и, конечно, реплицируется), как Кассандра "определяет" узел, который отвечает за индекс (хешируя имя столбца и затем используя логик randompartitioner для определения узла)?

  5. Правда ли, что этот индекс оптимизирован для низкой мощности? Если да, какова грубая оценка (есть ли конкретная цифра, которую я могу использовать, чтобы судить), что я не должен использовать вторичный индекс (а скорее использовать отдельный CF для индекса)? Или сказал иначе, как рассчитать мощность и принять правильное решение?

Я пытаюсь понять это.

1 ответ

Решение

Вторичные индексы - это просто еще одно семейство столбцов. Они не доступны непосредственно пользователям, но вы можете увидеть статистику через bean-компонент JMX: org.apache.cassandra.db.IndexedColumnFamilies

Вы можете просмотреть статистику здесь, чтобы измерить эффективность вашего индекса так же, как и для обычного семейства столбцов.

Для более подробной информации смотрите эти предыдущие посты:

Как хранятся вторичные индексы Кассандры 0,7?

Насколько масштабируемы автоматические вторичные индексы в Cassandra 0.7?

И так как у вас есть тег hector, вот ссылка на тестовый пример для IndexedSlicesQuery: https://github.com/rantav/hector/blob/master/core/src/test/java/me/prettyprint/cassandra/model/IndexedSlicesQueryTest.java

Другие вопросы по тегам