2012-08-06 61 views
4

什么开源数据库具有自动“超时”数据功能,以便您可以指定必须存储多少数据的时间?具有内置数据保留功能的数据库(可能为noSQL)

I.e.在一段数据上设置日期或时间,在此之后,数据库可以自由删除它的所有痕迹。

更新: 我更期待从几天到几年,超过几分钟或几秒钟的年龄。所以缓存机制并不完全符合我的要求。

+0

是否可以自动结束小时批处理作业以删除过期数据是否足以满足您的需求? – beny23 2012-08-06 11:37:03

+0

@ beny23,的确如此。只是这是一个等待解决的基本问题,我认为一些数据库可能已经支持这个。 – 2012-08-06 13:31:15

回答

7

MongoDB在新版本2.2中有一些内容,可能会对此感兴趣 - TTL Collections

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

这是很容易创建从蒙戈壳TTL集合 -

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

  • 下载2.2rc0 here(候选发布版,没有完全投入生产......会有一个更释放生产构建之前候选人)

  • 更改日志here

  • 2.2发行说明可以找到here

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

+0

哇谢谢,这看起来很不错。 – 2012-08-06 13:37:18

+0

不用担心,很高兴它有帮助。 – 2012-08-06 14:44:17

+0

我已经尝试了MongoDB,我不喜欢它。 – 2013-09-08 09:56:39

5

我想大多数的NoSQL数据库的支持此功能,但例如,卡桑德拉有一个特点:

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

卡桑德拉可以从这里下载:但是如果使用这样的分贝仅用于到期时间,可以考虑使用缓存,因为事实上它正是适合你

http://cassandra.apache.org/

正在努力去做,特别是如果你的时间生活的对象是短暂的。毕竟,缓存的目的是'作为你想存储临时对象的容器'。大多数传统缓存都是键 - 值缓存/数据存储,与大多数NoSql数据库非常相似。

虽然像卡桑德拉NoSQL数据库一般都非常快,检索数据,你会发现,他们大多表现不佳,如果你不断地添加并且相比于传统的缓存删除数据,并添加额外的文件系统和/或网络开销。如果你发现你需要的实际上是一个缓存,那么我可以推荐几个。

http://ehcache.org/

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

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

是一个分布式内存缓存/ K,V店内

With c但是,由于缺省情况下他们在内存中,所以你的存储空间有限。他们中的大多数人都可以选择在文件系统上存储数据,但如果涉及到这一点,我会使用noSQL db。

+0

谢谢。更新的问题重新:缓存的东西。 +1虽然。 – 2012-08-06 13:37:47

2

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

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

I'f你收集了例如使用状态,你可以使用它汇集而不是去掉旧的数据RRD型数据库基于时间的数据(使得天,周,月和)

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

+0

+1,涵盖了所有的基础,因为我不够具体。似乎我正在寻找Mongodb> = 2.2或Redis,或类似的。 – 2012-08-06 13:39:23

+0

太棒了,请注意,Mongodb与Redis不相似:-) – 2012-08-06 14:03:44

+0

好的,点了点。 :) – 2012-08-06 14:07:06