实时统计:MySQL(/Drizzle) 还是 MongoDB?

问题描述 投票:0回答:2

我们正在开发一个项目,该项目将提供某些操作(例如点击)的实时统计。 每次点击时,我们都会记录日期、年龄和性别(这些来自 Facebook)、位置等信息。

我们正在讨论存储这些信息并将其用于实时统计的最佳位置。我们将显示汇总统计数据:例如,点击次数、男性/女性点击次数、按年龄组划分的点击次数(例如 18-24、24-30...)。

由于我们在网站上到处都使用 MongoDB,我的同事认为我们也应该在其中存储统计信息。 然而,我更喜欢使用基于 SQL 的数据库来完成此任务,例如 MySQL(或者可能是 Drizzle),因为我相信 SQL 在执行数据聚合等操作时效果更好。尽管存在解析 SQL 的开销,但我认为 MySQL/Drizzle 实际上可能比 No-SQL 数据库更快。当使用 INSERT DELAYED 查询时,插入也不慢。

请注意,我们不需要执行 JOINS 或从多个表/集合收集数据。因此,我们不关心数据库是否不同。 然而,我们确实关心可扩展性和可靠性。我们正在构建的东西(希望)会变得非常大,并且我们在设计每一行代码时都考虑到了可扩展性。

你对此有何看法? 有什么理由比 MySQL/Drizzle 更喜欢 MongoDB 呢?还是漠不关心? 如果你是我们,你会使用哪一个?

谢谢你, 亚历山德罗

mysql mongodb statistics drizzle
2个回答
15
投票

BuddyMedia 正在使用其中的一些。 Gilt Groupe 使用 Hummingbird (node.js + MongoDB) 做了一些非常酷的事情。

曾在社交媒体领域的一家大型在线广告商工作过,我可以证明实时报告确实很痛苦。尝试每天“汇总”5 亿的展示次数已经是一个挑战,但尝试实时做到这一点是可行的,但它有一些明显的局限性。 (好像真的延迟了5分钟:)

坦白说,这类问题是我开始使用 MongoDB 的原因之一。而且我不是唯一一个。人们使用 MongoDB 进行各种实时分析:服务器监控集中式日志记录以及仪表板报告。

进行此类报告时,真正的关键是要了解数据结构与 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, ... ],
  ...
}

这里显然有一些调整,适当的索引,也许将数据+性别+年龄混合到

_id
中。但这就是使用 MongoDB 进行点击分析的基本结构。更新印象和点击
{ $inc : { clicks_hour.0 : 1 } }
真的很容易。您可以自动更新整个文档。报告实际上是很自然的。您已经拥有一个包含每小时或分钟级数据点的数组。

希望这能为您指明正确的方向。


4
投票

MongoDB 非常适合这种事情,并且肯定会比 MySQL 更快,尽管不要低估 MySQL 的强大功能 - 许多公司已经用它构建了分析工具。

看看 BuddyMedia 的 Patrick Stokes 的演示,了解他们如何使用 MongoDB 来构建分析系统。

http://www.slideshare.net/pstokes2/social-analytics-with-mongodb

© www.soinside.com 2019 - 2024. All rights reserved.