Являются ли вторичные индексы всегда плохой идеей в Кассандре, даже если я указываю их вместе с ключом разделения во всех моих запросах? - PullRequest
1 голос
/ 01 марта 2020

Я знаю, что вторичные индексы в Cassandra, как правило, плохая идея, потому что индекс хранится локально в каждом узле, то есть не распределяется по кластеру, что может привести к сканированию большого количества узлов. Однако я не понимаю, почему они все еще являются плохой идеей, если я всегда указываю ключ разделения в своих запросах и использую только вторичный индекс в качестве окончательного фильтра. Я читал, что они не масштабируются с большими объемами данных, даже если я указываю ключ раздела. Это правда? а если это то почему?

Ответы [ 3 ]

3 голосов
/ 02 марта 2020

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

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

https://www.datastax.com/blog/2016/04/cassandra-native-secondary-index-deep-dive

Надеюсь, это поможет!

0 голосов
/ 02 марта 2020

Cassandra на кольце из пяти машин, с первичным индексом идентификаторов пользователей и вторичным индексом пользовательских электронных писем. Если бы вы запрашивали пользователя по его идентификатору или первичному индексируемому ключу, любая машина в кольце знала бы, на какой машине есть запись этого пользователя. Один запрос, одно чтение с диска . Однако для запроса пользователя по его электронной почте или по вторичному индексируемому значению каждая машина должна запросить собственную запись пользователей. Один запрос, пять операций чтения с диска . Масштабирование количества пользователей в системе или масштабирование количества машин в кольце увеличивает отношение сигнал / шум к шуму и снижает общую эффективность считывания. В некоторых случаях до момента истечения срока также. Пожалуйста, обратитесь к ссылке ниже для хорошего объяснения вторичного индекса. https://dzone.com/articles/cassandra-scale-problem

0 голосов
/ 01 марта 2020

У этих ребят есть приятная запись о влиянии вторичных индексов на производительность:

https://pantheon.io/blog/cassandra-scale-problem-secondary-indexes

Основное влияние (из поста) состоит в том, что вторичные индексы являются локальными для каждого узла, поэтому для удовлетворения запроса по индексируемому значению каждый узел должен запрашивать свои собственные записи для построения окончательного набора результатов (в отличие от запроса первичного ключа, в котором точно известно, какой узел должен запрашиваться ). Так что это влияет не только на запись, но и на производительность чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...