【SymmetricDS】SymmetricDS是如何工做的

2018-04-20  by 安静的下雪天  http://www.cnblogs.com/quiet-snowy-day/p/8890785.html html

 

本文翻译自SymmetricDS官方文档  How SymmetricDS Works  算法

 Published: Saturday, 15 September 2012 00:00数据库

 Written by Eric Long服务器

 

SymmetricDS 是开源的数据库复制服务器,经过捕捉、路由、批处理数据处理以实现多个数据库之间的同步。配置和运行时的信息使用数据库模型存储,为各类操做提供了一致的、可访问的视角。让咱们来快速浏览一下,在概念上从安装到同步SymmetricDS是如何工做的。网络

 

Configuring Synchronization

配置数据模型是一组表,用户在其中描述节点网络,数据同步以及如何传输数据。节点是链接到数据库的SymmetricDS实例。每一个节点在SYM_NODE表中都有一条记录,其中有一个系统使用的惟一内部节点ID,和一个供用户使用的外部节点ID。因为系统中的许多节点都具备共同特征,所以经过SYM_NODE_GROUP表会给每一个节点都分配一个节点组。为了把节点链接在一块儿来同步数据,使用SYM_NODE_GROUP_LINK表中的一条记录将他们联系起来。该链接能够被指定为“push”即源节点发送本身的变动,也能够指定为“pull”即目标轮询源节点的变动。架构

      数据的同步开始于逻辑触发器,它能够捕获对表的insert、update、delete操做。用户指定源表名称及其所在的目录和架构中的位置。可使用通配符来匹配多个表,而不是分别录入每一个表。若是不须要全部的列,能够建立一个列表记录被排除的列,即建立一个垂直子集。配置一个逻辑触发器将使SymmetricDS服务器在数据库的表上建立一个物理触发器。ui

      获取数据到目标节点叫作路由,这是路由器的职责。最简单的是默认路由器,它将发送数据到全部节点。列匹配路由器能够在发送数据到节点以前在列中查找特殊值。它会等待外部节点ID出如今某一列中,在将它发送到该节点以前。其余路由器能够查询数据库,或者执行自定义脚本,以肯定数据将会被发送到哪里。路由器与触发器想关联,它提供了建立水平子集的能力。spa

 

Change Data Capture

定义逻辑出发器会致使数据库触发器被置于表上,从而捕获数据到SYM_DATA表中。该表中被捕获的变动数据,使得SymmetricDS保证了传输数据的顺序和原子性,这意味着数据在目标节点上会被正确的回放他是如何被记录的。一个条目记录了惟一数据ID序列号,事件类型(insert、update、delete),事务ID,以及变动数据。事务ID做为本次事务的一部分被数据提交共同使用。为了适应不一样的表,变动数据被存储为CSV格式。插入事件只记录新的数据行,删除事件记录旧的数据行连同使用的主键,更新事件记录新的数据行,旧的数据行,以及用到的主键。翻译

 

 Change Data Capturehtm

译者注:上图 SYM_DATA表第1,2两条记录有相同的事务ID,说明此次事务包含两个表的数据处理事件。两个表的数据提交都使用了该事务ID。第3条记录表示更新处理,以CSV的格式记录了新数据,旧数据,以及主键。第4条记录表示删除处理,只记录旧数据和主键。

 

Routing and Batching

路由做业在后台按期执行,把变动汇集到批处理中,并分配到要交付的目标节点。变动的数据经过已配置的路由器来决定哪些节点将接收数据。若是使用的是默认路由器,数据会被分配到全部节点而且给出相同的批号。不然,每一个节点将获取本身的批号,以便数据路由到它。数据将会被分配到同一批次处理直到达到最大批处理大小。若是用户配置了事务批处理算法,当有更多包含相同事务ID的数据的时候,批处理会扩大。数据到批处理的指派连同肯定指派的路由器ID,记录在SYM_DATA_EVENT表中。批处理到节点的指派记录在SYM_OUTGOING_BATCH表中。

 

 

Syncing Data

在配置中关联到一块儿的节点,使用被指定的“push”或“pull”动做来同步它们的数据。Push是指一个节点链接到另外一个节点并推送本身的变动,而pull是指一个节点等待其余节点的链接并接收它们的变动。每一个动做都是在必定的时间间隔内执行,可是push动做只在有变动要发送的时候链接到网络,而pull动做是一直保持链接来确认是否有等待处理的变动。Pull处理是颇有用的,当链接的节点处于防火墙以后,只容许传出链接而不是传入的链接。

   

批处理的状态记录在两端,源端记录在SYM_OUTGOING_BATCH表中,目标端记录在SYM_INCOMING_BATCH表中。批处理状态记录在两方的数据库中,使得数据复制的问题更容易查找,无论你使用的是哪一种系统。带有中心节点而且使用远程节点发送和接收变动的网络,对于网络中任何数据复制的错误,从中心位置查找更加有利。

相关文章
相关标签/搜索