Поисковый запрос Cassandra выполняется довольно медленно после удаления большого пакета данных

В настоящее время у меня есть семейство столбцов cassandra с большими строками данных, например, более 100 000. Теперь я хотел бы удалить все данные в этом семействе столбцов, и возникла проблема:

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

Это вызвано функцией захоронения при удалении данных из базы данных cassandra. Скорость поиска не вернется к нормальной до тех пор, пока не будет запущен следующий сборщик мусора. См. раздел Распределенное удаление Cassandra.

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

Не могли бы вы дать мне решение этой проблемы?


person Fify    schedule 26.09.2013    source источник
comment
Возможно, лучше использовать модель временных рядов. ?   -  person deFreitas    schedule 10.08.2017


Ответы (2)


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

Я бы предложил использовать уплотнение (удаляет все надгробия, которые может обнаружить) для решения вашей проблемы, это сильно загружает ЦП, но это лучше, чем ждать ответа на запросы в течение десятков секунд. Вы можете сделать задачу менее интенсивной на своем компьютере, предоставив конкретные ks & cf, которые вы хотите сжать:

./nodetool compact <ks_name> <cf_name>

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

person Lyuben Todorov    schedule 26.09.2013
comment
Обратите внимание, что сжатие удалит надгробия только после того, как gc_grace_seconds истечет с момента вставки надгробия. - person Richard; 26.09.2013
comment
@Lyuben, я не могу очистить все семейство столбцов, потому что в нем хранится более 1000 пользователей, чьи данные хранятся, и у каждого из них более 100 000 строк данных. Каждая операция удаления выполняется с данными одного пользователя. Операция compact для семейства столбцов может быть выбрана, но сколько времени для запуска этой операции? Если она запускается каждый раз, когда один пользователь удаляет некоторые данные, она может повлиять на все другие пользователи. Что вы предлагаете по этому поводу? Спасибо еще раз! И спасибо Ричарду за напоминание о gc_grace_seconds. - person Fify; 29.09.2013

@Фифи

Если ваше семейство столбцов часто модифицируется (прочитайте, затем обновите, затем снова прочитайте обновление...), вам следует использовать стратегия многоуровневого уплотнения

Чтобы удаленные столбцы удалялись быстрее, измените свойство gc_grace_seconds вашего семейства столбцов.

person doanduyhai    schedule 26.09.2013
comment
Спасибо за ваш ответ. 1) В моем семействе столбцов чаще всего используются операции вставка, а затем чтение, иногда происходит удаление, но с очень низкой вероятностью (скажем, 1 из 100 операций). 2) gc_grace_seconds не может быть слишком коротким, поскольку в базе данных хранится несколько ТБ данных. - person Fify; 29.09.2013