mysql - mysql json vs mongo - 存储空间
问题描述
我遇到了一个有趣的情况,虽然不是一个实际问题,但我不明白为什么会这样。
我们有一个 mongo 数据库,主要由存储在数组中的一些批量数据组成。由于超过 90% 的团队都熟悉 mysql,而我们中只有少数人熟悉 mongo,再加上不是关键数据库,所有查询都在 2 个字段(客户端或产品)上完成) 我们决定将 mysql 中的数据移动到这样的表中
[idProduct (bigint unsigned), idClient (bigint unsigned), data (json)]
其中数据是一个包含数百个属性及其值的巨大 json。
我们还通过 idClient 上的哈希将其划分为 100 个分区。
PARTITION BY HASH(idClient)
PARTITIONS 100;
一切正常,但我注意到一个有趣的事实:
原始的 mongo db 大约有 70 GB,给或取。mysql 版本(实际上包含更少的数据,因为重新删除了我们在 mongo 中用作索引的一些重复项)有超过 400 GB。
为什么要占用这么多空间?理论上 bson 实际上应该比 json 略大(至少在大多数情况下)。即使 mysql 中的索引更大......差异也很大(超过 5 倍)。
解决方案
嗨,我认为主要原因可能是由于 Mongo 在内部将 json 存储为 bson(http://bsonspec.org/),并且在规范中强调这种表示是轻量级的。
推荐阅读
- android - 反应原生谷歌登录失败 - 错误代码16(取消)
- c++ - VS 2017 使用交叉编译器构建 x64 项目
- jenkins - 构建步骤“发布性能测试结果报告”将构建结果更改为 FAILURE Finished: FAILURE
- git - Github 中的拉取请求问题
- javascript - 仅从 javascript 中不同格式的字符串中提取年份
- html - 带有 React 的 CSS 边框导航栏
- android - 如何确定手机是否有缺口
- angularjs - 如何在子指令中访问父控制器的功能
- android - 如何获取存储在使用 context.getDir(directoryName, Context.MODE_PRIVATE) 创建的文件夹中的文件的 URI?
- electron - Electron - ipcRenderer 在异步类中不起作用