在不同商店之间使用 SymmetricDS 共享数据库
Database sharing using SymmetricDS among different stores
我们正在为我们的一个应用程序评估 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
即商店在其数据库中插入一个数据行,它应该转到中央数据库,然后返回到 selected 商店
编辑问题如下,详细说明 table 现在没有同步
我们有以下层次结构
商店
连锁店
中央数据库包含所有商店和连锁店的信息
每家商店都必须有一个基本信息,例如其连锁店内所有商店的地址。
Store 可以将另一家商店添加到其连锁店中。一旦发生这种情况,添加的商店必须通过同步此链中的所有商店来获取信息。
表格如下:
STORE_CHAINS(在STORE_ID、CHAIN_ID之间有映射)。
STORE_CHAINS的例子:
STORE_ID CHAIN_ID
A CHAIN1
B CHAIN1
C CHAIN1
Y CHAIN2
Z CHAIN2
有一个 STORES table,其中包含每个商店的详细信息,STORE_ID 是主键。
商店示例 table:
STORE_ID STORE_ADDRESS ...
A AddrA
B AddrB
C AddrC
D AddrD
...
X AddrX
Y AddrY
Z AddrZ
每家商店都与 CENTRAL STORES table 数据库的一部分同步,其中包含一些基本信息。仅同步那些共享同一链的商店的详细信息。
例如这里,如果存储C向STORE_CHAINS table添加了一个新的映射(D,CHAIN1),那么新添加的存储D应该通过同步接收映射条目本身和来自 STORES table 的商店 A、B、C 的详细信息,因为它们共享同一条链 CHAIN1。还将向商店 A、B 发送 STORE_CHAINS 映射条目和 D 的商店条目。
我们的问题是 A、B、C 的 STORES 条目没有发送到 D。只有新创建的映射(D,CHAIN1)同步到 D。
tableSTORE_CHAINS是唯一一个实际有数据改变的,STOREStable没有改变。我们如何确保每当创建新的 (STORE_ID, CHAIN_ID) 映射时,STORES table 的触发器也被触发并且其数据被发送到所有相关商店。
我们在所有情况下都使用 subselect 到 select 应该发送哪些 stores/store-group 映射条目。如果我们为任何商店进行初始加载,selection 逻辑工作正常。
提前致谢。
按照文档 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 触发对来自其他需要同步的其他表的所有依赖项行的阳光更新
我们正在为我们的一个应用程序评估 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
即商店在其数据库中插入一个数据行,它应该转到中央数据库,然后返回到 selected 商店
编辑问题如下,详细说明 table 现在没有同步
我们有以下层次结构
商店 连锁店 中央数据库包含所有商店和连锁店的信息
每家商店都必须有一个基本信息,例如其连锁店内所有商店的地址。 Store 可以将另一家商店添加到其连锁店中。一旦发生这种情况,添加的商店必须通过同步此链中的所有商店来获取信息。
表格如下:
STORE_CHAINS(在STORE_ID、CHAIN_ID之间有映射)。
STORE_CHAINS的例子:
STORE_ID CHAIN_ID
A CHAIN1
B CHAIN1
C CHAIN1
Y CHAIN2
Z CHAIN2
有一个 STORES table,其中包含每个商店的详细信息,STORE_ID 是主键。
商店示例 table:
STORE_ID STORE_ADDRESS ...
A AddrA
B AddrB
C AddrC
D AddrD
...
X AddrX
Y AddrY
Z AddrZ
每家商店都与 CENTRAL STORES table 数据库的一部分同步,其中包含一些基本信息。仅同步那些共享同一链的商店的详细信息。
例如这里,如果存储C向STORE_CHAINS table添加了一个新的映射(D,CHAIN1),那么新添加的存储D应该通过同步接收映射条目本身和来自 STORES table 的商店 A、B、C 的详细信息,因为它们共享同一条链 CHAIN1。还将向商店 A、B 发送 STORE_CHAINS 映射条目和 D 的商店条目。
我们的问题是 A、B、C 的 STORES 条目没有发送到 D。只有新创建的映射(D,CHAIN1)同步到 D。
tableSTORE_CHAINS是唯一一个实际有数据改变的,STOREStable没有改变。我们如何确保每当创建新的 (STORE_ID, CHAIN_ID) 映射时,STORES table 的触发器也被触发并且其数据被发送到所有相关商店。
我们在所有情况下都使用 subselect 到 select 应该发送哪些 stores/store-group 映射条目。如果我们为任何商店进行初始加载,selection 逻辑工作正常。
提前致谢。
按照文档 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 触发对来自其他需要同步的其他表的所有依赖项行的阳光更新