本文转载自:http://www.innomysql.net/article/23959.html
(只作转载, 不代表本站和博主同意文中观点或证实文中信息)

工作10余年,没有一个版本能像MySQL 5.7那样令我激动与期盼,10月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)Roger Bamford招致麾下[1][2],收购WiredTiger存储引擎来看,每次的选择都非常正确与果断,而其Replicate Set和Shard功能对于初级用户都显得那么平易近人,而其瞄准的云数据库市场也是正确的选择。然而,在传统关系型数据库开始推出JSON支持,推出官方shard功能之后,MongoDB的市场份额将不可避免的受到影响。Facebook已经使用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

MySQL 5.7:非结构化数据存储的新选择的更多相关文章

  1. spark 解析非结构化数据存储至hive的scala代码

    //提交代码包 // /usr/local/spark/bin$ spark-submit --class "getkv" /data/chun/sparktes.jar impo ...

  2. Python爬虫(九)_非结构化数据与结构化数据

    爬虫的一个重要步骤就是页面解析与数据提取.更多内容请参考:Python学习指南 页面解析与数据提取 实际上爬虫一共就四个主要步骤: 定(要知道你准备在哪个范围或者网站去搜索) 爬(将所有的网站的内容全 ...

  3. 结构化数据(structured),半结构化数据(semi-structured),非结构化数据(unstructured)

    概念 结构化数据:即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据. 半结构化数据:介于完全结构化数据(如关系型数据库.面向对象数据库中的数据)和完全无结构的数据(如声音.图像文件等)之 ...

  4. 结构化数据、半结构化数据、非结构化数据——Hadoop处理非结构化数据

    刚开始接触Hadoop ,指南中说Hadoop处理非结构化数据,学习数据库的时候,老师总提结构化数据,就是一张二维表,那非结构化数据是什么呢?难道是文本那样的文件?经过上网搜索,感觉这个帖子不错 网址 ...

  5. Spark如何与深度学习框架协作,处理非结构化数据

    随着大数据和AI业务的不断融合,大数据分析和处理过程中,通过深度学习技术对非结构化数据(如图片.音频.文本)进行大数据处理的业务场景越来越多.本文会介绍Spark如何与深度学习框架进行协同工作,在大数 ...

  6. Scrapy系列教程(2)------Item(结构化数据存储结构)

    Items 爬取的主要目标就是从非结构性的数据源提取结构性数据,比如网页. Scrapy提供 Item 类来满足这种需求. Item 对象是种简单的容器.保存了爬取到得数据. 其提供了 类似于词典(d ...

  7. mysql命令行导入结构化数据

    数据样本 103252765-|--|-stephanie_mt@hotmail.com-|-o/35+nGaNEU=-|-ion|-- 其中|为分隔符,每行的换行符\n mysql -uroot M ...

  8. hbase非结构化数据库与结构化数据库比较

    目的:了解hbase与支持海量数据查询的特性以及实现方式 传统关系型数据库特点及局限 传统数据库事务性特别强,要求数据完整性及安全性,造成系统可用性以及伸缩性大打折扣.对于高并发的访问量,数据库性能不 ...

  9. 利用Gson和SharePreference存储结构化数据

    问题的导入 Android互联网产品通常会有很多的结构化数据需要保存,比如对于登录这个流程,通常会保存诸如username.profile_pic.access_token等等之类的数据,这些数据可以 ...

随机推荐

  1. php语言

    <?php//单行注释/*多行注释*///弱类型语言//var a=10;//php定义变量/*$a =10; //变量名前加$$b="hello";var_dump($a) ...

  2. Github团队开发集成以及eclipse集成

    温馨提示:本篇是用于团队开发协作的github,如果是单人的可以移步本系列另外一篇 集成eclipse较为简单 团队仓库目录结构 TestOrgName xxxsystem configs dbscr ...

  3. OGNL相关代码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  5. 【Win 10 应用开发】打印UI元素

    Windows App支持将UI界面进行打印的功能,这与浏览器中的打印网页的用途相近,其好处就是“所见即所得”,直接把界面上呈现的内容打印下来,比重新创建打印图像方便得多. 要在通用App中实现打印, ...

  6. Clash Detection

    Clash Detection eryar@163.com Abstract. Clash detection is used for the model collision check. The p ...

  7. JavaScript JsTree实例

    var RightTree= function () { }; RightTree.prototype = { //初始化权限树 InitRightTree: function () { $.ajax ...

  8. IOS入门之Swift语言(一)

    经过不断的努力,小哥也买了台苹果设备,终于可以开始我的IOS之旅了,说来确实令人苦恼,为了学习IOS我这着贫农阶级,省了几个月的零花钱,外加向亲朋好友求救,最终痛下心扉,卖了台MAC pro128G版 ...

  9. 使用jQuery封装实用函数

    一.引言 项目开发中,前端会有一个辅助工具类的js文件,比如cookie的操作,团队成员自己封装的方法.大多数时候,我们开发人员自己都是写一个全局函数,不考虑后期维护人员也会写相同的代码,然后造成代码 ...

  10. 应用程序框架实战三十:表现层及ASP.NET MVC介绍(一)

    本文将介绍表现层及ASP.NET MVC的一些要点,特别是ASP.NET MVC的一些抽象和封装技巧,如果你对MVC还不了解,可以参考<ASP.NET MVC4 高级编程>,作者Jon G ...