Основное отличие состоит в том, что вторичные индексы в Cassandra не распределяются так же, как инвертированный вручную индекс. Благодаря встроенным вторичным индексам каждый узел индексирует данные, которые он хранит локально (используя LocalPartitioner). При ручной индексации индексы распределяются независимо от узлов, в которых хранятся значения.
Это означает, что для встроенных индексов каждый запрос должен направляться к каждому узлу, в то время как если бы вы выполняли инвертированное индексирование вручную, вы бы просто обращались к одному узлу (плюс реплики), чтобы запросить искомое значение. Одним из преимуществ локального хранения индекса является то, что индексы можно обновлять атомарно вместе с данными. (Хотя, начиная с Cassandra 1.2, вместо этого можно использовать атомарные пакеты, хотя они немного медленнее.)
Вот почему индексы Cassandra не рекомендуются для данных с действительно высокой кардинальностью. Если вы выполняете поиск на каждом узле, но есть только один или два результата, это неэффективно, и лучше использовать инвертированный индекс вручную. Если ваш поиск возвращает много результатов, вам все равно придется искать на каждом узле, чтобы встроенные индексы работали хорошо.
Еще одно преимущество использования встроенной индексации Cassandra заключается в том, что индексы обновляются лениво, поэтому вам не нужно выполнять чтение при каждом обновлении. (См. CASSANDRA-2897.) Это может значительно повысить скорость индексированных таблиц. с высокой скоростью записи.
person
Richard
schedule
08.10.2013