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

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

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

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

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

【问题讨论】:

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

标签: php mysql json database


【解决方案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。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2011-11-08
      • 1970-01-01
      • 2014-12-08
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多