Почему у Кассандры нет вторичного индекса? - PullRequest
1 голос
/ 22 мая 2019

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

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

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

Ранее я писал ответ, в котором обсуждались основные детали запросов вторичного индекса:

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

Хотя это и должно помочь вам понять, что происходит, этот ответ написан из контекста первого запроса по ключу раздела. Это важное различие, поскольку использование вторичного индекса в пределах раздела должно работать хорошо.

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

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

Рекомендация для моделирования Cassandra заключается в дублировании ваших данных в новые таблицы для поддержки желаемого запроса. Это добавляет некоторые другие сложности с синхронизацией данных. Но (если все сделано правильно) это гарантирует, что ваши запросы действительно могут обслуживаться одним узлом. Это компромисс, который вы должны сделать при построении вашей модели. Вы можете иметь удобство или производительность, но не оба.

0 голосов
/ 22 мая 2019

Так что да, у Кассандры есть вторичные индексы, и объяснение Аарона прекрасно объясняет почему.

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

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

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