2014-02-10 2 views
1

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

Здесь When does Cassandra DB index data after updating a column as secondary index Принятый ответ говорит, что он будет индексировать только данные, которые вставляются после создания индекса.

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

создать столбец семьи пользователей с компаратором = UTF8Type и column_metadata = [. {Column_name: FULL_NAME, validation_class: UTF8Type} , {column_name: birth_date, validation_class: LongType, index_type: KEYS}, {column_name: state, validation_class: UTF8Type, index_type: KEYS}];

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

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

обновление столбца семьи пользователей с компаратором = UTF8Type и column_metadata = [{column_name: full_name, validation_class: UTF8Type}, {column_name: birth_date, validation_class: LongType, index_type: KEYS}, {column_name: state, validation_class: UTF8Type, index_type: KEYS}];

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

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

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

ответ

1

Может быть, предыдущая версия Кассандры не создавать индексы для исторических данных, но в соответствии с кодом поста 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 
Смежные вопросы