2012-02-06 215 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