2010-09-26 36 views
2

Howdie stackoverflow人!MongoDB的實時Ajax的東西?

所以我一直在做一些關於這些NoSQL數據庫,MongoDB,CouchDB等的挖掘。雖然我仍然不確定實時的東西,所以我想我會問問周圍,看看有沒有實際的經驗。

讓我們考慮網絡的東西,比方說,我們有一個非常動態的超級Ajax化Web應用程序,每5-20秒要求各種類型的數據,我們的後端是python或php或java以外的其他任何東西......在這樣的情況下,MySQL或類似的數據庫顯然會承受巨大的壓力(有很多用戶),MongoDB/CouchDB是否能夠運行這個程序,而不需要創造一些汗水,也不需要創建一些超級超複雜的集羣/緩存等解決方案?

是的,這基本上是我的問題,如果你認爲沒有..那麼是的,我知道有幾種類型的解決方案,nodeJS/websockets /反重力/蠕蟲洞超級技術,但我只是對這些感興趣NoSQL的東西atm和更具體的,如果他們可以處理這種類型的事情。

比方說,我們有5000個用戶在同一時間,每5秒,10秒或20秒ajax請求更新各種接口。

拍攝]

+0

爲什麼不給它一個鏡頭並運行一些基準來模擬你將會期望的高負載? – Fanis 2010-09-26 17:20:18

+0

是的,我正在考慮這樣做,但只是想看看是否有人有這方面的第一手經驗。 – quiggle 2010-09-26 17:38:51

回答

2

比方說,我們有5000個用戶在 同時,每5,10秒或20秒 ,更新各種 接口Ajax請求。

好吧,爲了得到這個結果,你說的是每秒250到1000次寫入?是的,MongoDB可以處理這個問題。

性能的關鍵在於是否查詢,更新或插入。

對於查詢,Mongo可能可以處理這個負載。這實際上是關於數據大小與內存大小比率有關的。如果你的服務器有1GB內存和150GB數據,那麼你可能無法獲得每秒250查詢(使用任何數據庫技術)。但通過合理的硬件規格,Mongo可以在單個64位服務器上達到這個速度。

如果您有5,000個活動用戶,並且您不斷更新現有記錄,那麼Mongo將非常快速(與在單臺計算機上更新memcached一致)。這裏的原因很簡單,Mongo可能會保留記憶。因此,用戶將每5秒發送一次更新,並且內存中的對象將被更新。

如果你不斷插入新記錄,那麼這個限制實際上將是吞吐量之一。當你寫很多新的數據時,你也會迫使索引擴大。因此,如果您計劃抽取新的數據傳輸速率,那麼您可能會飽和磁盤吞吐量,因此需要分片。

因此根據你的問題,你看起來大部分是查詢/更新。你會寫新的記錄,但不會有1000個新記錄/秒。如果是這樣,那麼MongoDB可能適合你。它肯定會解決很多緩存問題。

+0

真棒,是的,你是對的我將主要更新/獲取現有的數據。 – quiggle 2010-09-27 14:33:33

+0

感謝您區分查詢,更新和插入 – mikezter 2010-09-27 15:09:44

0

這在很大程度上依賴於服務器的運行表示的NoSQL解決方案,數據等的量......我與蒙戈玩耍了一下,這是非常容易安裝多臺服務器同時運行,並通過在同一個盒子上啓動多個實例並使它們像集羣一樣工作,您很可能能夠實現高併發性。幸運的是,Mongo至少處理了所有的細節,所以服務器可以在不跳過節拍的情況下被殺死和引入(取決於版本)。默認情況下,我認爲最大連接數爲1000,因此從上述配置啓動5臺服務器就足夠了(如果您的服務器可以明顯處理它),但實際上您很可能永遠不會在同一時間觸及5000個用戶。

我希望爲了您的硬件的緣故,您至少會提出一個解決方案,可以檢查在全面提取前是否有新數據可用。無論是通過時間戳或Memcache等...

總的來說,我會傾向於認爲NoSQL會比傳統數據庫快得多,假設您正在提取數據而不是運行報告等......並且您的數據存儲設計足夠智能以彌補缺乏複雜的聯接。

+0

是的,這裏的設計很重要,幸運的是我所做的事情不需要任何複雜的連接,這就是爲什麼我認爲MongoDB可能是完美的。 – quiggle 2010-09-26 18:41:05

+0

這絕對是一項甜蜜的技術。最難的是理解如何構建數據 - 特別是來自RDMS的強大背景。一旦發現,剩下的就是蛋糕。 – methodin 2010-09-26 19:58:41

+0

是的,這就是我現在試圖包裹我的頭,嘿嘿,但我看到有幾個不同的ORM好的「ODM」在那裏爲MongoDB,比任何其他更好? – quiggle 2010-09-26 20:30:22