2012-08-06 60 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