数据聚合 mongodb vs mysql

2023-11-26

我目前正在研究用于具有严格数据聚合要求的项目的后端。项目主要要求如下。

  1. 为每个用户存储数百万条记录。用户每年可能拥有超过 100 万个条目,因此即使有 100 个用户,我们每年也会有 1 亿个条目。

  2. 这些条目的数据聚合必须即时执行。用户需要能够通过大量可用的过滤器来过滤条目,然后在结果上显示摘要(总计、平均值等)和图表。显然,我无法预先计算任何聚合结果,因为过滤器组合(以及结果集)很大。

  3. 用户只能访问自己的数据,但如果可以计算所有数据的匿名统计数据,那就太好了。

  4. 数据大部分时间都是批量的。例如,用户每天会上传数据,可能有 3000 条记录。在某些更高版本中,可能会有自动化程序每隔几分钟上传一小批(例如 100 个项目)。

我做了一个简单的测试,创建一个包含 100 万行的表,并在 mongodb 和 mysql 中执行 1 列的简单求和,性能差异巨大。我不记得确切的数字,但大概是 mysql = 200ms , mongodb = 20 秒。

我也用 couchdb 进行了测试,但结果更糟。

看起来速度很有前途的是 cassandra,当我第一次发现它时,我对它非常感兴趣。然而,文档很少,我还没有找到任何关于如何对数据执行求和和其他聚合函数的可靠示例。那可能吗 ?

从我的测试来看(也许我做错了什么),以当前的性能来看,不可能将 mongodb 用于这样的项目,尽管自动分片功能似乎非常适合它。

有没有人有 mongodb 数据聚合的经验或者有任何可能对项目实施有帮助的见解?

谢谢, 季米特里斯


如果您正在寻找一个非常高性能的 DBMS 并且不需要它是关系型的,您可能会考虑 Cassandra - 尽管它的优势只有在您拥有数据库集群而不是单个节点时才会发挥作用。

你没有说物理架构有什么限制。您确实提到了分片,这意味着集群。 IIRC MySQL 集群也支持分片。

了解系统打算支持什么级别的并发性以及如何添加数据(滴灌式或批量式)也非常有用。

您说“显然我无法预先计算任何聚合结果,因为过滤器组合(以及结果集)很大。”

这是您最大的问题,也将是决定系统性能的最重要因素。当然,您无法维护每种可能组合的具体化视图,但您最大的性能胜利将是维护有限的预聚合视图并构建可以找到最接近匹配的优化器。这并不那么难。

C.

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

数据聚合 mongodb vs mysql 的相关文章

  • 本地 SQLite 与远程 MongoDB

    我正在设计一个新的 Web 项目 在研究了一些旨在可扩展性的选项后 我提出了两个数据库解决方案 为可扩展方式精心设计的本地 SQLite 文件 每个 X 用户一个新的数据库文件 因为写入将取决于用户内容 不存在跨用户数据依赖性 远程 Mon
  • 需要 SQL 选择查询帮助

    我的问题类似于SQL选择组查询 https stackoverflow com questions 11407601 sql select group query 但模式发生了变化 我想要不同的结果 如下所述 给定链接的解决方案没有给我正确
  • MySQL 启动错误 - 根元素丢失

    我在 Windows Server 2003 R2 上安装 MySQL 大约两个月了 启动时 我们会看到一个错误 显示 高严重性错误 根元素丢失 然后是另一个高严重性错误 显示 在调用 WriteToLog 方法之前必须定义日志文件路径 任
  • 如何在 php 和 mongodb 中使用 findAndModify

    我想将 id 加 1 但运行 php 页面时出现问题 错误是 Fatal error Call to undefined method MongoCollection findAndModify in C wamp www 我的代码是
  • 如何使用Python的Mysqldb模块?而不是 %s 作为查询参数?

    MySqlDb 是一个很棒的 Python 模块 但有一个部分非常烦人 查询参数如下所示 cursor execute select from Books where isbn s isbn 而已知宇宙中的其他地方 oracle sqlse
  • mysql错误1442的真正原因是什么?

    好吧 我在互联网上寻找了很多地方来寻找原因mysql error 1442其中说 无法更新存储函数 触发器中的表 unlucky table 因为 它已被调用此存储的语句使用 功能 触发器 有人说这是 mysql 中的一个错误或者它不提供的
  • 新行分隔符不适用于 group_concat 函数

    我有一根绳子 name lastname name2 lastname2 包含数据库表中的值 我想显示它 喜欢 name lastname name2 lastname2 我使用 group concat 函数 它适用于逗号分隔符 但我需要
  • MongoDB 中递归文档的结构和查询语法?

    我最近开始在工作项目中研究 MongoDB 我对 JSON 和 MongoDB 的查询结构相当陌生 所以我希望你们中的一位能够提供一些说明 我已将这个问题翻译成 Excel 术语 因为它很常见并且很好地代表了我的问题 如果我尝试将 Exce
  • 是否可以使用 LOAD DATA INFILE 类型命令来更新数据库中的行?

    伪表 primary key first name last name date of birth 1 John Smith 07 04 1982 眼下名包含多行的用户全名 期望的结果是分割数据 因此first name包含 John la
  • 检测 MySQL 中的 utf8 损坏字符

    我有一个数据库 其中有一堆损坏的 utf8 字符分散在多个表中 字符列表不是很广泛 AFAIK 修复给定的表非常简单 update orderItem set itemName replace itemName 但我无法找到检测损坏字符的方
  • MySQL 错误 1264:列的值超出范围

    As I SETMySQL 中的 cust fax 表如下所示 cust fax integer 10 NOT NULL 然后我插入这样的值 INSERT INTO database values 3172978990 但随后它说 错误 1
  • Laravel Eloquent with()-> 返回 null

    我正在尝试使用 Eloquent 来获取具有以下功能的特定产品 brand id映射到a的列brands表 该brand数组返回空 这里有什么明显需要改变的地方吗 product Product with images gt with br
  • mysql 中的 max(长度(字段))

    如果我说 select max length Name from my table 我得到的结果是 18 但我也想要相关数据 所以如果我说 select max length Name Name from my table 这是行不通的 我
  • 创建表时 MySQL 语法错误

    我正在尝试在 Filemaker gt MySQL 转换脚本中使用此查询 表创建步骤直接从 phpMyAdmin 导出中获取 并添加到 DROP 语句中 DROP TABLE IF EXISTS artifacts CREATE TABLE
  • MySQL 更新具有多个值的查询

    我在数据库中有一个表 其记录如下 match id guess result 125 1 0 130 5 0 233 11 0 125 2 0 我的用户为每场比赛选择一个猜测 我有一个函数可以根据比赛的结果计算猜测的结果 如果猜测正确 结果
  • MongoDB 全文搜索分数“分数是什么意思?”

    我正在为我的学校开发一个 MongoDB 项目 我有一个句子集合 我进行正常的文本搜索以查找集合中最相似的句子 这是基于评分的 我运行这个查询 db sentences find text search any text score met
  • 使用 Java 连接到 MySql - SSL 连接

    我一直在尝试连接到 MySql 数据库 该数据库使用 ssl 连接与 java 并遇到麻烦 如果任何人可以帮助我 将会有很大的帮助 手动连接MySql 我们使用MySQL Workbench 参数 主机名 test db1 ro xxxxx
  • MySQL - 如何将列逆透视到行?

    ID a b c 1 a1 b1 c1 2 a2 b2 c2 如何将行重新组织为ID columntitle value 1 a1 a 1 b1 b 1 c1 c 2 a2 a 2 b2 b 2 c2 c 你正在尝试unpivot数据 My
  • PHP 插入中的 mysqli_affected_rows

    我有这个代码 if mail to subject message headers insert member sql INSERT INTO members id username VALUES id username insert me
  • 选择具有按两列分组的最大值的行

    我见过很多关于此类问题的解决方案 尤其是这个SQL 仅选择列上具有最大值的行 https stackoverflow com questions 7745609 sql select only rows with max value on

随机推荐

  • int.from_bytes() 是如何计算的?

    我试图理解什么from bytes 事实上确实如此 The 文档提到了这一点 byteorder 参数确定用于表示整数的字节顺序 如果字节顺序为 big 则最高有效字节位于字节数组的开头 如果字节顺序为 little 则最高有效字节位于字节
  • 使用 TypeScript 样式化组件的 'css' 属性

    styled components有一个插件可以实现以下功能 div props theme colors text gt 有什么办法可以告诉 TypeScriptcss是所有元素上的有效属性吗 将以下行添加到项目内的 TypeScript
  • .Net Core中间件-从请求中获取表单数据

    在 NET Core Web 应用程序中 我使用中间件 app UseMyMiddleware 在每个请求上添加一些日志记录 public void Configure IApplicationBuilder app IHostingEnv
  • 单击单元格外部后如何退出文本框

    我意外地在网上找到了这段代码 它解决了我的大部分问题 但是我想在这段代码中添加一件事 但我不知道我的问题是什么 如何在用户后退出文本框双击它还是在用户完成编辑之后
  • android edittext onchange监听器

    我知道一点点TextWatcher但这会触发您输入的每个角色 我想要一个在用户完成编辑时触发的侦听器 是否可以 也在TextWatcher我得到一个实例Editable但我需要一个实例EditText 我怎样才能得到它 EDIT 首先 您可
  • 如何打开以 JDesktopPane 为中心的 JInternalFrame?

    我正在添加一堆JInternalFrame变成一个JDesktopPane 当用户选择通过菜单打开各种功能时 但我希望内部框架在桌面窗格的中心打开 而不是在左上角 它们似乎是默认的 如何指定 JInternalFrames 居中打开 或打开
  • 如何拉伸图像以填充此 WPF / XAML 应用程序?

    当我的程序显示小于 XAML 中定义的图像 GUI 对象的图像时 它不会像我希望的那样拉伸以适合 例如 256x256 图像仅占据 512x512 图像 GUI 对象的左上象限 我很困惑 因为我在 XAML 代码中设置了 Stretch F
  • Flutter 中的 StreamBuilder 陷入 ConnectionState.waiting 并仅显示加载标记

    您好 我正在尝试将 Firebase 文档内的数据动态显示到我的 Flutter 中 并使用循环进行渲染 所以我做了一个List
  • cPickle - 对同一对象进行酸洗的不同结果

    有谁能解释一下下面的评论吗testLookups 在这个代码片段 我已经运行了代码 确实评论所说的是真的 不过我想了解为什么这是真的 即为什么 cPickle 根据引用方式为同一对象输出不同的值 它与引用计数有什么关系吗 如果是这样 这不是
  • C# 无法使用类型约束推断泛型类型参数,是否有解决方法?

    埃里克 利珀特 Eric Lippert 在他的博客文章中解释道 http blogs msdn com b ericlippert archive 2009 12 10 constraints are not part of the si
  • 删除/移动 Google Chrome 左下角状态栏(链接地址栏)

    我正在开发一个网站 其设计的左下角有一个关键的导航元素 在 Google Chrome 中 左下角有一个状态栏 当您将鼠标悬停在页面上的链接上时 会出现该状态栏并显示该页面的 URL 不过 如果你足够接近 它会移动到右下角 这妨碍了该导航元
  • 为什么Java 2D原点位于左上角?

    我不是抱怨 只是好奇 为什么Java使用绘图表面的左上角作为原点 我认为更自然的是选择左下角作为原点并随着它们向上和向右增加轴 类似于石英 自古以来 计算机图形学就起源于左上角 其中包括 QuickDraw 使用左下角 如在数学中 是 Po
  • 从 float 转换为 QByteArray

    有没有一种快速方法可以将浮点值转换为字节形式 十六进制 表示形式QByteArray 做过类似的事情memcpy 在使用数组之前 但这似乎不太适用QByteArray 例如 memcpy byteArrayData floatData si
  • 如何找到数组的维数?

    下面是一段代码 我需要通过遍历传递的消息来存储有关警告消息的一些信息 传递的参数本身是一个变体 由 API 调用设置SAPListOfMessages它返回一个数组String 然而我注意到 每当有超过 1 个警告时 列表都是二维的 mes
  • jQuery mobile:在 ListView 中启用自动换行

    我有一个列表视图 见下图 我想将所有内容自动换行 而不是添加 到长行 这是怎么做到的 您只需要更新 CSS ui li desc保存列表项中文本的元素 ui page ui content ui listview ui li desc wh
  • QtService 应用程序作为服务运行时无法连接到系统总线

    我已经重新编译了Qt与集成的dbus对于窗户 此外 我还实施了QtService应用程序在系统总线上注册服务和对象 如下所示 QDBusConnection systemBus registerService com mycompany C
  • 从 R 中的许多列中减去数据框中的一列

    我有一个数据框 我想从所有其他列中减去第二列 我可以循环执行此操作 但我想在一次调用中执行此操作 这是我的工作循环代码 df lt data frame x 100 101 y 2 3 z 3 4 a 1 0 b 4 5 for i in
  • 如何使用 PDO 在一个数据库行程中插入多条记录?

    我有一张桌子叫propAmenities其中包含两列amenity id and property id基本上该表保存外键 现在我必须使用以下语句的命名占位符生成 PDO 查询 INSERT INTO propAmenities ameni
  • 计算sql查询中的持续时间总和

    我有一个表 其中有两列开始时间和结束时间 我能够计算每行的持续时间 但我也想获得总持续时间 这个怎么做 Thanks 您的列的数据类型为 TIMESTAMP 如下所示 SQL gt create table mytable start ti
  • 数据聚合 mongodb vs mysql

    我目前正在研究用于具有严格数据聚合要求的项目的后端 项目主要要求如下 为每个用户存储数百万条记录 用户每年可能拥有超过 100 万个条目 因此即使有 100 个用户 我们每年也会有 1 亿个条目 这些条目的数据聚合必须即时执行 用户需要能够