具有内置数据保留功能的数据库(可能是noSQL)

时间:2012-08-06 08:58:55

标签: database nosql storage archive

哪些开源数据库具有自动“老化”数据的功能,以便您可以指定必须存储一段数据的时间?

即。在一段数据上设定日期或时间,之后,数据库可以自由删除它的每一条痕迹。

更新: 我更希望找到一个几天到几年的老化时间,超过几分钟或几秒钟。所以缓存机制并不是我想要的。

4 个答案:

答案 0 :(得分:8)

MongoDB在新版本2.2中有一些内容可能很有用 - TTL Collections

集合通过特殊索引到期,该索引与后台mongod进程一起跟踪插入时间,后台mongod进程定期从集合中删除过期文档。您可以使用此功能使副本集和分片群集中的数据到期。

从mongo shell创建TTL集合非常容易 -

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

  • 下载2.2rc0 here(发布候选版,还没有完全准备好生产......在生产构建之前还会有一个候选版本)

  • 更改日志here

  • 可以找到2.2发行说明here

我不能代表其他解决方案。

答案 1 :(得分:6)

我认为大多数noSql数据库都支持此功能,但是例如,cassandra具有该功能:

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

Cassandra可以从这里下载:

http://cassandra.apache.org/

但是如果你只使用这样的db 到期时间,考虑使用缓存,因为它完全适合你想要做的事情,特别是如果你的生活时间对象很短。毕竟,缓存的目的是“作为您要临时存储的对象的容器”。大多数传统缓存都是Key - Value缓存/数据存储区,与大多数NoSql数据库非常相似。

虽然像cassandra这样的nosql数据库通常检索数据的速度非常快,但是如果与传统缓存相比,如果不断添加和删除数据,那么大多数数据库都会表现不佳,并且会增加额外的文件系统和/或网络开销。如果您发现您所需要的实际上是缓存,我可以推荐一些。

http://ehcache.org/

  

是一个非常简单的api的非分布式缓存

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

  

是分布式内存缓存/ K,V存储

但是,对于缓存,您可以存储的数量受到限制,因为默认情况下它们位于内存中。他们中的大多数都可以选择在文件系统上存储数据,但如果涉及到这一点,我会使用noSQL数据库。

答案 2 :(得分:2)

这取决于您需要存储的数据类型。简单的键值存储是否足够,或者您需要文档数据库。

这是缓存的常见用法。您可以尝试EHCache,Hazelcast,Memcached等。但是,theese主要是键值商店。有几种删除数据的政策 - 最老的,最少使用的等等.Theese是内存商店。如果您需要具有此功能的持久性K / V商店,请尝试使用Redis。

如果您正在收集基于时间的数据,例如使用统计数据,您可能会使用RRD类型数据库来汇总旧数据而不是删除它(生成日,周,月总和)

如果您需要更像文档数据库,MongoDB似乎支持简单的文档过期(http://docs.mongodb.org/manual/tutorial/expire-data/)。 CouchDB似乎不支持这一点,但是,您可能会运行计时器任务来删除旧数据。

答案 3 :(得分:2)

Couchbase使用memcached二进制协议提供TTL删除以设置生存时间。所以你可以存储一个数据项,时间戳应该删除后(可以在将来任意远)。到那时,Couchbase将删除数据项。

以下是如何从Ruby设置TTL的示例。如果您愿意,可以使用其他语言的示例:http://www.couchbase.com/docs/couchbase-sdk-ruby-1.0/couchbase-sdk-ruby-getting-started-hello.html