MySQL 5.7:非结构化数据存储的新拔取

本文转载自:http://www.innomysql.net/article/23959.html

(只作转载, 不代表本站和博主同意文中观点或证实文中信息)

行事10余年,没有一个本子能像MySQL 5.7那样令自个儿触动与期盼,7月MySQL 5.7
GA版本的发表,意味着MySQL数据库终于有能力在传统集团中向商业数据库发起挑战,开源的Linux操作系统干掉了封闭的Unix系统,MySQL会不会再一回翻盘商业产品?近来来看,或者很难,不过机会已经领会在团结左手,后边的上进就看MySQL团队能无法把控住种种内在或外在的挑战了。然,不论怎么说,MySQL
5.7的原生JSON功用辅助给非结构化数据存储的急需牵动了全新的、更优的取舍。

首先来看维基百科对非结构化数据的概念:

Unstructured Data (or unstructured information) refers to information
that either does not have a pre-defined data model or is not organized
in a pre-defined manner.

非协会数据的特色就是未曾事先定义好的数据模型,而古板关系型数据库的渴求自然是概念好表结构,那就招致了古板关系型数据库在非结构化数据存储方面相比弱势的身份,从而给了其余NoSQL数据库机会。随着非结构化数据须要的疾速发展,例如MongoDB那样的的文档型、非社团数据存储的数据库获得了高大的反战。

好在观念的关系型数据库厂商都发现到了这些难点,都在风行的本子中提供了对于非协会话数据存储作用的支撑:

传统关系型数据库 支持JSON格式的版本
MySQL 5.7
Oracle 12.0.1
Microsoft SQL Server 2016
PostgreSQL 9.3

主流的关系型数据库都起来原生支持JSON格式,那么用户还亟需MongoDB那类的NoSQL数据库吗?MongoDB是自我相当看好的数据库,从其将Oracle
RAC之父(Founding Father for Oracle’s Real Application Clusters)罗吉尔Bamford招致麾下[1][2],收购WiredTiger存储引擎来看,每一次的接纳都非常不利与果敢,而其Replicate
Set和Shard功能对于初级用户都呈现那么亲和,而其瞄准的云数据库市场也是没错的选料。不过,在观念关系型数据库开端推出JSON帮衬,推出官方shard效能之后,MongoDB的市场份额将不可防止的面临震慑。非死不可已经使用MySQL数据库存储非社团数据了,随着年华的延期,相信将来如此的案例会进一步多,或然二零一七年的OOW大会上可能就会看出。

JSON最早是用来在服务器和次序间开展数据调换的一种标准格式,相对于XML结构其可读性更强,占用空间更小,在REST架构下深受程序员们的欢迎。而MongoDB和CouchBase那样的文档数据库使用JSON来囤积非结构化数据(半结构化数据),使得JSON在非结构化数据存储那上头成为了专业格式之一。
而是,每种关系型数据库对于JSON的底层帮助也各不同。MongoDB是透过BSON来拓展仓储数据,MySQL和PostgreSQL也近乎,通过丰硕新的JSON存储方式来支撑,那样的便宜是在得到JSON对象的某字段时得以直接在底部得到,不要求在上层处理。而Oralce、SQL
Server都是透过大目的类型,如LOB来囤积JSON数据,借助于约束来进行JSON存储的可行检查。

随即看一下如何在风行的MySQL数据库中运用原生的JSON格式:

1
2
3
4
CREATE TABLE UserJson(
 uid BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 data JSON
 );

使用就是那样简单,接着就同意以JSON格式插入非结构化数据,比如:

1
2
INSERT INTO UserJson(uid,data) VALUES (NULL,'{"name":"David",”address”:”Shanghai …”}');
INSERT INTO UserJson(uid,data) VALUES (NULL,'{"name":"Jim",”passport”:”E02318883”}');

在MongoDB中允许对非结构化数据中的某个字段创制索引,MySQL也全然可以形成,唯一差别的是率先须要创建一个新的虚拟列,然后对这几个列举办索引的成立,对于地点的表UserJson需要name字段创制索引,能够按如下步骤进行:

1
2
3
ALTER TABLE UserJson ADD COLUMN name VARCHAR(128)
AS (json_unquote(json_extract(data,"$.name"))) VIRTUAL;
ALTER TABLE UserJson ADD INDEX idx_name (name);

MySQL
5.7对于JSON的支撑是比较完好的,个人认为完全可以替换新浪脚下线上的MongoDB数据库,因为和讯杭研有尤其成熟的MySQL中间件的DDB,和MySQL
5.7匹配使用,完全可以达到MongoDB的Replicate
Set和Shard功用。所以,各位小伙们,还在等怎样吗?

参考文献

  1. https://www.mongodb.com/press/roger-bamford-joins-mongodb-inc-distinguished-architect
  2. http://www.businessinsider.com/mongodb-poached-top-oracle-engineer-2014-7

 

网站地图xml地图