@windwolf
2020-05-20T02:32:09.000000Z
字数 598
阅读 332
Sailing
Sailing框架中, 一个比较麻烦的问题是代码中实体结构和数据库结构的同步问题. 目前, 新建了实体结构后, 后台第一次启动会自动创建数据库结构, 但数据类型匹配不佳; 而修改了实体结构后, 数据库结构并不会跟着变更. 在紧张的项目实施过程中, 习惯不佳的程序猿们会在这个地方留下无数个坑.
Sailing框架的一条原则是: 机器能做的事, 就不要靠制度. 因此, 需要提供一个数据库结构同步工具来解决这个问题.
一种朴素的办法是根据新的实体结构创建一整套内部名称的结构, 然后将现有数据导入这套结构, 最后删除原表, 并将内部名称重命名为正式名称. 这种方法能保证结构和数据的完整性, 但性能低下, 需要在整个数据处理过程中暂停对外服务, 不是十分理想.
另一个思路是直接在现有表结构中hot patch. 以下分析可行性:
实体元数据已经完整的描述了实体结构, 而数据库结构也可以通过系统表得到, 因此, 逻辑上可以通过比较这两部分来得到所有的待同步项. 目前阶段, 系统中以表为主, 视图和存储过程占少数, 那么同步工具第一步也先完成表的同步. 有关表的待同步项分以下几类:
如果能确切的知道各种数据库对以上这些操作的处理办法及影响, 就可以确定恰当的hot patch方式.