Кассандра Обновление заявления - PullRequest
0 голосов
/ 29 августа 2018

Как я могу выполнить запрос UPDATE CQL на Cassandra, как этот:

UPDATE table_name SET COUNT = COUNT + 1 WHERE ID = ?

как можно быстрее, если, например, я отправлю 100-300 записей, где будут обновляться 0 - 10. Всего записей может быть

SELECT count(*), min("count"), max("count") FROM table_name;
-- result 300000 | 1 | 120

Я проверял BatchStatement.Type.UNLOGGED против executeAsync. Как правило, партия выигрывает по производительности в 2 раза, но использовать ее не рекомендуется, см. CASSANDRA-9283 . Я знаю, что Кассандра используется для операторов вставки, но, возможно, существуют некоторые хорошие шаблоны для моего случая?

1 Ответ

0 голосов
/ 29 августа 2018

Обновления счетчика требуют раундов Паксос и чтения перед записью. Это самая медленная операция на Кассандре. Вместо этого вы можете захотеть сделать что-то вроде счетчика событий. Имейте ((count_key, yymmdd) id), и вы вставляете новый timeuuid для каждой записи. Сохраняйте текущий счет в памяти и увеличивайте его где-нибудь (возможно, даже используя redis). Затем в конце каждого дня напишите сумму за этот день в Кассандре. В случае сбоя или чего-либо еще вы можете выполнить итерацию счета событий и восстановить счет в памяти.

...