Cassandra CLUSTERING ORDER с обновлениями [производительность] - PullRequest
1 голос
/ 02 июля 2019

С помощью Cassandra можно указать порядок кластеров для таблицы с определенным столбцом.

CREATE TABLE myTable (
    user_id INT,
    message TEXT,
    modified DATE,
    PRIMARY KEY ((user_id), modified)
)
WITH CLUSTERING ORDER BY (modified DESC);

Примечание. В этом примере для каждого идентификатора пользователя (предназначенного) есть одно сообщение

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

Однако, если один, где вносить обновления в «измененный» столбец, добавляет дополнительную нагрузку на сервер«переупорядочить», и значительны ли эти накладные расходы по сравнению с производительностью запроса?

Другими словами, учитывая эту таблицу, будет ли она работать лучше, если «CLUSTERING ORDER BY (Modified DESC)» будет удален?

ОБНОВЛЕНИЕ: обновлен недействительный CQL, добавив измененный первичный ключ, однако исходные вопросы остаются.

Ответы [ 3 ]

1 голос
/ 02 июля 2019

Чтобы модифицировать столбец кластеризации, его необходимо определить в первичном ключе.

CREATE TABLE myTable (
    user_id INT,
    message TEXT,
    modified DATE,
    PRIMARY KEY ((user_id), modified)
)
WITH CLUSTERING ORDER BY (modified DESC);

Таким образом, ваши данные будут отсортированы в основном по хешированному значению user_id, и в пределахкаждый user_id изменен.Вам не нужно отбрасывать «С КЛАСТЕРНЫМ ЗАКАЗОМ (модифицированный DESC)»

0 голосов
/ 04 июля 2019

в вашей модели данных user_id - это ключ rowkey / shardkey / ключ раздела (идентификатор пользователя), который важен для локальности данных, а столбец кластеризации (измененный) указывает порядок расположения данных внутри раздела. комбинация этих двух ключей делает первичный ключ.

Даже в мире RDBS обновление PK невозможно обеспечить ради целостности данных.

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

refence: https://www.datastax.com/dev/blog/we-shall-have-order

0 голосов
/ 03 июля 2019

Перемещение комментария как ответа, как ответа на обновленный вопрос:

, если он добавляет место для обновления столбца «изменение» дополнительные издержки на сервере, чтобы «переупорядочить» и это накладные расходы против Значительная производительность запроса?

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

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

Удаление или создание порядка кластеризации должны быть определены в основе запроса о том, как информация будет извлечена. Если вы собираетесь использовать только самые последние записи этого user_id, имеет смысл иметь порядок кластеризации, как вы определили это.

...