架构师之路——为表增加一列属性

给表增加一列

方案一:版本号+通用列

在这里插入图片描述
不足:
(1)ext里的字段无法建立索引

(2)ext里的key值有大量冗余,建议key短一些

方案二:通过扩展行的方式来扩展属性


不足:

(1)key值有大量冗余,建议key短一些

(2)本来一条记录很多属性,会变成多条记录,行数会增加很多

方案三:提前预留一些reserved字段

预留过多,会造成空间浪费,预留过少,不一定达得到扩展效果。

方案四:通过增加表的方式扩展列,上游通过service来屏蔽底层的细节。

UserExt(uid, newCol1, newCol2)就是这样的方案

方案五:“新表+触发器+迁移数据+rename”
基本原理:

1、先创建一个扩充字段后的新表user_new(id,name,passwd,age,sex)。
2、在原表user上创建三个触发器,对原表user进行的所有insert/delete/update操作,都会对新表user_new进行相同的操作。
3、分批将原表user中的数据insert到新表user_new,直到数据迁移完成。
4、删掉触发器,把原表移走(默认drop掉)。
5、把新表user_new重命名成user。

操作过程中需要注意:

(1)变更过程中,最重要的是冲突的处理,一条原则,以触发器的新数据为准,这就要求被迁移的表必须有主键(这个要求基本都满足)

(2)变更过程中,写操作需要建立触发器,所以如果原表已经有很多触发器,方案就不行(互联网大数据高并发的在线业务,一般都禁止使用触发器)

(3)触发器的建立,会影响原表的性能,所以这个操作建议在流量低峰期进行

发布了128 篇原创文章 · 获赞 0 · 访问量 2504

猜你喜欢

转载自blog.csdn.net/qq_41134008/article/details/105488852