本文讲解4.0版jxTMS的周期性自动分表,整个系列的文章请查看:docker版jxTMS使用指南:4.0版升级内容
docker版本的使用,请参考:docker版jxTMS使用指南
考虑到简化管控的需要,自动分表功能放到了数据类定义中:在data文件中定义数据类时,增加了一个rename指示。然后做热机刷新即可实现周期性的自动分表。
可查看tms容器的【/var/chroot/home/demoOrg_2255/codeDefine/demo2/main/data】中VRS20Data数据类的定义:
class VRS20Data rename day:
相比之前的数据类定义,多了【rename day】指示。其中的rename指示VRS20Data数据表要执行周期性分表,day指示是以天为周期。则每天凌晨零点,前一天的VRS20Data会被命名为
VRS20Data_2023_05_18
同时会生成完全相同的VRS20Data表,同样的列定义、同样的索引。
注1:rename可以添加给已经定义好的任何数据类,更新data文件后,热机刷新后即生效;新表自动创建后,自动分表也自动生效。即分表功能是读取数据类后保存相关信息,然后每天零点来做的,不管是已经建立的数据表,还是新增加的数据表
注2:之前介绍data文件中定义的数据类时曾指出过,热机刷新后就会创建对应的数据表;之后再修改数据类的定义,数据表不会同步修改。但由于rename分表后会创建新表【创建表会使用从data文件中读到的数据类定义】,所以对数据类的修改就会反应到新表中。但如果对数据列的数据类型有调整,甚至增删了数据列,有可能导致相应的代码出现异常,所以笔者还是不建议利用rename分表来调整数据类的定义
数据类的定义语法:
CLASS VARIABLE canDel? renamePeriod? supClass? Colon classField+ indexDefine*
其中的renamePeriod就是一个可选的周期性分表定义。其具体定义为:
rename [day | week | month | year]
其中:
day:每天零点做分表,表名为:{数据类名}_{年}_{月}_{日},日期基准为前天
week:每周一零点做分表,表名为:{数据类名}_week{年内星期顺序号},日期基准为前一周
month:每月1号的零点做分表,表名为:{数据类名}_{年}_{月},日期基准为上一个月
year:每年1月1号零点做分表,表名为:{数据类名}_{年},日期基准为上一年
由于mysql中,表改名是自动提交的,所以为了尽可能的减少表改名的空窗期,新表是预先建好然后以一个临时名存放。需要分表时,就是执行两个改名操作而就不需要了再临时创建新表了。
注:数据类指定了周期性分表后,如果重启,系统日志会报错提示某表已经创建,忽略即可。因为自动分表功能会提前为该表创建一个临时表用于分表时的快速改名
版本的docker镜像中发布
参考资料:
下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:
下面的系列文章讲述了jxTMS的一些基本开发能力: