一般的做法,我认为最好的做法是保持序列处理独立于每个数据库。
例如,对于具有两个数据库的主动-主动复制,您可以让一侧的序列仅生成奇数,而另一侧的序列仅生成偶数。
对于多主复制,您可以使用不同的公式:
Sequence Number = n*d+m+offset.
其中n是序号,d是多主复制的维度,m的范围从0到n-1是分配给复制中每个节点的编号,offset是偏移序号的编号。
假设我有一个 4 路多主复制的设置,其中 m=4,y 在 (0, 1, 2, 3) 中,偏移量是 100。
Node #1 (m=0) :Sequence number = n*4+100
Node #2 (m=1): Sequence number = n*4+101
Node #3 (m=2): Sequence number = n*4+102
Node #4 (m=3): Sequence number = n*4+103
每个序列将具有:
100, 104, 108,112, 116, 120,...
101, 105, 109, 113, 117, 121,...
102, 106, 110, 114, 118, 122...
103, 107, 111, 115, 119, 123,...
所以,我的序列将是
SQL>create sequence member_seq_1 start with 100 increment by 4 cache 100;
Sequence created.
SQL>create sequence member_seq_2 start with 101 increment by 4 cache 100;
Sequence created.
SQL>create sequence member_seq_3 start with 102 increment by 4 cache 100;
Sequence created.
SQL>create sequence member_seq_4 start with 103 increment by 4 cache 100;
Sequence created.
SQL>select member_seq_1.nextval, member_seq_2.nextval, member_seq_3.nextval,
member_seq_4.nextval from dual;
NEXTVAL NEXTVAL NEXTVAL NEXTVAL
---------- ---------- ---------- ----------
100 101 102 103
SQL>select member_seq_1.nextval, member_seq_2.nextval, member_seq_3.nextval,
member_seq_4.nextval from dual;
NEXTVAL NEXTVAL NEXTVAL NEXTVAL
---------- ---------- ---------- ----------
104 105 106 107