我正在权衡可用于多主复制的整数主键的选项。(我很喜欢使用整数键而不是guid)
我能想到的最好的办法是先有最重要的数据,最后才有服务器号:
例如,服务器1上的发票1=101
服务器2上的发票1=102
其中非serverno部分(invoiceno)来自db号生成器
算法:gen_id(invoiceno_gen,1)*100+服务器号
您可以通过查看值和数学计算来获得服务器编号。
它为99台服务器留出了空间,同时仍然很短,可读性强,不会发生冲突。使用该方案和标准整数列将使最大行数(21474836)或如果使用bigint则为数十亿。
例如,发票表键如下所示:

Server 1
101
201
301
401

Server 2
102
202
302
402

所以我的问题是:我忽略了什么批评或缺陷?
数据库是firebird。

最佳答案

创建一个复合主键怎么样?
在每台服务器上定义一个要设置的“serverid”,例如1、2、3、4等作为int。然后在您的invoice表中将“invoiceid”作为int。
创建主键(serverid,invoiceid)。
这样,您就可以容纳99台以上的服务器,而不必操作/计算任何id或类似的东西。
当然,现在引用发票表的任何表都需要使用(serverid,invoiceid)作为外键,但如果您也需要复制这些表,那么在表中到处使用serverid也不会有问题。
马克

10-07 22:33