在 MYSQL 中存储 JSON 数据 - 对性能的影响

Posted

技术标签:

【中文标题】在 MYSQL 中存储 JSON 数据 - 对性能的影响【英文标题】:Storing JSON data in MYSQL - effects on performance 【发布时间】:2016-11-11 12:06:50 【问题描述】:

我正在构建一个应用程序,并且在构建我的数据库层时,我有一个问题,我应该创建一个列,以便我可以将多个项目存储为 JSON,还是为我要存储的每个项目创建列?

什么时候应该将 JSON 存储在数据库中,什么时候不应该?

在数据库中存储 JSON 的优缺点是什么?

举个例子,对于所有不需要搜索或索引的列,将它们的值存储在 JSON 数组中会更优化,还是我应该坚持创建有多个列的规范化数据表?

【问题讨论】:

json 只是文本。它与任何其他文本具有相同的“成本”。如果您从不需要处理 json 中的单个数据块,那么成本为零。这只是文字。如果您确实需要访问单个块,那么成本很高 - mysql 不知道 json 是什么,这意味着您必须使用字符串操作来访问这些数据块,或者将 json 吸入客户端并在那里解码。 除非您使用的是 5.7,否则请参阅 this 和 5.7 的文档验证...我认为如果有人将带有和不带有 json 的无偏见的典型业务场景组合在一起,社区将受益匪浅。几百万行。显示指标。 【参考方案1】:

在关系数据库上,您应该始终尝试normalize。从这个角度看,存储一个json字符串是很简单的错误。

只要您不想操纵或查询 JSON 的内容,我认为不会影响性能。这意味着您只能通过主键设置和获取。

如果你一般想存储你的对象,而且不是特殊情况,我也建议你看看像 MongoDB 这样的NoSQL Database。它用于存储和接收对象。也许它适合你,也许不是。


也就是说,我的经验法则是:

如果您最终得到一个只有一行的表,请使用 XML/JSON (ConfigID|XML/JSON) 如果您最终得到多行,请进行规范化

【讨论】:

【参考方案2】:

以您的示例:对于所有不需要搜索或索引的列,您绝对可以在 MySQL 中使用 JSON 数据。

从逻辑上讲,它允许保存存储内存而不是规范化 数据表。所以你可以很好地使用 MySQL 中的 JSON 存储 案例。

此外,我想在这里为您详细介绍可能的存储类型: JSON 或 ARRAYS 。对我来说,我通常使用序列化数组而不是 JSON 存储。 ARRAYS,它对于未序列化的对象类/数组的性能更高,但仅限于仅用于 php(在 PHP 中具有函数序列化 && 未序列化)。所以你的选择:

您是否仅在 PHP 中使用您的数据?如果是:数组,如果不是: JSON。

您可以在下面看到更多讨论:JSON vs. Serialized Array in database。祝你好运!

【讨论】:

以上是关于在 MYSQL 中存储 JSON 数据 - 对性能的影响的主要内容,如果未能解决你的问题,请参考以下文章

如果将json格式数据存储到类似mysql这样的关系型数据库中,怎么查

mysql怎么搜索json格式的数据

在 MySQL 数据库中存储 JSON? [复制]

使用hibernate在Mysql 5.7数据库中存储/检索Json数据

为啥我在postgresql的json数据中查询,速度会比mysql慢很多

Redshift JSON 性能