在不同商店之间使用SymmetricDS进行数据库共享

时间:2018-03-22 07:47:51

标签: database data-synchronization symmetricds

我们正在为我们的某个应用程序评估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在其数据库中插入一个数据行,它应该转到中央数据库,然后返回选定的商店

编辑以下问题以详细说明现在未同步哪个表格

我们有heirarchy

商店 商店链 中央数据库具有所有商店和链的信息

每个商店必须有一个基本信息,如自己链中所有商店的地址。 商店可以在其链中添加另一个商店。一旦发生这种情况,添加的商店必须通过同步该链中的所有商店来获取信息。

表格如下:

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是主键。

STORES表的示例:

STORE_ID    STORE_ADDRESS   ...
A           AddrA
B           AddrB
C           AddrC
D           AddrD
...         
X           AddrX
Y           AddrY
Z           AddrZ

每个商店都会同步一部分CENTRAL STORES表数据库中的一些基本信息。只有那些商店的详细信息才会同步,它们共享相同的链条。

例如,在这里,如果商店C将新映射(D,CHAIN1)添加到STORE_CHAINS表,则新添加的商店D应该通过同步接收映射条目本身以及有关商店A,B,C的详细信息。 STORES表因为它们共享相同的链CHAIN1。商店A,B也将被发送STORE_CHAINS映射条目和ST的STORES条目。

我们的问题是A,B,C的STORES条目没有被发送到D.只有新创建的映射(D,CHAIN1)才会同步到D.

表STORE_CHAINS是唯一一个实际更改了数据的表,STORES表没有更改。每当创建新的(STORE_ID,CHAIN_ID)映射时,我们如何确保触发STORES表并将其数据发送到所有相关的存储。

我们在所有情况下都使用subselect来选择应该发送哪些store / store-group映射条目。如果我们为任何商店进行初始加载,选择逻辑就可以正常工作。

提前致谢。

1 个答案:

答案 0 :(得分:2)

按照文档http://www.symmetricds.org/doc/3.8/html/user-guide.html#_bi_directional_synchronization

中的说明将列sync_on_incoming_batch的值设置为1

使用CUSTOM_BEFORE_UPDATE_TEXT或CUSTOM_BEFORE_INSERT_TEXT从需要同步的其他表中触发所有依赖行的晴天更新