2011-07-26 31 views
5

我們有很多數據,決定使用mongodb,它工作得很好。使用redis和mongodb有意義嗎?

我們開始使用redis來跟蹤我們的實時應用中的活躍用戶。我們也開始用redis做一些pub/sub頻道的東西。

我們的下一步可能是將mongodb用於休眠數據,對於活動數據使用redis。例如,我們所有的用戶都存儲在mongodb中,但是當他們登錄時,我們會將這些數據的副本移到redis以便快速訪問。我們還將諸如遊戲活動之類的內容存儲在redis中,並相應地使用這些數據。當用戶註銷時,我們將保存mongo中需要的任何地方,直到它再次需要並加載到redis中。

我們一直在研究的一件事是在崩潰時保存redis。系統上的用戶活動是有意義的數據,我們不希望在崩潰時丟失數據,並且如果我們只是在事後記錄數據,我們是否應該在每次事件之後將備份重要數據保存在mongo中?然後在崩潰redis可以從mongo恢復?

是否有更好的方式去實現我們試圖實現的目標?

謝謝!

+0

不是MongoDb的緩存系統在他們的數據存儲的高讀/寫?你爲什麼需要redis? –

+0

這是我們希望弄清楚的一些東西,並深入瞭解一些信息。我們對數據存儲都很陌生,希望得到一些答案,解釋我們應該採取哪些不同的行爲和原因。 – fancy

回答

6

好的,所以有幾個角度可以攻擊這個問題。首先要指出的是redis確實有user-configurable persistence。在系統上

中的用戶活動,我們不希望失去對崩潰有意義的數據,如果我們只是在事後記錄數據,我們應該在蒙戈保存一個備份的重要數據在每個事件後?

公平地說,MongoDB的默認設置是每60秒刷新一次磁盤。所以你仍然有60秒的數據丟失窗口。

  1. 您可以使用journaling並將該窗口放置到100ms,但這會使IO更重。
  2. 您還可以配置您的編寫者在該日誌上等待刷新(WriteConcern:fsync),但這會顯着減慢寫入速度。

是否有更好的方法去實現我們試圖實現的目標?

真的取決於你想達到的目標。

  • 您可以處理什麼類型的數據丟失?
  • Redis has replication,你用的是?這是否解決了大部分數據丟失問題?
  • 你說你使用PubSub功能,這個覆蓋了多少個節點?正因爲如此,您的數據是否被充分複製?

無論哪種方式,這是一個有點複雜的問題。 MongoDB可能會解決您的問題,但複製也可以解決這些問題。取決於你的舒適程度。