2016-10-23 2 views
2

У нас есть массивный набор данных, который написан в миллионы строк в cassandra. У нас также есть планировщик, который должен обрабатывать эти записи и удалять их после их успешной обработки.Производительность - TTL vs Удаление строки в Cassandra

Было интересно, удаляет ли строка после обработки и маркирует строку TTL (по существу, задерживает ее удаление).

Есть ли какие-либо плюсы и минусы с Deletion vs TTL w.r.t Cassandra performance?.

Спасибо большое _DD

+0

Ну, мое мнение основано только на наблюдении за нашей системой, но мне кажется, что TTL должен быть лучше для работы. Мы много используем TTL, и проблем с производительностью нет. Однако иногда мы выполняем задания ручной очистки, и это вызывает большую нагрузку на нашу систему. – Michal

ответ

0

Из того, что мало информации вы дали здесь это звучит для меня, что вы используете Кассандру в очереди, которая хорошо известна антишаблоном. Вы можете прочитать больше о том, что здесь:

http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

Однако, чтобы ответить на ваш основной вопрос есть небольшая разница в производительности между использованием TTL и удалений. TTL в C * обрабатываются как надгробные камни, которые являются такими же, как и удаление. Основное различие заключается в том, что надгробная плита не записывается в запись, у которой TTL истек, пока эта запись не будет прочитана снова. Когда удаление называется надгробием, немедленно создается. Могилы в целом вызывают значительные проблемы с производительностью в C *, и хотя существуют некоторые способы смягчения проблем, которые они создают с большим количеством из них, обычно указывают на плохую модель данных или плохой вариант использования для C *. Если вы действительно смотрите на использование C * в качестве очереди, почему бы не взглянуть на использование чего-то более подходящего для этой цели, такого как Redis?

+0

Спасибо за примечание bechbd - да, я знаю об этом анти-шаблоне. К сожалению, мы не хотим полагаться на другой источник данных - из-за ограничений ресурсов. Вернемся к вашей точке: «Основное различие заключается в том, что надгробный камень не записывается в запись, у которой TTL истек, пока эта запись не будет прочитана снова» - означает ли это, если мы не посетим эту запись - это останется в db? , Пожалуйста, уточните –

+0

Нет, он все равно будет удален как часть процесса уплотнения. Что я имел в виду, так это то, что дополнительная запись надгробного памятника не будет записана, если не будет прочитана запись TTL'd. – bechbd

0

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

http://docs.datastax.com/en/cql/3.1/cql/cql_using/use_expire_c.html

1

При использовании TTL запись не сразу удаляется из хранилища, она помечена как надгробная плита. Он физически удаляется только тогда, когда происходит уплотнение. До этого времени данные воздействуют на обработку узлов, поскольку они потребляют ресурсы до тех пор, пока не произойдет уплотнение. Когда вы выполняете событие запроса диапазона, удаленные (помеченные как надгробные) записи проверяются Cassandra. Таким образом, использование TTL для удаления слишком большого количества записей считается анти-шаблоном. Рекомендация заключается в использовании временных таблиц, чтобы отдельные строки не удалялись. Просто отбросьте всю таблицу.

Смежные вопросы