我们正在为我们的一个应用程序评估 SymmetricDS。
我们希望在多个存储之间同步数据库。数据需要从一个存储流向中央数据库,然后再流回不同的存储。
在 SymmetricDS 中,我们能够实现如下数据流:
store -> central database // whenever we modify/insert/delete data in store,
也来自
central database -> store // whenever we modify/insert/delete data in central db
但是我们需要的是来回
store -> central database -> stores
即商店在其数据库中插入一个数据行,它应该转到中央数据库,然后返回选定的存储
编辑了下面的问题,以详细说明哪个表现在未同步
我们有以下等级制度
商店 连锁店 中央数据库拥有所有商店和连锁店的信息
每个商店都必须有一个基本信息,例如其自己连锁店中所有商店的地址。 商店可以将另一家商店添加到其连锁店中。一旦发生这种情况,添加的商店必须通过同步此链中的所有商店来获取信息。
表格如下:
STORE_CHAINS(STORE_ID、CHAIN_ID之间具有映射)。
STORE_CHAINS示例:
STORE_ID CHAIN_ID
A CHAIN1
B CHAIN1
C CHAIN1
Y CHAIN2
Z CHAIN2
有一个 STORES 表,其中包含每个存储的详细信息,其中STORE_ID是主键。
商店表的示例:
STORE_ID STORE_ADDRESS ...
A AddrA
B AddrB
C AddrC
D AddrD
...
X AddrX
Y AddrY
Z AddrZ
每个存储都与一些基本信息同步中央存储表数据库的一部分。只有那些共享同一链的商店的详细信息才会同步。
例如,如果商店 C 将新映射(D、CHAIN1)添加到表中STORE_CHAINS则新添加的商店 D 应通过同步从 STORES 表中接收映射条目本身以及有关商店 A、B、C 的详细信息,因为它们共享相同的链 CHAIN1。此外,存储 A、B 将STORE_CHAINS映射条目和 D 的存储条目发送。
我们的问题是 A、B、C 的 STORES 条目没有发送到 D。只有新创建的映射(D、CHAIN1)才会同步到 D。
表STORE_CHAINS是唯一实际更改了数据的表,STORES 表没有更改。我们如何确保每当创建新的(STORE_ID,CHAIN_ID)映射时,STORES表的触发器也会被触发,并且其数据被发送到所有相关存储。
我们对所有情况都使用子选择来选择应发送哪些商店/商店组映射条目。如果我们对任何商店进行初始加载,选择逻辑工作正常。
提前谢谢。
将sync_on_incoming_batch列的值设置为 1,如文档中所述 http://www.symmetricds.org/doc/3.8/html/user-guide.html#_bi_directional_synchronization
使用 CUSTOM_BEFORE_UPDATE_TEXT 或 CUSTOM_BEFORE_INSERT_TEXT 对需要同步的其他表中的所有依赖项行触发阳光更新