用于统计计数​​的数据库系统

时间:2012-02-06 13:14:00

标签: mysql database nosql aggregation counting

我的服务器生成大量的事务日志。每条记录包含有关引用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}

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

我需要回答的问题是“每天在网址http://example.com/上显示产品3的次数?”或者“每天使用Firefox 10的用户多少次请求制造商-2的产品?”。所有报告都是每日报道,但分组方式可能会增加。此外,我应该能够存储数据多年。

您建议以灵活的方式聚合日志的数据库系统是什么?

我考虑过,

  • MySQL :存储友好且易于存档,但每次更改聚合时都需要更改表和重写查询。
  • CouchDB :Map-reduce方法很不错,但它的修订系统不适合计数(不是吗?)。
  • Redis :非常适合内存计数,但很难查询,需要将所有数据都安装到内存中。
  • MongoDB :易于创建新类型的聚合,非常适合磁盘计数,但它看起来并不那么容易存储,而且看起来不像MySQL和CouchDB那么稳定

我倾向于MongoDB。你觉得怎么样?

1 个答案:

答案 0 :(得分:1)

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

如果是Hypertable,你会得到

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

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

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