MySQL 5.7:非结构化数据存储的新选择
本文转载自: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功能。所以,各位小伙们,还在等什么呢?
参考文献
- https://www.mongodb.com/press/roger-bamford-joins-mongodb-inc-distinguished-architect
- http://www.businessinsider.com/mongodb-poached-top-oracle-engineer-2014-7
MySQL 5.7:非结构化数据存储的新选择的更多相关文章
- spark 解析非结构化数据存储至hive的scala代码
//提交代码包 // /usr/local/spark/bin$ spark-submit --class "getkv" /data/chun/sparktes.jar impo ...
- Python爬虫(九)_非结构化数据与结构化数据
爬虫的一个重要步骤就是页面解析与数据提取.更多内容请参考:Python学习指南 页面解析与数据提取 实际上爬虫一共就四个主要步骤: 定(要知道你准备在哪个范围或者网站去搜索) 爬(将所有的网站的内容全 ...
- 结构化数据(structured),半结构化数据(semi-structured),非结构化数据(unstructured)
概念 结构化数据:即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据. 半结构化数据:介于完全结构化数据(如关系型数据库.面向对象数据库中的数据)和完全无结构的数据(如声音.图像文件等)之 ...
- 结构化数据、半结构化数据、非结构化数据——Hadoop处理非结构化数据
刚开始接触Hadoop ,指南中说Hadoop处理非结构化数据,学习数据库的时候,老师总提结构化数据,就是一张二维表,那非结构化数据是什么呢?难道是文本那样的文件?经过上网搜索,感觉这个帖子不错 网址 ...
- Spark如何与深度学习框架协作,处理非结构化数据
随着大数据和AI业务的不断融合,大数据分析和处理过程中,通过深度学习技术对非结构化数据(如图片.音频.文本)进行大数据处理的业务场景越来越多.本文会介绍Spark如何与深度学习框架进行协同工作,在大数 ...
- Scrapy系列教程(2)------Item(结构化数据存储结构)
Items 爬取的主要目标就是从非结构性的数据源提取结构性数据,比如网页. Scrapy提供 Item 类来满足这种需求. Item 对象是种简单的容器.保存了爬取到得数据. 其提供了 类似于词典(d ...
- mysql命令行导入结构化数据
数据样本 103252765-|--|-stephanie_mt@hotmail.com-|-o/35+nGaNEU=-|-ion|-- 其中|为分隔符,每行的换行符\n mysql -uroot M ...
- hbase非结构化数据库与结构化数据库比较
目的:了解hbase与支持海量数据查询的特性以及实现方式 传统关系型数据库特点及局限 传统数据库事务性特别强,要求数据完整性及安全性,造成系统可用性以及伸缩性大打折扣.对于高并发的访问量,数据库性能不 ...
- 利用Gson和SharePreference存储结构化数据
问题的导入 Android互联网产品通常会有很多的结构化数据需要保存,比如对于登录这个流程,通常会保存诸如username.profile_pic.access_token等等之类的数据,这些数据可以 ...
随机推荐
- Clang Format
1,最近项目代码要求规范化,在网上找了个Xcode插件:Clang Format ,下载地址:https://github.com/travisjeffery/ClangFormat-Xcode 2, ...
- Hibernate增删查改语句
我用的数据库是MySQL,实体类叫Product create table Product ( proId integer not null auto_increment, proName varch ...
- fir.im Weekly - 除了新 MacBook Pro,近期值得关注的移动开发好资源
最近,最引人瞩目的莫过于 Apple 产品发布会,MacBook Pro 的更新可能是四年来变化最大的一版.除了更轻.更薄.性能更好.电力更足之外,最大的变化是加入了Touch Bar,被定义为 Ma ...
- hbase 1.1.7在centor6.5安装过程
1.自己安装的最新版一直没成功,换成了1.1.7稳定版的.中间遇到的问题记录下 1) jdk 用的1.7版本的,安装过程省略. 2)下载hbase zip包:https://mirrors.tuna ...
- Entity Framework Core 1.1 Preview 1 简介
实体框架核心(EF Core)是Entity Framework的一个轻量级,可扩展和跨平台版本. 10月25日,Entity Framework Core 1.1 Preview 1发布了. 升级到 ...
- Building OpenCASCADE on Debian
Building OpenCASCADE on Debian eryar@163.com Abstract. When you are familiar with OpenCASCADE on Win ...
- 应用程序框架实战三十:表现层及ASP.NET MVC介绍(一)
本文将介绍表现层及ASP.NET MVC的一些要点,特别是ASP.NET MVC的一些抽象和封装技巧,如果你对MVC还不了解,可以参考<ASP.NET MVC4 高级编程>,作者Jon G ...
- Visual Studio 2015无法进行Package Restore的原因和解决方案
这篇文章是记录在我的当前电脑上面,安装Visual Studio 2015 Community Edition出现的无法进行Package Restore的问题,很可能在你的电脑上面无法重现.我的环境 ...
- ASP.NET MVC Application_Error 无效不执行
我们一般在开发 ASP.NET MVC 应用程序的时候,会在 Application_Error 中添加异常日志记录,一般会记录 500 的错误信息,但如果应用程序在出错的时候,Application ...
- 【记录】ASP.NET MVC JsonResult JsonRequestBehavior AllowGet
JS Ajax 调用代码: $.ajax({ url: "/AjaxController/GetInfoById", type: 'GET', datatype: "js ...