Добавление вторичного индекса в Cassandra индексирует исторические данные?

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

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

Я попытался создать CF с индексом в столбце (я использую Cassandra 1.0.7).

создать пользователей семейства столбцов с comparator=UTF8Type и column_metadata=[{имя_столбца: полное_имя, класс_валидации: UTF8Type}, {имя_столбца: дата_рождения, класс_валидации: LongType, тип_индекса: KEYS}, {имя_столбца: состояние, класс_валидации: UTF8Type, тип_индекса: KEYS}] ;

Добавил немного данных, потом сделал

удалил индекс путем удаления индекса users.birth_date, а затем добавил его обратно, обновив CF

обновить пользователей семейства столбцов с компаратором = UTF8Type и column_metadata = [{имя_столбца: полное_имя, класс_валидации: UTF8Type}, {имя_столбца: дата_рождения, класс_валидации: LongType, тип_индекса: KEYS}, {имя_столбца: состояние, класс_валидации: UTF8Type, тип_индекса: KEYS}] ;

а затем снова добавил некоторые данные

Но когда я запрашиваю данные о рождении, я также получаю исторические данные?

Может ли кто-нибудь прояснить мое замешательство по этому поводу? Есть два способа создать индекс, один с историческими данными и один без?


person Peter    schedule 10.02.2014    source источник


Ответы (1)


Возможно, предыдущая версия Cassandra не создавала индексы для исторических данных, но, согласно кодовому сообщению Cassandra 1.2, создание индекса — это асинхронный процесс, который происходит с историческими данными, если вы добавляете вторичный индекс:

https://github.com/apache/cassandra/blob/cassandra-1.2.15/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java#L240

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

Если вы не уверены, что ваши вторичные индексы синхронизированы, вы можете использовать:

nodetool rebuild_index
person Arya    schedule 10.02.2014