✅项目中需要应用发布和ddl变更,需要如何保证不出错?
典型回答
项目发布的时候,是先升级程序,还是先执行ddl的sql
一般是先执行DDL变更,比如增加索引,或者新增字段,要先把DDL变更发布了,然后再发布代码,这样的话不会有报错,如果先发布代码,会因为DDL未变更导致字段找不到的问题。
要不要做个开关,来兼容ddl的sql变更
一般来说不需要,因为大部分公司是不允许删除字段的,DDL变更也必须要向下兼容,所以不太需要这个开关。
如果是不兼容变更,那么就可以做个开关,但是这样的话代码就很复杂。。。不建议
超大表的ddl的sql执行,需要注意什么?
不要在业务高峰期执行,因为虽然MySQL 5.6中支持ONLINE DDL了,DDL过程中不会锁表了。但是Online DDL 在执行过程中会占用系统资源,如 CPU、内存和 I/O。这可能会对数据库的性能产生一定影响,尤其是在数据量较大的情况下。
在Spring Boot中,使用JPA来自动更新数据库表结构,推荐吗?
那肯定是不推荐啊!
在生产环境中,直接使用 ddl-auto=update 存在风险。复杂的表结构变更(如字段重命名、大规模数据迁移、索引变更等)可能会引发数据丢失或性能问题。
使用 ddl-auto=update 时,数据库变更的历史没有被记录下来,难以追踪变更的具体原因和执行时间。这对于维护和调试会带来困难。
有些变更(如外键关系的修改、大规模数据迁移、触发器等)无法通过 JPA 的自动更新来完成,需要手动编写 DDL 脚本。