缘起:
由于需求变更,线上某些千万级表需要增加字段,而且这种需求还挺常见,怎么搞?
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