SymmetricDS:保持单独的自动增量计数器
Posted
技术标签:
【中文标题】SymmetricDS:保持单独的自动增量计数器【英文标题】:SymmetricDS: keep separate auto increment counters 【发布时间】:2019-06-12 13:37:12 【问题描述】:我有一个由 SymmetricDS 同步的集群。我想保持每台服务器的主键范围不同。但是,如果我在一台服务器上更改自动增量,它会反映在其他服务器上。有没有办法做到这一点?
【问题讨论】:
【参考方案1】:您使用的是什么数据库? SymmetricDS 将允许和标识插入,例如在目标上的 MSSQL 中,以便源 id 将匹配目标而不是自动递增。这将使数据库保持同步。当您说要为每台服务器保留不同的范围时,我不确定您在问什么? SymmetricDS 不同步范围的种子值,只同步数据。您是否偶然请求使用创建表进行加载,这会将源定义从源发送到目标并调整目标种子。
【讨论】:
使用 mysql。我的意思是自动增量基数的范围。所以设置自动增量基数,例如在一台机器上为 1000,在另一台机器上为 2000。但他们总是同步【参考方案2】:这个问题可以通过在中心节点增加代表这些 ID 的列的长度来解决。然后,这个增加的长度可以用于同步图中每个叶节点的唯一前缀。我通过添加我自己的实现接口org.jumpmind.symmetric.ext.ISymmetricEngineAware
的org.jumpmind.symmetric.io.data.writer.DatabaseWriterFilterAdapter
解决了这个问题。然后这个过滤器与 SymmetricDs 引擎一起打包并在symmetric-extensions.xml
文件中注册。过滤器将拦截所有传入的数据行,检查发件人并预先添加一个唯一 ID。所有外键都必须这样做。
如果必须将此类数据从中心节点同步回叶节点,则必须创建并注册一个反向实现,该实现将在将数据发送到叶节点之前剥离前缀。
听起来很复杂,但实际上并不复杂,一旦到位,效果就很好
【讨论】:
嗯,这是一个很好的解决方案,但我希望不要操纵 PK。在这种情况下,我可能会切换到全球唯一的 PK 如果可能的话,这将是最简单和正确的解决方案以上是关于SymmetricDS:保持单独的自动增量计数器的主要内容,如果未能解决你的问题,请参考以下文章