mysql json字段的使用与意义
MySQL 5.7.8开始支持json字段类型,并提供了不少内置函数,通过计算列,甚至还可以直接索引json中的数据!
如果还不了解基础的可参看 mysql json快速入门
为何说json原生支持非常关键呢,不是可以自己在客户端处理json然后保存字符串到mysql不就完了?
来看一看,原生支持到底有什么意义
create table t (
id int not null,
js json not null,
PRIMARY KEY (id)
)
1.可以直接过滤记录
select * from t where js->'$.a'=100
避免了要将所有记录都读取出来,在客户端进行过滤。
2.可以直接update,而无须先读取
update t set js=json_set(js,'$.a',js->'$.a'+1) where id=1
单条原子更新
update t,t1 set t.js=json_merage(t.js,t1.js) where t.id=t1.id
跨表更新
3.可以在一条SQL中完成多条纪录的修改!
update t set js=json_set(js,'$.a',123) where id in(1,2)
没有原生的支持,这个是很难实现的。
4.通过json类型,完美的实现了表结构的动态变化
除了一般意义上的增加表字段,还包括嵌套其他对象与数组
update t set js=json_array_append(js,'$.sonAry',123) where id =1
增加一个子节点到sonAry中,无须子表。
5.通过计算生成列在json上建立索引
CREATE TABLE j1 (
id int(11) NOT NULL,
js json NOT NULL,
s varchar(45) CHARACTER SET utf8mb4 NOT NULL,
a int(11) GENERATED ALWAYS AS (json_extract(js,'$.a')) STORED,
PRIMARY KEY (id),
KEY i_a (a)
)
通过a这个生成列(json_extract(js,'$.a'))上建立索引,
可以利用mysql的索引来快速定位。
json_extract还可利用path的通配符,发掘更多类型索引。
甚至还可利用JSON_CONTAINS/JSON_CONTAINS_PATH来建立索引。
这里可以组合出很多
与MongoDB的差异
1.mongodb会自动建立表
也就是可以动态增加表,这点mysql还是必须先定义表
2.大部分查询插入更新操作,因为mysql json支持,两者没有什么功能差别了
但是就查询来说,mysql的SQL语法,特别是json_extract的简写模式,可读性比mongodb的要强不少
3.mongodb实际用牺牲事务性降低系统复杂度来实现高性能
这方面,要看用户使用场景,很难说优势还是劣势
4.对于大数据的支持
mongodb在大数据支持上做的比较好,特别是数据分片,高可用上基本内置实现了
mysql这方面也在不断完善
其差异主要还是在一致性上的选取,弱一致性导致容易分布处理,而强一致性则复杂很多.
我们可以假设,关系数据库设计之初如果放弃强一致性,那么这方面,mongodb等nosql实际也不会有任何优势.
从未来趋势来看,
强一致性方面,传统关系数据库始终是唯一最佳选择,而且通过支持json,把以前Nosql的一些优势也可以纳入到自己体系中.
对于固定的字段,显然传统的表处理方式性能更优,而对于动态字段放置独立的json字段中,也可以很好的适应这类需求.
弱一致性方面,NoSQL更擅长一些,传统关系数据库则可以在应用层面通过多实例数据库的分布方式来实现(来降低一致性提高数据吞吐量).
而在大分布式方面最终一致性方面,传统关系数据库缺乏直接支持,但还是可以通过应用层来实现,
而很多NoSQL也在不断完善这方面的功能.
我们期待一个基础关系数据库,每个实例提供强一致性的事务,易用的SQL,并对动态数据作出很好的支持.
并在实例之上有一个分布式的层,可以聚合大量数据库实例,并协助用户实现最终一致性,
这样就比较完美了.
mysql json字段的使用与意义相关推荐
- MySQL · 最佳实践 · 如何索引JSON字段
概述 MySQL从5.7.8起开始支持JSON字段,这极大的丰富了MySQL的数据类型.也方便了广大开发人员.但MySQL并没有提供对JSON对象中的字段进行索引的功能,至少没有直接对其字段进行索引的 ...
- thinkphp mysql json数据类型_ThinkPHP:JSON字段类型的使用(ORM)
ThinkPHP5.1版本正式发布已经有一段时间了,我会陆续给大家介绍其中的新特性.今天要给大家介绍的是一个可能很多用户还不了解的一个特性:JSON字段数据支持.不过首先注意一点,本篇内容中描述的JS ...
- mysql修改虚拟列属性失败_mysql虚拟列(Generated Columns)及JSON字段类型的使用
mysql 5.7中有很多新的特性,但平时可能很少用到,这里列举2个实用的功能:虚拟列及json字段类型 一.先创建一个测试表: drop table if exists t_people; CREA ...
- mysql虚拟列(Generated Columns)及JSON字段类型的使用
mysql 5.7中有很多新的特性,但平时可能很少用到,这里列举2个实用的功能:虚拟列及json字段类型 一.先创建一个测试表: 1 2 3 4 5 6 7 8 9 drop table if ex ...
- mongodb mysql json数据_使用MongoDB与MySQL有很多JSON字段?
所以,直接回答问题- Shall we chose mongodb if half of data is schemaless, and is being stored as JSON if usin ...
- mysql json 创建索引_MySQL · 最佳实践 · 如何索引JSON字段
概述 MySQL从5.7.8起开始支持JSON字段,这极大的丰富了MySQL的数据类型.也方便了广大开发人员.但MySQL并没有提供对JSON对象中的字段进行索引的功能,至少没有直接对其字段进行索引的 ...
- MySQL为JSON字段创建索引(Multi-Valued Indexes 多值索引)
版权说明: 本文由博主keep丶原创,转载请注明出处. 原文地址: https://blog.csdn.net/qq_38688267/article/details/119383103 环境说明: ...
- MySQL查询 json 字段中是否包含某个value
MySQL查询 json 字段中是否包含某个value 方法一: 1.简单版本 :查询json的key SELECT * FROM 表名 where 字段名 -> '$.json中的key' = ...
- Mybatis实现存取Mysql的Json字段映射Java对象
Mybatis实现存取Mysql的Json字段映射Java对象 一.需求 二.解决方案 一.需求 在业务比较复杂的项目模块,为了应对多样化的场景,我们通常会在mysql中采用json格式来存储相应的信 ...
最新文章
- Java中多线程的六种状态详解
- 抓住金三银四好机会,超齐全java大厂面试题汇总(请自寻学习查找答案)
- Document for the hackthon
- SAP BTP 平台 Cloud Application Programming 编程模型概述
- leetcode 461. 汉明距离(位运算)
- 微信小程序 获取OpenId
- N - 嘤嘤嘤 (并查集+枚举)
- 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树
- 如何顺势用优势找到机会赚钱?
- 读书_w3c架构师01通用设计与方法论
- 特殊权限suid,sgid,sticky和acl(访问控制列表)参数详解
- ABAP-内表数据下载到CSV格式(原创转载请注明)
- 测绘工程野外测量实践实习
- 思科服务器如何修改启动项,思科配置tftp服务器
- 为什么 iPhone 的原装充电线容易坏?
- win7打开计算机一片空白,Win7系统打开文件夹查看选项发现一片空白怎么办
- 苏格拉底的爱情与婚姻观
- 当电竞在亚运会绽放,玩家也从此有了信仰
- python实现键盘自动输入_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...
- Eclipse SWT 创建项目(一)
热门文章
- MySQL error writing file 错误
- python模块-paramiko
- 用css去除chrome、safari等webikt内核浏览器对控件默认样式
- dfs Codeforces Round #356 (Div. 2) D
- 【EhCache】Java缓存框架使用EhCache结合Spring AOP
- 在Tomcat中通过JOTM支持JTA
- 美国Hack the Army 3.0 漏洞奖励计划启动
- Windows XP、Windows Server 2003 等微软操作系统的源代码被指遭泄露
- Stringlifier:Adobe 开源日志清理和凭据暴露检测工具
- vmware虚拟机上的centos安装Hadoop,以及在本地eclipse上运行mapReduce项目,并将文件输出到HDFS中...