温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
Java ENT改一个字段为什么完全不能代表生产数据库已经安全升级?今天用派特克的斯马版本话把这个问题拆开。先看三种职责,D dl oto只适合本地开发,Skima sel每次全量重建,Flyaway和base才面向增量迁移。生产必须选迁移工具。那hibernate自动建表不是更快吗?我改完NTT重启字段就出来了,为什么还要单独写迁移脚本?因为自动建表部记录版本也不处理已有数据。我们选FLY位,建立V1基线,V2加字段,V3加约束和索引。每次变更都有明确版本链。应用启动时,执行migration失败就阻止启动。这样不会出现代码已经跑起来,数据库结构还停在旧版本的情况。那如果迁移脚本写错SQL应用是不是直接起不来?这对开发环境会不会太严格了?
01:06
对故意制造错误CQL验证失败机制正是为了暴露问题。开发环境快速失败比生产环境半夜报警要便宜得多。百万数据表不能直接加非空约束,要先加可空字段回填数据,再收紧约束,这就是expand contract的兼容升级思路。迁移脚本要进CICD,先在愈发环境跑一遍,再上生产。数据库回滚比代码回滚复杂,因为数据可能已经被新结构改写。所以代码回滚可以一键切版本,数据库回滚却要写反向脚本,还可能丢数据,这就是为什么不能只靠entity变更。最小落地way管版本,V1机线、V2加字段,V3加约束和索引启动执行CI预演生产前备份。
02:03
Entity只是代码视图数据库是带数据的独立系统。版本化迁移、兼容升级失败阻断才是安全升级的完整闭环。
我来说两句