0

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

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

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

最重要的是,我认为必须记录每次点击。(我怕)

这将增加每月几百万次点击。该系统必须能够及时返回至少 3 年。

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

我严重怀疑 MySQL 是否有能力为存储、分析和查询这些数据提供良好的平台。我们可以存储这些行,通过 RabbitMQ 将它们提供给 MySQL 以避免延迟,但是在 MySQL 中有效地查询和分析这些数据可能不是最佳的,因为有 50M 行。

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

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

4

2 回答 2

1

如果我理解正确,那么您只想每天完成一次包含汇总数据的报告(而不是“实时”)?如果是这种情况,我建议使用 Hadoop,因为它允许您运行大量 Map/Reduce 作业,为您运行此聚合,然后为您提供报告。在这种数据量下,任何“实时”解决方案都行不通。

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

于 2013-07-11T10:19:27.890 回答
0

如果您的主要想法是根据过去的用户选择提供建议,您还可以考虑使用 Neo4j 或 FlockDB 等图形数据库。

这些数据库将允许您在买家和他们购买的商品之间建立关系(存储的数据应该少得多,因为您将拥有少得多的用户数据冗余),您可以使用它来执行一些三元关闭过程 - 在其他找出用户“A”尚未购买的类似用户购买了什么的话。

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

于 2013-10-17T21:00:11.563 回答