Храните только новые N строк в Кассандре - PullRequest
0 голосов
/ 24 июня 2019

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

Я, по сути, использую таблицу Кассандры в качестве буфера. Это по замыслу.

Есть ли способ установить в Cassandra ограничение на количество строк в таблице и автоматически отбрасывать старые строки с минимальным влиянием на производительность при добавлении новых строк?

Моя кодовая база написана на Python, поэтому я бы предпочел решение на Python.

Ответы [ 3 ]

2 голосов
/ 24 июня 2019

Нет, такого метода нет.

Традиционный подход в Cassandra заключается в удалении старой информации не по количеству, а по дате: когда вы вставляете строку (или даже изменяете одну ячейку), вы можете установить время истечения ( aka TTL ) по этим данным. Например, вы пишете строку, срок действия которой истекает в один день. Затем Cassandra позаботится об автоматическом и эффективном удалении просроченных данных с диска (фактически удаление данных происходит во время сжатия).

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

1 голос
/ 25 июня 2019

Использование Cassandra в качестве буфера или очереди сообщений является анти-паттерном (официальная документация здесь ). Если у вас будет много удалений, вы можете получить записи о надгробных плитах, а производительность системы будет затронута при сборке мусора надгробных камней.

Кроме того, надгробия еще некоторое время будут занимать пространство.

Я предлагаю использовать Kafka, MySQL или RDS, как объяснено здесь

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

0 голосов
/ 25 июня 2019

Использование можно использовать TTL . Это автоматически удалит строки как время, указанное в TTL

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