MySQL添加的JSON数据类型让关系数据库用起来更简单,并且模糊了SQL和NoSQL数据库的界限

从前有了一台电脑,然后有人built了第二台电脑,并且想要一些第一台电脑上的代码。这就意味着我们需要一种不借助底层硬件的方式来移动信息。从那以后,有了好多编码格式以及交互标准(ASCII,EBCIDIC,SGML,XML,etc),在历史长河上都有他们的闪光点。在过去的这些年,JSON(JavaScript object notation)一直是最流行的。

在MySQL5.7之前,你可以在字符字段中用json格式来储存文件,但是大的字符串查询起来的时候非常乱,并且写正则表达式(regular expressions)在字符串中查找结果可是一个不爽的体验。并且,如果你修改了字符串中的一部分,那么你必须重写全部的字符串,这绝对是非常低效率的!但是在MySQL5.6中你必须这么做。


JSON in MySQL





在MySql 5.7中 MySql介绍了一个原生的(native)的json数据类型。就像一个整型,一个字符类型,或者一个实数,这就有了在数据库中,用表的一列来储存一个完全的json文件——并且这一列的文件的size甚至可以达到1个G!这个服务将会确保这是一条json文件是有意义并且用一种适合搜索的二进制方式储存。这种新的数据类型对MySql的更多更新来说可能比其他特性更有保障。(太绕口了,大体就是以后mysql会对这个做更多的更新兼容)

这种数据类型也伴随着超过二十个函数的到来。这些函数将会从文档中提取出键值对(k-v 对),更新数据,提供关于数据的元数据,用json格式输出非json列等等,并且这个比正则表达式简单多咯。

MySql 8 现在正在开发里程碑版本,并且加了一些新的函数和功能.JSON_PERETTY_PRINT函数将会格式化输出,从而使输出的更清晰。并且将会有一个重大的改进——重写数据的时候不用重写全部的文件!




讽刺意味的是什么呢?




在非格式化的方式中储存数据是NoSQL的特性,但是许多关系数据库——比如Oracle,SQL Server,Postgresql,等等其他的。都增加了Json数据类型,模糊了NoSQL跟SQL数据库的界限。




为什么储存文件这么重要呢?




在JSON数据类型出现不久,MySQL文档储存特性就兼容了。它是为不了解结构化查询语言(SQL)但又想要使用数据库的开发人员设计的。开发者创建了数据集合,并在需要的编程语言(java,JavaScript,node.js,Python,C++等)上执行创建,读取查询(原文用了remove,应该是用错了),更新,删除(CRUD)这些函数。当他们的数据被保存为JSON格式的列的时候,开发者不需要知道具体SQL的知识,或者说不用关心在显示屏后面正在为他们执行的SQL。这样他们就可以储存跟使用数据,而不是必须去建立正规化的数据库表,架构他们的数据,或者在等待数据库管理员建立数据库的时候转转手指(开玩笑)。


许多工程在开始的时候不知道数据长啥样,但是可以通过改进数据来适应当前的环境。如果从这些JSON文档中需要老式的关系数据,那么可以很容易地将各种键提取为标准SQL工作的生成列,然后索引生成的列以进行快速搜索。




缺点




JSON是一种非正式储存数据的好方式。但是关系数据库在标准化数据上很有强大,所有的数据都被标准化到小组成部分中来提高访问速度。并且,有的数据可能缺乏应用的严格性,比如当记录一个电子邮件地址的时候,key值可能是email,eMail,e-mail,或者其他变体。只要你明白,你可能在这条路上遇到问题,那么就有许多令人信服的理由可以(让你)忽略其严格性。