官方文档:
经验之谈
表结构变更
由于需求的变化,表结构在不同版本之间会有变更,此时会出现历史数据类型变更或者目标sql与数据库实际表结构不匹配的情况。我们自然需要处理这种情况,大体目标是
- 维护好用户的历史数据
- 若某列的类型发生变更,如
String -> Int
orInt -> String
, 需要通过映射文件转化对应的值,这一步我们称之为数据迁移
- 若某列的类型发生变更,如
- 需要对齐表结构,add/drop/modify 对应的列。以上的修改都是基于alter语句
alter table xxx add column if not exists column_name column_type DEFAULT xxx
alter table xxx drop column if exists column_name
alter table xxx modify column column_name column_type DEFAULT xxx
数据量很大,每一个操作都需要慎重,且由于设计到全量分区数据的重建,部分操作 如 drop / modify 是很heavy的同步突变操作。
在表结构更新期间,我们认为整个系统是不可用的,要尽量优化表结构更新的时间。
add column
最简单且不费力的操作是新建一列,几乎立即完成。
drop column
我们先来看看drop column的描述: