我的服务器生成大量的事务日志。每条记录都包含有关引荐者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。你怎么看?
是否有任何理由不能使用通过您的日志并显示统计信息的现有软件 - 类似AWStats的情况? – 2012-02-06 13:19:23
@Grim ...日志由服务器为每个事务生成,而不是每个请求(我应该指出这一点),并且有自定义字段,如manufacturer_id和product_id,这些字段不存储在URL中。我可能会检查AWStats如何工作。谢谢! – 2012-02-06 13:27:54
有许多不同的统计软件包(很多可以很好地处理自定义字段),它可能是一个更好的解决方案。但只有你知道那个答案! – 2012-02-06 13:30:31