OFBiz中的ID自增机制
由于考虑多数据库的支持,OFBiz在ID自增处理上,没有依赖数据库特性,而是程序逻辑实现。
数据库中有一个表用于存放ID序列信息:sequence_value_item
,在getNextSeqIdLong
中有涉及对该表的操作,相关代码还包括getNextSeqId
、setNextSubSeqId
和make-next-seq-id
。
EntityAutoEngine
中的invokeCreate
中也有涉及相关操作。
大概的逻辑(部分猜测):
sequence_value_item存放的是大的序列块,因为涉及到性能问题,所以又引入了SequenceBank作为缓存。需要新ID时,先从bank取,如果bank中已经空了,bank从sequence_value_item申请一块新的。
按照这样的分析,在导出数据的时候,只需要再导出sequence_value_item表即可。
序列号中间可能中断,也是因为bank作为内存中的缓存,如果服务强制退出,这部分缓存的序列号就会丢失,下次重新启动时,又是从sequence_value_item获取新的起始值。