Почему вторичный индекс (=?) И столбцы кластеризации (упорядочены по) НЕ МОГУТ использоваться вместе для запроса CQL? - PullRequest
0 голосов
/ 10 октября 2018

РЕДАКТИРОВАТЬ: связанный jira тикет

Запрос в шаблоне select * from <table> where <partition_keys> = ? and <secondary_index_column> = ? order by <first_clustering_column> desc не работает с ошибкой msg:

InvalidRequest: Error from server: code=2200 [Invalid query] message="ORDER BY with 2ndary indexes is not supported."

Из структура индексной таблицы, приведенный выше запрос включает ключ раздела и первые два столбца кластера в индексной таблице.Кроме того, обратите внимание, что без предложения по условию результат сортируется по столбцу кластеризации как КЛАСТЕРНЫЙ ЗАКАЗ.

Есть ли способ заставить запрос работать?Если нет, то почему?

1 Ответ

0 голосов
/ 10 октября 2018

Данные в Cassandra хранятся естественным образом в соответствии с порядком сортировки столбцов кластеризации.

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

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

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

...