如何:记录和分析点击次数,综合浏览量和会话以优化转化

时间:2013-07-11 10:12:22

标签: mysql mongodb logging analytics

我们有一个中等规模的电子商务网站。我们卖书。在该网站上,我们有促销,用户推荐,常规书页,相关书籍等。与amazon.com非常相似,除了网站的数量。

我们有一个传统的LAMP设置,其中M仍然代表MariaDB。

TPTB希望记录和分析用户行为以优化转化。

底线,我认为每次点击都必须记录。 (我担心)

每月累计点击次数达到数百万次。该系统必须能够及时回溯至少3年。

可能被问到系统的问题是:给定页面(例如:主页),并点击促销横幅,所述横幅的哪种颜色提供最佳转换。现在将这个问题分解为新客户和回头客。 (多维或A / B测试)或者,考虑到书A和B的视图,用户下一步购买哪些书。查询范围将非常广泛。汇总数据毫无意义。

我非常怀疑MySQL能否提供一个存储,分析和查询这些数据的良好平台。我们可以存储这些行,通过RabbitMQ将它们提供给MySQL以避免延迟,但是在给定50M行的情况下,在MySQL中查询和分析这些数据可能不是最佳的。

有很多关于使用MongoDB存储分析数据的文章。但是所有的帖子似乎都增加了文档中的计数器(预先聚合数据),这对我们来说还不够好。

最大的问题是:是否有任何数据库(或其他系统)特别适合存储和分析这样的数据?可能MySQL仍然可以做到这一点?我的评估是否正确,MongoDB可能在这里没有任何附加价值?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您只想让报告中的汇总数据每天说一次(与“直播”相对)?如果是这种情况,我建议使用Hadoop,因为它允许您为您运行运行此聚合的大量Map / Reduce作业,然后向您显示报告。在这一数据量下,任何“实时”解决方案都无法正常工作。

如果你不想搞乱Hadoop和Map / Reduce的复杂性,那么MongoDB可能会工作。它有一个非常强大的聚合框架,可以在一个实时环境中执行许多聚合。它不是真正意味着在每个网页浏览中运行,但它也不是“让我们每天做一次”的事情。它取决于您的数据聚合要求,无论聚合框架是否可以帮助您,但如果没有,那么MongoDB还支持Map / Reduce用于更复杂的任务(速度较慢)。 MongoDB非常适合,因为您可以拥有较高的写入性能 - 如果一个节点不起作用,您可以始终进行分片以获得更高的写入性能。

答案 1 :(得分:0)

如果你的主要建议是根据过去的用户选择提供建议,你也可以考虑像Neo4j或FlockDB这样的图形数据库。

这些数据库允许您建立买家与他们购买的商品之间的关系(这应该是要存储的数据要少得多,因为您将减少很少的用户数据冗余),您可以使用它来执行一些三元关闭流程 - 换句话说,找出类似用户购买的用户'A'尚未购买的东西。

我不能说我已经做到了,但我也在认真研究这个问题。 除了Map Reduce范例之外,MongoDB现在(v 2.4.6)已经发现了一个非常强大的聚合管道框架。