Можно ли использовать Кассандру в качестве кэша LRU


Я хотел бы сохранить пару ключ-значение в Cassandra и автоматически удалить запись в режиме LRU, когда будет достигнут фиксированный размер хранилища.

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

2 4

2 ответа:

Короткий ответ: Нет, Кассандра не поддерживает LRU из коробки.

Вы могли бы, если бы действительно захотели, создать слой LRU в своем приложении на Cassandra для достижения того же эффекта. Это можно сделать несколькими способами, но, как правило, вы хотите сохранить отдельный индекс объектов кэша вместе со статистикой/метками времени и заставить ваше приложение очистить объекты соответствующим образом. Даже тогда дисковое пространство не было бы хорошим верхним пределом из-за природы того, как Кассандра хранит свои данные и управляет обновлениями, удалениями и т. д. Кассандра не освобождает хранилище сразу на удалении, скорее она устанавливает надгробие и старые данные удаляются позже (об удалении).

Одним из преимуществ построения пользовательского слоя кэширования (например, в Cassandra) было бы то, что вы могли бы выйти за рамки простого удаления LRU и гарантировать, что более дорогие объекты и / или объекты, которые используются чаще (но не в последнее время), будут весить тяжелее, чтобы они оставались в кэше дольше, даже если они могут быть очищенным ЛРУ. Будет ли это полезно или нет, полностью зависит от вашего конкретного случая использования. Но опять же, Кассандра может раздуться из-за большого оттока данных, и нужно будет убедиться, что кластер правильно настроен и получает регулярное обслуживание.

На самом деле большинство развернуло бы Memcache (или аналогичный) для поддержки этого варианта использования.

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

Новые данные всегда добавляются. Удаленные данные помечаются только как удаленные и физически удаляются во время сжатия. Возможно, вам придется настроить уплотнение.

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

Более легкий подход-Redis.