2012-02-06 247 views
0

我的服務器生成大量的事務日誌。每條記錄都包含有關引薦者URL,用戶,製造商和相關產品的信息。一個例子記錄可能如下:統計數據庫系統

{transaction_id: 1, url: "http://example.com/", user_agent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7", manufacturer_id: 2, product_id: 3} 

我保存這些日誌僅一個月,然後我拋棄舊的,以騰出空間給新的。

我需要回答的問題是「每天在URL http://example.com/上顯示產品-3多少次?」或者「Firefox 10的用戶每天要求製造商-2的產品多少次?」。所有報告都是每日報道的,但分組的方式可能會隨時間而增加。另外,我應該可以將數據存儲多年。

你推薦什麼數據庫系統來靈活地聚合日誌?

我認爲,

  • MySQL的:存儲友好和易於存檔,但需要改變的表和每個聚集變更時間重寫查詢。
  • CouchDB:Map-Reduce方法很好,但它的修改系統不適合計數(不是嗎?)。
  • Redis:完美的內存計數,但很難查詢,並需要適合所有的數據到內存。
  • MongoDB:易於創建新類型的聚合,並且非常適合在磁盤上進行計數,但它看起來並不像MySQL和CouchDB那麼穩定。

我傾向於MongoDB。你怎麼看?

+1

是否有任何理由不能使用通過您的日誌並顯示統計信息的現有軟件 - 類似AWStats的情況? – 2012-02-06 13:19:23

+0

@Grim ...日誌由服務器爲每個事務生成,而不是每個請求(我應該指出這一點),並且有自定義字段,如manufacturer_id和product_id,這些字段不存儲在URL中。我可能會檢查AWStats如何工作。謝謝! – 2012-02-06 13:27:54

+0

有許多不同的統計軟件包(很多可以很好地處理自定義字段),它可能是一個更好的解決方案。但只有你知道那個答案! – 2012-02-06 13:30:31

回答

1

你應該看看類似Bigtable的數據庫。目前,有兩種開源實現:HBase和Hypertable。 (免責聲明:我爲Hypertable工作)。分析是一種典型的使用場景。

在Hypertable的情況下,你會得到

  • 自動時間戳每個插入行
  • 行具有一定的可配置的年齡(即1個月)將被自動刪除
  • 查詢語言(類似於SQL)

我相信HBase提供了類似的功能。

查看本教程 - 它顯示瞭如何通過指定時間間隔和其他謂詞來查詢Web訪問者的日誌。 http://code.google.com/p/hypertable/wiki/HQLTutorial

+0

謝謝。我對BigTable的系統做了一個快速的研究。我想知道,在非分佈式環境下,這些系統與MongoDB的比較如何? – 2012-02-06 15:52:05

+0

我不知道他們如何比較,但我知道他們工作。 Hypertable可以在一臺機器上運行。兩者(Hypertable和HBase)都可以在單機Hadoop(僞)羣集上運行。如果你想擴展,那麼你只需要在這個集羣中添加另一臺機器。 – cruppstahl 2012-02-07 05:17:06