关于 MySQL 中 JSON 你需要知道的

MySQL 添加 JSON 数据类型使其关系数据库更易于使用,并模糊了 SQL 和 NoSQL 数据库之间的界限。
484 位读者喜欢这篇文章。
A light with lights around it

Opensource.com

很久以前,只有一台计算机。后来有人制造了第二台,并想从第一台计算机上获取一些代码。这意味着我们需要一种在不依赖底层硬件的情况下移动信息的方式。从那时起,出现了许多字符编码和交换标准(ASCII、EBCIDIC、SGML、XML 等),它们都曾风靡一时。在过去的几年里,JavaScript 对象表示法 (JSON) 一直是最流行的。

在 MySQL 5.7 之前,你可以将 JSON 格式的文档存储在字符字段中。但是,大型字符串难以搜索,并且编写正则表达式来查找字符串中的值可能会让人感到沮丧。而且,如果你更改了字符串的某一部分,则必须重写整个字符串,这非常低效,但在 MySQL 5.6 之前是必要的。

MySQL 中的 JSON

MySQL 在 MySQL 5.7 中引入了原生的 JSON 数据类型。因此,就像整数、字符或实数一样,出现了一种将整个 JSON 文档存储在数据库表的列中的方法——并且列中的这个文档大小可以达到大约 1GB!服务器将确保它是一个有效的 JSON 文档,然后以针对搜索优化的二进制格式保存它。这种新的数据类型可能比任何其他功能都更能促使 MySQL 升级。

MySQL 8 现在处于开发者里程碑版本,并将添加一些新函数和功能。

该数据类型还附带 20 多个函数。这些函数将从文档中提取键值对、更新数据、提供有关数据的元数据、以 JSON 格式输出非 JSON 列等等。而且它比 REGEX 更容易让人接受。

MySQL 8 现在处于开发者里程碑版本,并将添加一些新函数和功能。JSON_PRETTY_PRINT 函数将格式化输出,使其更易于阅读。并且在重写部分数据而无需重写整个文档的方式上将有重大改进。

讽刺,不是吗?

以非格式化方式保存数据被认为是 NoSQL 功能。许多关系数据库(如 Oracle、SQL Server、Postgresql 等)都添加了 JSON 数据类型,模糊了 NoSQL 和 SQL 数据库的定义。

文档存储为何重要

在 JSON 数据类型出现后不久,就出现了 MySQL 文档存储功能。它是为不了解结构化查询语言 (SQL) 但又想使用数据库的开发人员设计的。

开发人员创建数据集合,并根据需要在所选编程语言(Java、JavaScript、Node.JS、Python、C++ 以及更多语言正在开发中)中对数据执行创建、删除、更新和删除 (CRUD) 功能。开发人员不需要了解 SQL,可能也不关心 SQL 是否在幕后为他们完成,以及他们的数据是否保存在 JSON 列中。这样,他们就可以保存和使用数据,而无需开发规范化的数据库表、设计数据架构或在等待数据库管理员建立数据存储时无所事事。许多项目开始时都不知道数据的样子,并将通过演进数据来适应当前情况。

如果需要从这些 JSON 文档中获取老式的关系数据,则可以轻松地将各种键提取到生成的列中以进行标准 SQL 工作,然后为生成的列建立索引以进行快速搜索。

缺点

JSON 是一种以非正式方式存储数据的好方法。但是关系数据库在规范化的数据上蓬勃发展,所有信息都被规范化为更小的组件,以提高访问速度。此外,对数据可能缺乏严格的要求,例如,当记录电子邮件地址的字段可能被键入为 emaileMaile-mail 或其他变体时。但是,有很多令人信服的理由可以忽略严格性,只要你明白你可能会在未来遇到这个陷阱。

如果你准备好尝试一下,下载 MySQL,并且在下载的同时,下载 MySQL Workbench,因为它支持 JSON 列。而且两者都是免费的!

标签
Dave Stokes
Dave Stokes 是 Percona 的技术布道师,《MySQL & JSON - 实用编程指南》的作者。Dave 对数据库和教学充满热情。他曾在从 American Heart Association 到 Xerox 的公司工作,工作范围从反潜战到 Web 开发人员。

3 条评论

感谢这篇精彩的概述文章!我正在摆弄一个项目,有了 MySQL 中的 JSON,这个项目将会变得*容易*很多。还有很多细节需要处理,但这真是一个很好的起点。:)

很棒的文章!

应该是 Create-Read-Update-Delete 啦 :-)

很棒且富有洞察力的文章!

开头“很久以前,只有一台计算机。后来有人制造了第二台,并想从第一台计算机上获取一些代码。”感觉像进入了“星球大战”电影。

感谢分享!

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可发布。
© . All rights reserved.