5

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

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

更新:我更多的是寻找几天到几年的老化时间,而不是几分钟或几秒钟。所以缓存机制并不是我想要的。

4

4 回答 4

8

MongoDB 在新版本 2.2 中有一些东西,可能会引起人们的兴趣 - TTL Collections

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

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

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

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

  • 此处更改日志

  • 2.2 发行说明可以在这里找到。

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

于 2012-08-06T11:47:34.647 回答
6

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

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

Cassandra 可以从这里下载:

http://cassandra.apache.org/

但是,如果您仅在到期时间使用这样的数据库,请考虑使用缓存,因为它完全符合您正在尝试做的事情,特别是如果您的对象生存时间很短。毕竟,缓存的目的是“作为要临时存储的对象的容器”。大多数传统的缓存是键值缓存/数据存储,很像大多数 NoSql 数据库。

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

http://ehcache.org/

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

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

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

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

于 2012-08-06T11:40:10.637 回答
2

Couchbase 使用 memcached 二进制协议提供 TTL 删除来设置生存时间。因此,您可以存储一个数据项,并带有一个时间戳,它应该在之后被删除(可以在未来任意远)。届时,Couchbase 将删除数据项。

这是一个如何从 Ruby 设置 TTL 的示例。如果您愿意,还有其他语言的示例:http: //www.couchbase.com/docs/couchbase-sdk-ruby-1.0/couchbase-sdk-ruby-getting-started-hello.html

于 2012-08-07T21:11:52.177 回答
2

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

这是缓存的常见用法。您可以尝试 EHCache、Hazelcast、Memcached 等。但这些主要是键值存储。有几种删除数据的策略——最旧的、最少使用的等。这些都是内存中的存储。如果您需要具有此功能的持久 K/V 存储,请尝试 Redis。

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

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

于 2012-08-06T11:41:18.047 回答