在 MySQL 中存储相当大的 JSON 对象的最佳方法是啥

Posted

技术标签:

【中文标题】在 MySQL 中存储相当大的 JSON 对象的最佳方法是啥【英文标题】:What is the best way to store a pretty large JSON object in MySQL在 MySQL 中存储相当大的 JSON 对象的最佳方法是什么 【发布时间】:2016-02-28 00:18:44 【问题描述】:

我正在构建一个 Laravel 应用程序,其核心功能由相当大的 JSON 对象驱动。 (最大的在 1000-1500 行之间)。

我知道有比 mysql 更好的数据库选择来存储文件和数据块,但由于各种原因,我需要将 MySQL 用于应用程序。

所以我的问题是,如何在 MySQL 中最有效地存储我的 JSON 对象?我不需要对保存数据的列进行任何查询,会有其他列来识别它。像这样的:

id、title、created-at、update-at、JSON-blobthingy

有什么想法吗?

【问题讨论】:

您可以将其保存为 TEXT,但我建议您更改为 MongoDB 或 Redis,因为它们是为文档存储而不是关系架构设计的。 LONGTEXT 会有所帮助 @toubou 谢谢。但我需要使用 MySQL,系统的其余部分基于关系数据模型。 @Christoffer 天哪,祝你好运:) 【参考方案1】: 如果您的 MySQL 版本为 5.7.8 或更高版本,则可以使用 JSON 数据类型。 您可以将 JSON 文件存储在服务器上,并通过 MySQL 简单地引用其位置。 您也可以使用TEXT types 之一。

【讨论】:

只要他不需要对存储的 JSON 进行任何查询,我会直接转到 TEXT 类型。小心不要索引该列。 LONGTEXT 会有所帮助。 我希望他们可以将服务器更新到 >= 5.7.8。尽管如此,我认为在存储 JSON 时不必验证它,因为我将在创建和解析它时通过模式验证它。此外,我真的需要一种简单巧妙的方式将其绑定到应用程序关系结构中。所以我现在可能会选择Text。谢谢!【参考方案2】:

我能给出的最佳答案是使用 MySQL 5.7。在此版本上,支持新的列类型 JSON。它可以很好地处理大型 JSON(显然)。

https://dev.mysql.com/doc/refman/5.7/en/json.html

【讨论】:

【参考方案3】:

如果您不需要可搜索的数据,您可以在插入数据之前对其进行压缩。我正在为此使用“zlib”库

【讨论】:

【参考方案4】:

简单地说,您可以使用类型longblob,它可以为包含大型 JSON 对象的列处理多达 4GB 的数据,您可以在其中插入、更新和读取该列,就像它是文本或其他任何内容一样!

【讨论】:

以上是关于在 MySQL 中存储相当大的 JSON 对象的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

从一个大的 json 变量到对象

在Python和MySQL中存储科学记数法的最有效方法

(预)处理存储在 json 中的大型数据集的最有效方法是啥?

mysql数据库索引和视图,触发器

如何定义一个表来存储 MySQL 数据库中的 JSON 对象?

查询存储在 MySQL 中的多级 JSON 对象