mysql json vs mongo - 存储空间

2024-02-25

我遇到了一个有趣的情况,虽然不是一个实际的问题,但我不明白为什么会发生这种情况。

我们有一个 mongo 数据库,主要由存储在数组中的一些批量数据组成。由于团队中超过 90% 的人熟悉 mysql,而只有少数人熟悉 mongo,再加上这不是关键数据库,所有查询都是在 2 个字段(客户端或产品)上完成的)我们决定将数据移到mysql中,在这样的表中

[idProduct (bigint unsigned), idClient (bigint unsigned), data (json)]

其中 data 是一个巨大的 json,包含数百个属性及其值。

我们还通过 idClient 上的哈希将其划分为 100 个分区。

PARTITION BY HASH(idClient)
PARTITIONS 100;

一切正常,但我注意到一个有趣的事实:

原始的 mongo 数据库大约有 70 GB,或多或少。 mysql 版本(实际上包含较少的数据,因为重新删除了我们在 mongo 中用作索引的一些重复项)超过 400 GB。

为什么它需要这么多空间?理论上bson实际上应该比json略大(至少在大多数情况下)。即使 mysql 中的索引更大...差异也是巨大的(超过 5 倍)。


我做了一个演示如何在 MySQL 中错误地使用 JSON https://www.slideshare.net/billkarwin/how-to-use-json-in-mysql-wrong (video https://www.percona.com/resources/videos/how-use-json-mysql-wrong),其中我将 Stack Overflow 数据转储导入到 MySQL 中的 JSON 列中。我发现我测试的数据比使用每列的常规数据类型将相同数据导入到普通表和列中所占用的空间多出 2 到 3 倍。

JSON 对相同的数据使用更多的空间,例如,因为它将整数和日期存储为字符串,还因为它在每一行上存储键名称,而不是只在表头中存储一次。

这是将 MySQL 中的 JSON 与 MySQL 中的普通列进行比较。我不确定 MongoDB 如何存储数据以及为什么它要小得多。我读到 MongoDB 的 WiredTiger 引擎支持压缩选项,并且从 MongoDB 3.0 开始默认启用 snappy 压缩 https://www.mongodb.com/blog/post/new-compression-options-mongodb-30。也许你应该启用MySQL 中的压缩格式 https://dev.mysql.com/doc/refman/8.0/en/innodb-row-format.html看看这是否可以提高存储效率。

MySQL 中的 JSON 存储方式类似于 TEXT/BLOB 数据,因为它被映射到一组 16KB 的页面中。前 32 页(即最多 512KB)一次分配一个页。如果内容长于此,则以 64 页 (1MB) 为增量进行进一步分配。因此,如果单个 TEXT/BLOB/JSON 内容为 513KB,则可能会分配 1.5MB。

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

mysql json vs mongo - 存储空间 的相关文章

  • JSON-LD 缺少“}”或对象成员名称。错误

    我喜欢将 json ld 添加到我的网站 然后我想将它添加到我的开发网站来测试它 我收到错误消息 指出缺少 或对象成员名称 这是什么错误 我已正确关闭括号 如何修复它
  • 在上下文中提取搜索字符串

    我正在尝试执行 MySQL 查询 在上下文中提取搜索字符串 因此 如果搜索是 mysql 我想从 body 列返回类似的内容 下载后只需几分钟MySQL安装程序即可使用 这就是我现在得到的 但它不起作用 因为它只是从正文字段中获取前 20
  • 如何发送和接收大型 JSON 数据

    我对全栈开发比较陌生 目前正在尝试找出一种有效的方法send and fetch我的前端 React 和后端 Express 之间存在大量数据 同时最大限度地减少内存使用 具体来说 我正在构建一个地图应用程序 它需要我处理大型 JSON 文
  • 减少从 MongoDB 加载大熊猫数据帧所使用的内存

    我有一个大型数据集 包含 4000 万条记录 总大小约为 21 0G 存储在 MongoDB 中 我花了几个小时将其加载到 pandas 数据框中 但总内存大小增加到约 28 7G 加载之前约为 600Mb cursor mongocoll
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • 如何在 pandas 中读取并标准化以下 json?

    我在 stackoverflow 中使用 pandas 看到了很多 json 读取问题 但我仍然无法解决这个简单的问题 Data session id 0 X061RFWB06K9V 1 5AZ2X2A9BHH5U unix timesta
  • 如何导出带有数据的 MySQL 架构?

    我有一个完整的架构 其中有许多表 其中包含 MySQL 查询浏览器中的数据 现在我想将这个包含所有表 数据的完整数据库发送给我的同事 我怎样才能将其发送给我的同事 以便他可以将这个完整的架构放入他的 MySQL 查询浏览器中 Thanks
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • AWS RDS MySql - 如何在设置“公开可用”后允许访问

    刚刚使用默认设置和用户 密码创建了新的 AWS RDS MySql 实例 我也将其设置为publicly available并在此过程中创建新的 VPC 目前无法从我的笔记本电脑连接到此 RDS mysql h endpoint u myu
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • jq:将对象数组转换为对象

    我收到了来自curl的回复 格式如下 list value 1 id 12 value 15 id 13 value 4 id 14 给定 id 之间的映射 如下所示 12 newId1 13 newId2 14 newId3 我想做这个
  • 无法在 mysql-apt-config [Ubuntu 14.04] 中选择“确定”

    我使用的是 Ubuntu 14 04 sudo apt get update总是给我这个选项来配置 mysql apt config 我尝试选择版本 按 tab gt 在 确定 上突出显示的键 按 Enter 但没有任何反应 它再次返回并突
  • 在 Meteor 中运行示例的问题

    我正在测试 Meteor 示例 这是我运行时看到的meteor在待办事项示例中 Unexpected mongo exit code 100 Restarting Unexpected mongo exit code 100 Restart
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • MySQL 可选的带有 MATCH 的 LEFT JOIN

    我有以下查询 它对 MySQL Innodb 数据库中同一搜索词的两个不同表中的两列执行全文搜索 SELECT Id MATCH tb1 comment tb2 comment AGAINST search term IN BOOLEAN
  • WHERE NOT EXIST 附近的语法错误

    我在堆栈中搜索 但没有一个达到最终答案 我的查询是这样的 INSERT INTO user username frequence autoSend VALUES feri2 3 1 WHERE NOT EXISTS SELECT FROM
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • 在同一查询中选择 Count of ip 和 Count of DISTINCT ip

    我有一个这样的表结构 TABLE NAME counter id datetime url ip 1 2013 04 12 13 27 09 url1 ip01 2 2013 04 13 10 55 43 url2 ip02 3 2013

随机推荐

  • 需要一个例程来检测相似但不相同的字符串

    我有一个字符串列表 其中一些自我之前的版本以来已被修改 有些更改是微不足道的 间距 相差一个单词等 我想检测只有 微小 差异的字符串 以便如果可能的话我可以尝试使用旧的翻译 细微差别 是什么意思 在我开始使用数据库之前我不会知道 您是否知道
  • 如何从 scrapy 蜘蛛回调中收集统计信息?

    如何从蜘蛛回调中收集统计数据 Example class MySpider Spider name myspider start urls http example com def parse self response stats set
  • C++11:重要的线程局部静态变量?

    我有一个X类 class X 我想做这个 void f thread local static X x 实际上我使用的是 gcc 所以关键字是 thread 但我不能 因为你只能有微不足道的 thread locals 对此最好的解决方法是
  • 将 lmer 输出到 word/excel

    我正在工作R 有一个名为lme4 执行模型 lmer rasch lt lmer Response item 1 1 STIDSTD family binomial data exampledata 让我在控制台中输出 如帖子末尾所示 我想
  • 确定无冲突集?

    假设您有一堆集合 而每个集合都有几个子集 Set1 香蕉 菠萝 橙子 苹果 羽衣甘蓝 黄瓜 洋葱 大蒜 Set2 香蕉 黄瓜 大蒜 鳄梨 番茄 设置N 现在的目标是从每个集合中选择一个子集 而每个子集必须与任何其他选定的子集不发生冲突 对于
  • Coffeescript、Backbone 和加载顺序

    考虑这个 Coffeescript 类 在一个应用程序中 每个类都位于自己的文件中 class Manager extends Person title titles manager 如果该文件在 title 对象之前加载 则会生成错误 我
  • JavaScript 对象作为函数参数

    使用 JavaScript 假设我有一个函数 X 并且在该函数中创建了一个名为 objectX 的对象 函数 X 返回对象 X 稍后在代码中 函数 Z somevar anObject 接收 objectX 作为其参数之一 现在在函数 Z
  • 索引键列 VS 索引包含列

    谁能解释一下这两个 索引Key列 VS 索引Included Column 目前 我的索引有 4 个索引键列和 0 个包含列 我想知道两者之间的区别 索引键列是索引 B 树的一部分 包含的列不是 取两个索引 CREATE INDEX ind
  • Codesandbox.io 中的 React-Testing-Library 问题

    我对 React 来说是一个相对菜鸟 想在这个沙盒中练习一些 tdd基本反应沙箱 https codesandbox io s 93yp98knx4 测试代码似乎正在影响应用程序组件状态 如果您在浏览器和测试之间切换 您将看到测试项目被添加
  • SQL Select 包括数据类型和数据值

    如何从表中选择数据并将数据类型包含在值中 例如 我有一个名为 EMPLOYEE 的表 其中包含 fname lastname phone 等 如果我做 SELECT FROM EMPLOYEE 我得到了所有的列 如果我做 SELECT CO
  • 如何定位 UIView?

    我花了几个小时尝试定位 UIView 最终发现我需要修改视图框架 所以我向 UIViewController 子类添加了一个 setPosition 方法 如下所示 void setPosition CGPoint position CGR
  • 将 YYYYMMDD 字符串日期转换为日期时间值[重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中将字符串转换为日期时间 https stackoverflow com questions 1592653 convert string to datetime in c sharp 一个问
  • UIViewController PresentViewController 在 ios 8 上崩溃

    刚刚在我们的错误记录系统中收到此错误 一直在高低搜索 似乎找不到任何解决方案 任何帮助表示赞赏 这里是堆栈跟踪 https gist github com hermanccw 2a9264fd77d46e0e7279 可能在您的 XCODE
  • RESTful 破坏 Rails 中的多态关联?

    如何销毁关联本身并保留关联的对象 同时保持 RESTful 具体来说 我有这些模型 class Event lt ActiveRecord Base has many model surveys as gt surveyable depen
  • 对于表单中的每个控件,如何对表单中的所有文本框执行某些操作?

    如何使用 Foreach 语句对我的文本框执行某些操作 foreach Control X in this Controls Check if the controls is a TextBox if it is delete it s T
  • 命名空间 system.windows 中不存在“Forms”

    我刚刚开始研究 c 并且正在摆弄从某个论坛获得的一些代码示例 此代码使用命名空间using system windows forms我收到错误 命名空间 system windows 中不存在 Forms 我还收到一些与未定义函数相关的错误
  • 如何使用 Azure 移动服务 API 功能

    An APIWAMS 中添加了功能 我可以在其中定义自定义脚本 这似乎反对以前创建脚本表的做法 但是 我找不到任何有关如何使用它的描述 哪些客户端可以使用此功能 可以在 iOS 或 Javascript 中使用吗 还有关于这个主题的更多帖子
  • 我可以让 valgrind 告诉我哪个值未初始化吗?

    I ran valgrind一些代码如下 valgrind tool memcheck leak check full track origins yes test 它返回以下错误 24860 Conditional jump or mov
  • 删除 Safari/Chrome 文本输入/文本区域发光

    我想知道当我使用 CSS 单击文本输入 文本区域时是否可以删除默认的蓝色和黄色发光 编辑 11 年后 不要这样做 除非您要提供后备来指示哪个元素处于活动状态 否则 这会损害可访问性 因为它本质上删除了显示文档中哪个元素具有焦点的指示 想象一
  • mysql json vs mongo - 存储空间

    我遇到了一个有趣的情况 虽然不是一个实际的问题 但我不明白为什么会发生这种情况 我们有一个 mongo 数据库 主要由存储在数组中的一些批量数据组成 由于团队中超过 90 的人熟悉 mysql 而只有少数人熟悉 mongo 再加上这不是关键