我们正在开发一个项目,该项目将实时统计一些动作(例如点击)。在每次点击时,我们将记录日期、年龄和性别(这些信息来自Facebook)、位置等信息。
我们正在讨论存储这些信息并将其用于实时统计的最佳位置。我们将显示聚合统计数据:例如,点击量、男性/女性的点击量、按年龄段划分的点击量(例如18-24,24-30...)。
由于我们在网站上到处都在使用MongoDB,我的同事认为我们也应该在它里面存储统计数据。然而,我更倾向于使用基于SQL的数据库来完成这项任务,比如MySQL (或者可能是Drizzle),因为我认为SQL在执行诸如数据聚合之类的操作时更好。虽然有解析SQL的开销,但我认为MySQL/Drizzle实际上可能比No-SQL数据库更快。当使用INSERT延迟查询时,INSERT也不慢。
请注意,我们不需要执行连接或从多个表/集合中收集数据。因此,我们并不关心数据库是否不同。但是,我们确实关心可伸缩性和可靠性。我们正在构建的东西将(希望)变得非常大,并且我们在设计每一行代码时都考虑到了可伸缩性。
你觉得这个怎么样?对于这一点,有没有理由更喜欢MongoDB而不是MySQL/Drizzle?还是无动于衷?如果你是我们,你会用哪一个?
谢谢你,Alessandro
发布于 2011-05-01 07:31:47
因此,BuddyMedia正在使用其中的一部分。Gilt Groupe用Hummingbird (node.js + MongoDB)做了一些很酷的事情。
我曾在社交媒体领域为一家大型在线广告商工作过,我可以证明,实时报道真的很痛苦。尝试每天“汇总”5亿次印象已经是一个挑战,但尝试实时地做到这一点是有效的,但它有一些明显的限制。(就像它实际上延迟了5分钟:)
坦率地说,这类问题是我开始使用MongoDB的原因之一。我不是唯一一个。人们正在使用MongoDB进行各种实时分析:server monitoring、centralized logging以及仪表板报告。
在进行这种类型的报告时,真正的关键是要了解MongoDB的数据结构完全不同,您将避免“聚合”查询,因此查询和输出图表将是不同的。在客户端有一些额外的编码工作。
以下是使用MongoDB完成此操作的关键,它可以为您指明正确的方向。看看下面的数据结构:
{
date: "20110430",
gender: "M",
age: 1, // 1 is probably a bucket
impression_hour: [ 100, 50, ...], // 24 of these
impression_minute: [ 2, 5, 19, 8, ... ], // 1440 of these
clicks_hour: [ 10, 2, ... ],
...
}显然,这里有一些调整,适当的索引,可能会将data+gender+age混入到_id中。但这是MongoDB点击分析的一种基本结构。更新impression和点击{ $inc : { clicks_hour.0 : 1 } }真的很容易。您可以自动更新整个文档。实际上,这是很自然的报道。您已经有了一个包含小时或分钟级别数据点的数组。
希望这能为您指明正确的方向。
发布于 2011-04-30 09:29:58
尽管不要低估了MySQL的强大功能--许多公司已经用它构建了分析工具,但MongoDB在这方面做得很好,而且肯定会比MySQL快。
看看BuddyMedia的Patrick Stokes关于他们如何将MongoDB用于分析系统的演示文稿。
http://www.slideshare.net/pstokes2/social-analytics-with-mongodb
https://stackoverflow.com/questions/5830914
复制相似问题