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

2023-12-29

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

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

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

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

你怎么看待这件事? 有什么理由比 MySQL/Drizzle 更喜欢 MongoDB 呢?还是漠不关心? 如果你是我们,你会使用哪一个?

谢谢你, 亚历山德罗


所以 BuddyMedia 正在使用其中的一些。 Gilt Groupe 做了一些很酷的事情蜂鸟 http://projects.nuttnet.net/hummingbird/(node.js + MongoDB)。

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

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

进行此类报告时,真正的关键是要了解数据结构与 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 } }。您可以自动更新整个文档。报告实际上是很自然的。您已经拥有一个包含每小时或分钟级数据点的数组。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实时统计:MySQL(/Drizzle) 还是 MongoDB? 的相关文章

  • 脚本超时已过,如果要完成导入,请重新提交相同的文件,导入将恢复

    我有一个数据库 拉开拉链后的尺寸50mb拉链尺寸7mb所以当我尝试导入数据库时zipped 7mb 几分钟后 它抛出此错误 脚本超时已过 如果您想完成导入 请resubmit相同的文件和导入将恢复 我已经重新提交了 但仍然没有导入全部数据
  • 如何自动更新数据库中的记录?

    我有一个工作表 在其中插入新工作 该表还包含职位发布日期 默认情况下 当发生新插入时 作业状态为打开状态 现在 当作业超过 30 天时 我想将作业状态从开放更改为关闭 我该怎么做 尝试创建一个每天运行的事件 如下所示 CREATE EVEN
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • 存储过程函数中的动态表名

    我编写了一个存储过程函数来从表中获取名称 问题是我希望将表名作为参数传入 有几个不同的表我需要使用此函数 DELIMITER CREATE DEFINER root localhost FUNCTION getName tableName
  • 哈希密码字段使用什么数据类型以及长度?

    我不确定密码哈希是如何工作的 稍后将实现 但现在需要创建数据库模式 我正在考虑将密码限制为 4 20 个字符 但据我了解 加密后哈希字符串的长度将有所不同 那么 如何将这些密码存储在数据库中呢 更新 仅使用哈希函数不足以存储密码 你应该阅读
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • DBX 错误:驱动程序无法正确初始化

    我在跑步德尔福XE3 终极版 MySQL 数据库 这是我点击时收到的错误Test Connection 作为回应 我在 xampp 目录中找到了 libmysql 库 并将其复制到我的 System32 目录中 但这是行不通的 此消息指的是
  • Wordnet sqlite 同义词和示例

    我正在尝试获取给定 wordid 的同义词和示例列表 经过大量的试验和错误 我可以获得所有同义词集的样本 但不是实际的同义词 这是我的查询 它给出了以下结果 select senses wordid senses synsetid sens
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • 级联删除时触发调用

    我在 MySQL 中有表 A 它有一些对其他表 B C D 的级联删除的引用 当从 A 中删除某些内容时 我需要使用触发器 当我直接从 A 删除记录时 此触发器起作用 但它不适用于级联删除 是否存在任何版本的 MySQL 可以让我的触发器与
  • 无法从 Web 主机本身以外的任何地方连接到任何 Web 主机的 MySQL 数据库

    我有 2 个不同的虚拟主机 pagodabox 000webhost 都是免费的 并且我已经设置了localhost与MySQL 我已经在他们三个上安装了 wordpress 它们在自己的域中工作得很好 即 什么时候localhostwor
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • Chart.js - 使用 mysql 和 php 从数据库获取数据

    我正在尝试将静态数据转换为使用数据库结果 我将使用MySQL and PHP 示例代码 var randomScalingFactor function return Math round Math random 100 var lineC
  • 如何在 MySQL 中启用严格 sql_mode?

    我怎样才能启用严格sql mode在 MySQL 中 我想从 SQL 中获取数据并在中处理相同的数据strict mode 我现在的sql mode is mysql gt SELECT sql mode sql mode NO ENGIN
  • 关于 Cassandra 与 MySQL 的一些建议

    几天前我在这里问了一个问题 得到了一些非常好的答案 我正在考虑做一个带有个人资料 个人简介等的facebook风格的网站 并询问我是否应该使用mysql 答案是使用Cassandra 因为好多了 我只是问这是每个人都会建议的 只是我对mys
  • mysql_query 保留返回时在表中创建的数据类型?

    我在mysql中有一个表 CREATE TABLE user id INT name VARCHAR 250 我查询表 result mysql query SELECT id name FROM user 我收集结果 while row
  • 无法将句子插入数据库

    我有一些句子 我必须选择由 6 个以上单词组成的句子 然后它们将被插入到数据库中
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro

随机推荐