给表增加一列
方案一:版本号+通用列
不足:
(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)触发器的建立,会影响原表的性能,所以这个操作建议在流量低峰期进行