2012-12-04 48 views
0

我正在構建一個非常大的計數器系統。要清楚的是,系統正在計算一個數據流中出現域的次數(大小約爲5億到1億個元素)。原子計數器Postgres vs MongoDB

系統將單獨處理每個元素併發出數據庫請求,以增加該域的計數器及其處理日期。這裏的結構:

stats_table (or collection) 
----------- 
id 
domain (string) 
date (date, YYYY-MM-DD) 
count (integer) 

我最初的想法是使用MongoDB,因爲它們的原子計數器功能。然而,當我考慮更多時,我認爲Postgres更新已經以原子方式發生(至少這就是我認爲的this question)。

我的問題是這樣的:在這裏使用一個數據庫有什麼好處嗎?假設我每天處理大約500萬個域名,那麼我需要在這裏考慮哪些關鍵的事情?

回答

4

Postgres中的所有單一操作都會自動包裝在事務中,並且MongoDB中單個文檔上的所有操作都是原子操作。在這種情況下,原子性並不是真正的優先考慮一個數據庫的原因。

雖然單個計數可能會相當高,但如果您只存儲聚合計數而不是計數的每個實例,則記錄總數不應太重要。即使你追蹤了數百萬個域名,Mongo或Postgres也可以很好地工作。

MongoDB是記錄事件的一個很好的解決方案,但是如果你想對你正在收集的分析數據做很多有趣的關係分析,我發現Postgres更可取。要在Mongo中高效地執行此操作通常需要高度的非規範化,所以我會更多地考慮您計劃在未來如何使用這些數據。

+0

感謝評論邁克爾!偉大的建議...至於我如何使用這些數據,它是相對直接的。將會有彙總請求(即獲得域X的所有計數),然後我也會計算出增長率。這就是它。我想在理論上我也可以做更深入的分析(比如每個域的平均計數等),但這不是我現在的意圖。 –