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}

我只存储这些日志一个月,然后我丢弃旧的为新的腾出空间。

我需要回答诸如“Product-3每天在 URL http://example.com/上显示多少次?”之类的问题。或“使用 Firefox 10 的用户每天请求制造商 2 的产品多少次?”。所有报告都是每日报告,但分组方式可能会随着时间的推移而增加。此外,我应该能够将数据存储多年。

您推荐什么数据库系统以灵活的方式聚合日志?

我考虑过,

  • MySQL:存储友好且易于归档,但每次更改聚合时都需要更改表和重写查询。
  • CouchDB:Map-reduce 方法很好,但它的修订系统不适合计数(不是吗?)。
  • Redis:非常适合内存计数,但很难查询,需要将所有数据都放入内存。
  • MongoDB:易于创建新的聚合类型,非常适合磁盘计数,但它似乎对存储不太友好,而且它似乎也不像 MySQL 和 CouchDB 那样稳定。

我倾向于 MongoDB。你怎么看?

4

1 回答 1

1

您应该查看类似 Bigtable 的数据库。目前,有两种开源实现:HBase 和 Hypertable。(免责声明:我为 Hypertable 工作)。分析是一个典型的使用场景。

在 Hypertable 的情况下,您会得到

  • 每个插入行的自动时间戳
  • 具有特定可配置年龄(即 1 个月)的行将被自动删除
  • 一种查询语言(类似于 SQL)

我确信 HBase 提供了类似的功能。

查看本教程 - 它展示了如何通过指定时间间隔和其他谓词来查询 Web 访问者的日志。 http://code.google.com/p/hypertable/wiki/HQLTutorial

于 2012-02-06T14:18:58.413 回答