我正在使用mongo-db進行實時分析,我每天獲得500萬個 數據點,未來將增加至1000萬個,至少爲 。mongodb作爲循環法數據庫
我的問題是:
封頂集合是圓形的,所以我的數據將被覆蓋 後達到的上限,我不想失去這個數據。
那麼我應該遵循什麼方法來保留舊數據,並避免這些數據被覆蓋,但仍然能夠使用上限,因爲它們很快?
我是一個算法的思想,如:
- 當前集合重命名爲舊的和下降的電流。
- 老追加到搜索友好(不封頂)收集
我正在使用mongo-db進行實時分析,我每天獲得500萬個 數據點,未來將增加至1000萬個,至少爲 。mongodb作爲循環法數據庫
我的問題是:
封頂集合是圓形的,所以我的數據將被覆蓋 後達到的上限,我不想失去這個數據。
那麼我應該遵循什麼方法來保留舊數據,並避免這些數據被覆蓋,但仍然能夠使用上限,因爲它們很快?
我是一個算法的思想,如:
我覺得自己可能要對這個錯誤的方式。爲什麼不爲每個時間段創建一個新的集合,而不是試圖「篡改」封頂集合?
因此,如果您每天可以處理5-10M數據點,那麼只需將名稱作爲名稱的一部分創建一個集合即可。 11月1日你會得到類似db.data20101001
的東西,然後在11月2日得到db.data20101002
。
隨着您停止寫入舊數據,數據將「掉出」內存並停止使用RAM。同樣的衡量標準,當日(也可能是前一天)的指數可能會一直存在於RAM中,因此插入將繼續保持快速,同時保持歷史記錄。
這個解決方案需要額外的步驟:
db.data20100901.drop()
。您不會回收空間,但Mongo將開始使用「舊」數據文件。因此,您通過選擇活動天數來有效地管理您的收藏大小。
嗨,我不想劈頭蓋帽的集合。我只想將一個集合用作我的「網絡傳感器」的RRD,另一個集合將用於執行搜索,生成統計信息等。我更新了我的算法。它有意義還是你仍然有相同的想法? :-) – 2010-11-01 16:52:37
好的,所以封頂收藏的問題之一是你無法知道會發生什麼「脫落」。因此,「不丟失數據」的要求沒有任何意義。你不能使用加蓋的集合*和*不會丟失數據。你說「封頂集合速度很快」,但它們不會比同樣大小的常規集合更快。所以你在這裏有兩個選擇:1.我上面的方式。 2.將數據寫入兩個集合:封頂和歸檔。重命名和刪除將不起作用,您將破壞您的數據。 – 2010-11-02 22:25:45
我正在測試,我正在使用C和mongo,而我剛剛在星期五結束。封頂速度比正常收集速度快。我確實在這裏添加了我的測試代碼https://github.com/vpereira/pcapreader,如果您創建集合爲封頂,然後正常,您會看到。加快了20%。 – 2010-11-11 11:54:57
這個人回答了嗎?是否需要更多數據? – 2010-11-09 22:14:18
新的自動過期TTL集合可以幫助這種用例嗎? http://docs.mongodb.org/manual/tutorial/expire-data/ http://blog.mongodb.org/post/25933713094 – RubyTuesdayDONO 2012-09-25 21:52:09