LINUX.ORG.RU

Ищу реализацию key-value хранилища с автоудалением данных по истечение срока

 ,


0

1

В гугле забанили — не могу придумать нужный запрос. Собственно, требуется простая вещь: хранилище key-value, аналогичное memcached, но с возможностью хранения данных на диске, а не в ОЗУ. С каждым key должен быть сопоставлен срок хранения, по истечению которого он удаляется. Если размер кэша на диске превышает заданный лимит, старые данные удаляются.

Понятно, что такое можно быстро наваять на основе СУБД, но вот как раз использования СУБД и нужно избежать: одно из предъявляемых требований — легковесность.

Есть что готовое, или придётся вручную?

★★

Последнее исправление: geekless (всего исправлений: 1)

Berkeley DB - подходит почти идеально, по крайней мере легковестность гарантирована.

Правда удаление устаревших данных придется руками делать, но это не сложно.

Ushenin
()
Ответ на: комментарий от visual

что тебе мешает использовать файловую систему, с простейшим башскриптом?

Гы. Помню, у меня на каком-то несчастном миллионе записей чистилка кеша не успевала его зачищать при круглосуточной работе :)

...

По топик-старту на своём опыте рекомендую redis. Работает очень быстро, гибко и надёжно.

KRoN73 ★★★★★
()
Ответ на: комментарий от baverman

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

Вот с интерфейсом могут быть сложности но тоже решаемые.

Ushenin
()
Ответ на: комментарий от Ushenin

или это уже не так?

Т-с-с. То, что он ориентирован на работу исключительно в памяти знает только 1% его фанбоев.

baverman ★★★
()
Ответ на: комментарий от Ushenin

а redis насколько я знаю как раз заточен на хранение данных в памяти, или это уже не так?

Он может при шатдауне (принудительно, по расписанию и т.п.) сохранять данные на диск. И, соответственно, грузить их при старте.

KRoN73 ★★★★★
()

Если нет особых требований к скорости записи, я бы взял sqlite.

baverman ★★★
()
Ответ на: комментарий от KRoN73

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

Ushenin
()
Ответ на: комментарий от Ushenin

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

Скорее важна их сохранность.

baverman ★★★
()
Ответ на: комментарий от Ushenin

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

Ну, memcached, как раз, не позволяет хранить данные на диске. А это в топикстарте оговорено. Так что он отпадает уже по этой причине.

...

А если нужно именно персистентное хранение key-value на диске, то mysql вполне хорош для этого. Особенно с шардингом.

KRoN73 ★★★★★
()

Если требование автоудаления не жестко по времени, то эта задача эквивалента сборке мусора. Можно прикрутить практически к любому стореджу периодический запуск чистки. Операция типа VACUUM но попроще...

Если хочется nosql, то посмотри в сторону erlang-подобных систем. Сейчас наиболее активно развиваются: riak, couchbase, немного couchdb У этих систем возможно имеются опции, что тебе нужно, хотя не без глюков. Ну а с java-based системами еще хуже ситуация...

Есть еще redis, mongoDB (было много нареканий от разработчиков)

Ключевые слова для поиска: TTL, key value storage with expiration time, key value with expiration time nosql

swwwfactory ★★
()

«Из коробки» такое есть в Redis и в Cassandra.

Redis хранит данные в памяти (на диске только снапшоты или журнал для durability). Устаревание есть и по времени, и по размеру.

Cassandra — толстая java с сложным клиентом. Хранит данные на диске, памятью не ограничена. Устаревание только по времени.

maxcom ★★★★★
()
Ответ на: комментарий от botan

MemcacheDb напрашивается.

Выглядит хорошо, но смущает трехлетнее отсутствие активности разработчиков.

geekless ★★
() автор топика

MemBase скорее всего подойдет

dizza ★★★★★
()

couchbase server

Для legacy клиентов поддерживается ascii memcached протокол. Основной — расширенный binary memcached протокол. Expiration time поддерживается.

anonymous
()
Ответ на: комментарий от Suntechnic

Ага - теперь вижу что предлагали... Чего за привычка отвечать, потом читать тему?

В общем бери Redis и не парься. Очень удобная тема. А для хранения сессий вообще супер.

Suntechnic ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.