mysql扩展表_MySQL表设计之拓展列?

面对需求变更,如何优雅地在已有千万级的MySQL表中增加字段?本文介绍了两种策略:1. 主键+通用json字符串列,允许动态扩展但存在冗余和索引问题;2. 主键+业务code+通用json字符串列,通过业务code区分,解决了数据冗余问题,但可能导致行数增加。
摘要由CSDN通过智能技术生成

缘起:

由于需求变更,线上某些千万级表需要增加字段,而且这种需求还挺常见,怎么搞?

alter table add column?不太可行,锁表时间长

新表+触发器?如果数据量太大,新表不一定装得下,何况触发器对数据库性能的影响比较高

让dba来搞?新表,迁移数据,一致性校验,rename?dba真苦逼

本文介绍工作中使用的两种小技巧

方案一:主键+通用json字符串列

user_extend_info(uid, create_time,update_time, ext)

uid

Create_time

Update_time

ext

111

1577151832830

1577151832830

{"name":"lisa","age":66}

112

1577151832830

1577151832830

{"name":"lisi","age":26}

由于拓展字段是一个json串,java中可以通过fastJson工具解析,通过对应的bean来解析,如果版本升级,某些key不使用,可以直接将bean的这些字段删掉,解析来的对象是不包含这些额外字段的,再序列化到数据库。

反序列化:JSON.parseObject(str, clazz)

序列化:JSON.toJS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值