База данных (вероятно, без SQL) со встроенными функциями хранения данных

Какие базы данных с открытым исходным кодом имеют функции автоматического «старения» данных, чтобы вы могли указать, как долго должен храниться фрагмент данных?

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

Обновление: я больше ищу возраст от дней до лет, а не минут или секунд. Так что механизм кэширования - это не совсем то, что мне нужно.


person Prof. Falken    schedule 06.08.2012    source источник
comment
Достаточно ли для ваших нужд автоматического пакетного задания в нерабочее время для удаления устаревших данных?   -  person beny23    schedule 06.08.2012
comment
@ beny23, да, действительно. Просто это настолько фундаментальная проблема, ожидающая своего решения, что я думал, что некоторые базы данных уже могут поддерживать это.   -  person Prof. Falken    schedule 06.08.2012


Ответы (4)


В новой версии 2.2 MongoDB есть кое-что, что может быть интересно: TTL Collections.

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

Создать коллекцию TTL из оболочки mongo довольно просто:

db.mycollection.ensureIndex( { "status": 1 }, { expireAfterSeconds: 3600 } )

  • Загрузите 2.2rc0 здесь (релиз-кандидат, не совсем готовый к работе... перед этим будет еще один релиз-кандидат производственная сборка)

  • Журнал изменений здесь

  • Примечания к выпуску 2.2 можно найти здесь.

Я не могу говорить за другие решения.

person Mark Hillick    schedule 06.08.2012

Я думаю, что большинство баз данных noSql поддерживают эту функцию, но, например, у cassandra есть такая функция:

http://www.datastax.com/docs/1.0/ddl/column_family.

Кассандру можно скачать отсюда:

http://cassandra.apache.org/

Однако, если вы используете такую ​​базу данных исключительно на время истечения срока действия, рассмотрите возможность использования кеша, потому что он точно соответствует тому, что вы пытаетесь сделать, особенно если ваше время жизни объектов короткое. . В конце концов, назначение кеша — «контейнер для объектов, которые вы хотите временно хранить». Большинство традиционных кэшей представляют собой кэши/хранилища данных типа "ключ-значение", как и большинство баз данных NoSql.

Хотя базы данных nosql, такие как cassandra, как правило, очень быстро извлекают данные, вы обнаружите, что большинство из них работают хуже, если вы постоянно добавляете и удаляете данные по сравнению с традиционными кэшами, а также добавляете дополнительную файловую систему и/или накладные расходы сети. Если вы обнаружите, что на самом деле вам нужен кеш, я могу порекомендовать несколько.

http://ehcache.org/

Это нераспределенный кеш с очень простым API

http://www.jboss.org/infinispan/

это распределенный кэш в памяти / хранилище K, V

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

person Nikola Yovchev    schedule 06.08.2012
comment
Спасибо. Обновленный вопрос о кеше. +1 однако. - person Prof. Falken; 06.08.2012

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

Это обычное использование кеша. Вы можете попробовать EHCache, Hazelcast, Memcached и т. д. Но в основном это хранилища ключей и значений. Существует несколько политик удаления данных — самая старая, наименее используемая и т. д. Это скорее хранилища в памяти. Если вам нужно постоянное хранилище K/V с этой функцией, попробуйте Redis.

Если вы собираете данные на основе времени, например, статистику использования, вы можете использовать базу данных типа RRD, которая агрегирует старые данные вместо их удаления (составляет суммы за день, неделю, месяц).

Если вам нужно больше похоже на базу данных документов, кажется, что MongoDB поддерживает простое истечение срока действия документа (http://docs.mongodb.org/manual/tutorial/expire-data/). CouchDB, похоже, не поддерживает это, однако вы можете запустить задачу таймера для удаления старых данных.

person Piotr Gwiazda    schedule 06.08.2012
comment
+1, охватывающий все основы, так как я не был достаточно конкретным. Кажется, я ищу Mongodb ›= 2.2 или Redis или что-то подобное. - person Prof. Falken; 06.08.2012
comment
Отлично, обратите внимание, что Mongodb не похож на Redis :-) - person Piotr Gwiazda; 06.08.2012

Couchbase предлагает удаление TTL с использованием двоичного протокола memcached, чтобы установить время жизни. Таким образом, вы можете сохранить элемент данных с отметкой времени, после которого он должен быть удален (может быть сколь угодно далеко в будущем). Когда это время придет, Couchbase удалит элемент данных.

Вот пример того, как установить TTL из Ruby. Если хотите, есть примеры на других языках: http://www.couchbase.com/docs/couchbase-sdk-ruby-1.0/couchbase-sdk-ruby-getting-started-hello.html

person J Chris A    schedule 07.08.2012