2012-12-25 29 views
-4

存儲一個分數Twitter的流水與MongoDB的我期待滿足以下要求:在EC2上

  1. 商店很多很多的鳴叫(比如500萬,每天)和相關的用戶配置文件。
  2. 能夠查詢數據(讓我在時間X和時間Y之間創建的所有推文)。
  3. 隨着數據大小的增加,能夠將服務器添加到羣集。

我不熟悉MongoDB。

A.我可以通過MongoDB滿足上述條件嗎?

B.如果我要使用EC2來完成上述操作,那麼您會推薦什麼硬件規格: 例如:從2個大型實例開始,每個大型實例附有500GB的EBS。

謝謝。

謝謝。

+1

您需要構建一個測試系統並對其進行基準測試並與其他未指定的用例進行匹配。正如他們所描述的,可能有辦法讓任何現代數據庫系統支持您的需求。 – WiredPrairie

+0

我不只是評論一個更廣泛的版本?無論如何,我同意你需要在發佈之前進行更多的研究和測試。我的意思是你有這種情況,你問的是一種你不熟悉的技術。你需要多研究一下 – Sammaye

+0

@Sammaye,我考慮了你的觀點,並刪除了這個問題,並將其縮小到我認爲更易處理的地步。而且,如果有人問我同樣的問題說MySQL,我可以爲他們回答,我很樂意這樣做。我正在做更多的研究,但我認爲能夠接觸到走在我面前的人是這個網站的重點。 – user1172468

回答

3

真的,你的問題缺乏任何真正的研究你的結局,因爲它是不清楚和脫離主題一點,但我會給一些關於該主題的指針;也許他們會幫助你。

是的,MongoDB就像MySQL或MSSQL或Postgres SQL可以處理這個工作量。這個數據集對於數據庫來說並不新鮮。是的,我猜想如果您每秒存儲9,000條推文,每天存儲5億條新聞(http://yearinreview.twitter.com/en/tps.html),那麼您可能需要非常小心地查看您的技術選擇(正如Twitter在選擇走NoSQL路線時所做的那樣),但您要存儲的很多比這少得多。但即使在這種情況下,已經證明,通過正確的設置(Facebook在這裏),MySQL也可以處理類似的負載。

所以這不是一個問題:這個數據庫可以處理這個嗎?這是更多的問題:我的數據庫如何處理這個問題?

我要提到的第一件事是做更多的研究,服務器集羣如何構建在MongoDB中,我可以肯定地說,如果你需要的副本(http://docs.mongodb.org/manual/replication/)和碎片(http://docs.mongodb.org/manual/sharding/),就需要兩個以上的服務器。

如果你真的想要我的個人意見,我選擇不去購買更多資源較大的服務器,如大型實例,並決定選擇更小的服務器。它們證明更便宜,而且從長遠來看更容易管理。

現在談論數據庫如何處理這個問題。我已經介紹了分片和副本集。這兩部分對您來說非常重要,可以使您的數據庫順利擴展到羣集中,並保持數據的一致性和可用性,但這只是其中一部分。你還必須有正確的工作組和正確的索引和正確的模式(在那裏有很多權利,而不是英國的錯誤 - 故意的)。

我可以想像,你將有兩個集合了這一點,user收集和tweet收集與_id也許索引用戶和user_idtweet。您可能會將這些文件轉換爲分片鍵,並將tweet集合拆分爲user_id,這樣您只需查詢一臺計算機即可快速將用戶推文排列在多臺計算機上,而無需進行全局分散和收集操作。然而,考慮到你可能也必須做時間操作(在x和y之間得到推文日期),你可能想要查看一些基於時間的分片索引,我不確定;這是爲了您的測試。

這應該讓你開始思考和研究你的用例的MongoDB。

希望它有幫助,