2011-12-31 50 views
5

我正在開發一個項目,它將日誌聚合和分析作爲更大項目的一部分。我不知道要選擇哪個數據庫來處理這些日誌。最近我在MongoDB和Cassandra之間來回切換,但我確定還有其他人也適合我的需求。我應該選擇哪一個,爲什麼?Mongodb vs Cassandra用於聚合,搜索和分析許多日誌

整個事情都相當現在開始,但這裏有要求爲止:

  • 日誌在系統日誌格式
  • 查詢大多是在一個小的字符串,現在的消息,但我會在一個單獨的領域得到它。並且還會有基於日期,嚴重性或標籤的過濾器。很少有人會在消息中搜索隨機字符串。
  • 從一些日誌條目的每小時分析
  • 保留日誌的時間配置量
  • 更會來的,我敢肯定:)這就是爲什麼我想的NoSQL是比較合適的,因爲我們可以改變模式。

我們希望將數據庫增加到一些TB數據(並且每秒大約50K個插入),因此分片是必須的。查詢並不常見,因爲它們主要由大型項目的開發人員使用。但結果需要在幾秒鐘內返回。

現在,所有機器的存儲是普遍的(而且速度很慢)。所以對於可伸縮性,我想我們需要充分利用內存和多線程 - 爲了使分片變得有意義。

到目前爲止,我得到的基本想法是MongoDB具有更多特性,比如正則表達式或排序結果,並且它更容易設置爲體面配置,而Cassandra似乎更具可伸縮性(通過簡單添加服務器),並且還具有一些簡潔的功能,比如在數據上添加TTL。

+0

我已經結束了使用Elasticsearch。看看這裏的一些更多的信息:[鏈接](http://www.elasticsearch.org/tutorials/2012/05/19/elasticsearch-for-logging.html) – 2012-06-09 14:53:05

回答

2

MongoDB確實聽起來很適合您的需求。原因如下:

  • indices:既然你想運行偶然的查詢,那麼不用在你的應用中維護它們或者有一個單獨的搜索應用程序(Lucene)是很好的。
  • 尺度以及(內置分片支持,複製)
  • 寫入是異步的(默認情況下,你可以讓他們SYNCHR。),這是無阻塞和快速。在某些故障情況下,您可能會損失很少,但對於日誌和分析而言,這並沒有什麼不同。
  • 相當強大的查詢API(不像關係型,沒有連接,但比所有其他nosql鍵值存儲更好,而且聽起來比Cassandra提供的更強大)。

你甚至可以找到一個正確的配置,使它在非分片設置。例如,默認情況下,它每60秒同步一次磁盤,這意味着60秒的寫入將被緩衝,從而減少IO。我已經在一臺機器上測試了半TB的數據,並且單個索引字段查詢以cca 100-200ms運行。

+0

非常感謝您的答覆。它符合我目前的想法,即與MongoDB一起使用,然後只有遇到問題時纔可以切換到其他內容。 – 2012-01-01 11:15:10

5

稀疏的柱狀數據存儲(如Apache Cassandra)在聚合時間序列數據方面非常出色。請參閱下面的文章的例子:

+0

您是否在談論Cassandra爲每列自動存儲時間戳的事實?起初我認爲這對我非常有用,但後來我意識到我實際上需要一個不同的時間戳:在服務器上生成事件時的時間戳,而不是事件到達日誌聚合器時的時間戳。如果你認爲我在這裏錯過了一些東西,你能否寫一些細節? – 2012-01-03 20:59:03

+0

我特指數據建模方法。 Cassandra的時間戳概念與此無關。請閱讀上述文章 - 他們將提供一些有關如何構建列族以存儲日誌數據的信息。 – zznate 2012-01-05 09:04:59