[英]Which database to choose (Cassandra, MongoDB, ?) for storing and querying event / log / metrics data?
在sql術語中,我們存儲的數據如下:
table events (
id
timestamp
dimension1
dimension2
dimension3
etc.
)
所有維度值都是整數。 這張桌子變得非常大。
我們想要對這樣的查詢進行愚蠢的快速讀取:
SELECT dimension1, dimension2, COUNT(*)
FROM events
WHERE dimension8 = 'foo'
AND dimension9 = 'bar'
GROUP BY 1, 2
我們想要快速寫入,而不關心事務和一致性。 我們關心最終的可用性和分區容差。
我在看“NoSQL”替代品。 Casandra可以做我正在尋找的那種查詢嗎? 通過閱讀他們的文檔,這並不是很明顯......如果它可以做到這一點,那些類型的查詢的性能是什么?
也在看MongoDB,但是他們的“group()”函數在我能閱讀時有很多限制(最多10,000行)。
您是否有使用這些數據庫的經驗,您是否會建議將其作為上述問題的解決方案?
我應該考慮哪些其他數據庫可以快速完成這些查詢?
干杯,吉米
“分組依賴”和“愚蠢的快速”不一起去。 這就是那種野獸的本質......因此對Mongo集團運作的局限性; Cassandra本身甚至不支持它(雖然它通過Hadoop為Hive或Pig查詢...但這些並不是非常愚蠢的快速)。
像Twitter的Rainbird(使用Cassandra)進行實時分析的系統通過非規范化/預先計算計數來實現: http : //www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011
也在看MongoDB,但是他們的“group()”函數在我能閱讀時有很多限制(最多10,000行)。
為了澄清,這是返回的10,000行。 在您的示例中,這將適用於多達10,000個dimension1/dimension2
組合。 如果那個太大,那么你也可以使用較慢的Map / Reduce 。 請注意,如果您運行的查詢結果超過10k,則最好使用Map / Reduce並保存此數據。 10k是一個大的查詢結果,否則只是“扔掉”。
您是否有使用這些數據庫的經驗,您是否會建議將其作為上述問題的解決方案?
許多人實際上使用MongoDB來“實時”地進行這種類型的匯總,但他們使用“計數器”而不是“聚合”來完成。 它們不是“滾動”詳細數據,而是進行常規插入,然后它們會增加一些計數器。
特別是,使用像$inc
和$push
這樣的原子修飾符來在單個請求中原子地更新數據。
現在看看有人這樣做的蜂鳥 。 還有一個由MongoDB支持的開源事件記錄系統: Graylog2 。 ServerDensity還執行MongoDB支持的服務器事件日志記錄。
查看這些內容可能會為您想要執行的日志記錄類型提供一些靈感。
為了類似的目的(指標收集和報告),我開始沿着這條路走下去,這就是我最終的地方......
獲取數據很容易。 獲取數據是困難的部分。
如果您有時間和才能,您可以學習並使用如下所述的開源工具組合: http : //kibana.org/infrastructure.html 。 零件清單:
如果你有比時間更多的錢,請考慮Splunk。 它價格昂貴,但在很多情況下它都是不錯的選擇。 例如,我處在客戶對人們非常稀缺的情況下,但是他們並不介意花錢,所以splunk一直很合適,因為它更像是一個交鑰匙的解決方案而不是學習和拼接一個復合材料。工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.