mysql操作json优点和缺点_mysql如何使用json便于开发?

谢邀

json作为一种自带结构的文本使得结构信息与可以与数据库解耦。

这句话稍微有点绕口,我们慢慢解释。

首先在不使用json的时候,如果我们要设计一个User对象。则数据表中的信息如下:

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`email` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

);

那我们设计的这个系统的User的结构信息是这样传递的:表现层(html/css/anjular/reace/vue……):根据需求展示用户对象各个属性

模型层(java/php/c++/pyhton……):处理用户对象

DAO层(Mybatis/Hibernate……):完成对象关系的映射

持久层(MySql/SqlServer……):对各个字段进行存储

因此我们可以看到,在这个系统中,User对象的结构信息是从表现层到持久层是完全贯通且一致的。这样的优点是提高了一致性,使得代码更容易阅读。但有一个重要的问题:耦合太高,扩展不不友好。

假设我们要增加给User对象增加一个属性age。那我们各个层都要进行修改,例如数据库层结构需要修改为:

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`email` varchar(255) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

);

同时,其他各层都要进行修改。

而引入json进行存储之后。假设我们将主要信息字段id、name字段进行保留,而次要信息字段转为json。则数据表中的信息变为:

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`detail` json(255) DEFAULT NULL,

PRIMARY KEY (`id`)

);

对于已经放入detail中的次要信息而言,User的结构信息是这样传递的:表现层(html/css/anjular/reace/vue……):根据需求展示用户对象各个属性

模型层(java/php/c++/pyhton……):进行json结构与模型的映射

DAO层(Mybatis/Hibernate……):无需完成属性与字段的映射

持久层(MySql/SqlServer……):无需了解字段详情

这样,使得User的次要结构信息可以与数据库解耦。当User中再增加一个属性age时,我们只需要在模型层增加一个age属性,甚至连序列化操作都不需要变动就可以直接在表现层进行使用。

NoSql数据库中的文档数据库便多用json进行数据存储,来实现与对象结构的解耦。而Mysql中使用json类型,其实是向这种方式的一种靠拢。我们可以:将经常查询的属性采用独立字段

将不经常查询且变动频繁的字段存入json中

从而实现运行效率和可扩展性之间的平衡。

—END—

分享让你从程序员进阶架构师的原创干货!

欢迎关注我,不错过每期的原创干货!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值