2010-11-01 59 views
1

我正在使用mongo-db進行實時分析,我每天獲得500萬個 數據點,未來將增加至1000萬個,至少爲 。mongodb作爲循環法數據庫

我的問題是:

封頂集合是圓形的,所以我的數據將被覆蓋 後達到的上限,我不想失去這個數據。

那麼我應該遵循什麼方法來保留舊數據,並避免這些數據被覆蓋,但仍然能夠使用上限,因爲它們很快?

我是一個算法的思想,如:

  • 當前集合重命名爲舊的和下降的電流。
  • 老追加到搜索友好(不封頂)收集
+0

這個人回答了嗎?是否需要更多數據? – 2010-11-09 22:14:18

+0

新的自動過期TTL集合可以幫助這種用例嗎? http://docs.mongodb.org/manual/tutorial/expire-data/ http://blog.mongodb.org/post/25933713094 – RubyTuesdayDONO 2012-09-25 21:52:09

回答

5

我覺得自己可能要對這個錯誤的方式。爲什麼不爲每個時間段創建一個新的集合,而不是試圖「篡改」封頂集合?

因此,如果您每天可以處理5-10M數據點,那麼只需將名稱作爲名稱的一部分創建一個集合即可。 11月1日你會得到類似db.data20101001的東西,然後在11月2日得到db.data20101002

隨着您停止寫入舊數據,數據將「掉出」內存並停止使用RAM。同樣的衡量標準,當日(也可能是前一天)的指數可能會一直存在於RAM中,因此插入將繼續保持快速,同時保持歷史記錄。

這個解決方案需要額外的步驟:

  • 你必須寫一些邏輯在代碼中插入正確的日期(請注意,新的集合創建自己,所以這是非常簡單)
  • 您需要設置一個用於刪除舊數據的例程,通常是N天后的數據,並執行此操作:db.data20100901.drop()。您不會回收空間,但Mongo將開始使用「舊」數據文件。

因此,您通過選擇活動天數來有效地管理您的收藏大小。

+0

嗨,我不想劈頭蓋帽的集合。我只想將一個集合用作我的「網絡傳感器」的RRD,另一個集合將用於執行搜索,生成統計信息等。我更新了我的算法。它有意義還是你仍然有相同的想法? :-) – 2010-11-01 16:52:37

+0

好的,所以封頂收藏的問題之一是你無法知道會發生什麼「脫落」。因此,「不丟失數據」的要求沒有任何意義。你不能使用加蓋的集合*和*不會丟失數據。你說「封頂集合速度很快」,但它們不會比同樣大小的常規集合更快。所以你在這裏有兩個選擇:1.我上面的方式。 2.將數據寫入兩個集合:封頂和歸檔。重命名和刪除將不起作用,您將破壞您的數據。 – 2010-11-02 22:25:45

+0

我正在測試,我正在使用C和mongo,而我剛剛在星期五結束。封頂速度比正常收集速度快。我確實在這裏添加了我的測試代碼https://github.com/vpereira/pcapreader,如果您創建集合爲封頂,然後正常,您會看到。加快了20%。 – 2010-11-11 11:54:57