1.3. Features
SymmetricDS拥有很多数据同步时你可能需要或者想要的特性。这些特性的大部分是根据SymmetricDS在生产环境中的使用反馈增加的。
1.3.1.Two-Way Table Synchronization
事实上,数据的同步通常只需要往一个方向同步。例如,一个分销商店发送它的商品交易信息到中央数据库,中央数据库发送存货信息和价格到商店。其他的数据可能需要在双向同步。例如,分销商店发送中央数据库一个存货清单文档,然后中央数据库更新文档中的数据,然后发送回商店。SymmetricDS支持表的双向同步,同时通过仅记录同步之外的数据变化避免了陷入更新循环。
1.3.2. Data Channels
SymmetricDS支持数据通道的概念。数据同步被定义在表(整个表或者表的一部分数据)的层面,每一个被管理的数据库表都被分配到一个channel上,channel会帮助控制数据流。一个channel是一个种类的数据,一个channel的数据可以不依赖于其他的channel中的数据被同步。例如,在一个分销例子中,一个促销事件可能更新很多的商品信息,但是用户可能正在等待存货清单文档的更新。如果按照顺序处理,商品更新将延迟存货清单的更新,尽管数据是没有联系的。通过将item表分配到item channel,inventory表分配到inventory channel,这两个表的数据变化被分开来处理,因此inventory可以不管大量的商品数据的情况下操作数据。
Channel 将在Section3.3“Channel”中被详细讨论。
1.3.3. Change Notification
在一条数据变化记录到数据库中之后,对此变化感兴趣的SymmetricDS节点被唤醒。Change Notification被配置为既可以执行数据push也可以执行数据pull。当几个节点将它们的数据变化对准到一个中央节点的时候,用push的方式代替等待中央节点从每个源数据库pull的方式是高效的。如果网络配置了防火墙来保护一个节点,pull配置可能使该节点可以接收到数据变化,而push方式将会被阻塞。Change Notification的频率是可配置的,默认是一分钟一次。
1.3.4 HTTP(S) Transport
默认情况下,SymmetricDS以REST风格使用基于web的HTTP或者HTTPS请求的方式。这是一种轻量级并且易管理的方式。提供了一系列的filter来强制认证和限制同时同步的数据流的数量。ITransportManager接口允许实现其他的数据传输方式。
1.3.5. Data Filtering and Rerouting
使用SymmetricDS,数据可以再记录,提取和加载的时候被过滤。
1. 数据路由是通过往SymmetricDS系统表ROUTER中插入一个给定类型的router来完成的。Router负责确定捕获到的变化应该被发往的目的节点。自定义的router可以通过实现一个IDataRouter接口来提供。
2. 除了同步,随着同步数据加载到目标数据库,SymmetricDS也可以完成很复杂的数据转换。数据转换可以被用来合并源数据,产生多个源数据的副本到多个目标数据库表,在目标数据库设置默认值,等等。转换的类型可以被扩展,可以创建自定义的转换。
3. 因为数据变化被加载到目标数据库中,数据可以被一个简单的shell加载过滤器过滤,也可以被一个IDatabaseWriterFilter的实现类过滤。你可以改变一个列中的数据,然后路由改变后的数据到任何地方,触发器初始化负载或者其他可能的情况。一个可能的用法是可以路由信用卡数据到一个安全的数据库然后在中央存放销售信息的数据库中空出来。过滤器也可以防止数据全部到达目标节点,然后在目标节点加载数据时使用数据的默认值,这样非常高效。
1.3.6. Transaction Awareness
很多的数据库提供全局唯一的事务标识,跟作为一个事务一起提交的多个行相关联。SymmetricDS随同变化的数据一起,也存储事务的标识,因此SymmetricDS可以精确地回滚一个事务。这意味着,目标数据库维护与源数据库中相同的事务完整性。支持事务标识符的数据库在附录中有记录。
1.3.7. Remote Management
管理功能通过JMX暴露出来,可以通过Java JConsole工具或者通过一个应用程序服务器访问。功能包括打开注册,重新加载数据,清除旧的数据和查看batch信息。很多的配置信息和运行时属性也可以被查看。
SymmetricDS也提供了发送SQL事件的功能,跟用来发送数据的同步机制一样。数据payload可以使任意的SQL statement。事件的处理和响应也跟其他类型的事件一样。
1.3.8. File Synchronization
不少的SymmetricDS用户已经发现他们不仅需要同步数据库表到远端,他们也有一系列的文件应该被同步。从version 3.5开始,SymmetricDS开始支持文件同步了。
请查看Section3.5 “File Trigger / File Synchronization”获取更多的信息。
1.4 Why Database Triggers?
在关系型数据库中,有几种方法可以捕获到变化的数据,以用来复制、同步和整合。
1. Lazy data capture从源数据库系统中使用条件(比如一个时间戳列)SQL语句查询变化的数据。
2. Trigger-based data capture 安装一个数据库触发器来捕获变化的数据。
3. Log-based data capture从数据库的恢复日志中读取数据的变化。
上边的山中方式都有优势,也都有劣势,都在SymmetricDS的开发计划中。目前,SymmetricDS支持基于触发器的数据捕获和不公平的懒惰数据捕获。首先实现这两种技术有很多的原因,最重要的是SymmetricDS要解决的大多数的用例都能使用基于触发器的方式解决,在某种程度上,条件复制的方式(第一种方式)使更多的使用企业标准技术的数据库平台被支持。这个事实使SymmetricDS的开发者宝贵的时间和经理被放到设计一个易于安装、配置和管理的产品,而不是花费时间在逆向数据库日志文件上。
基于触发器的数据捕获方式引入了一个可以衡量数据库操作开销。开销会随着处理器的能力和配置给数据库平台的资源还有应用使用数据库的方式变化。随着不断改进的硬件和数据库技术,基于触发器的数据捕获对需要高数据吞吐量或者需要扩展的应用来说将变得更加灵活。
基于触发器的数据捕获比基于日志的解决方案更容易实现和受支持。它使用众所周知的数据库概念,对于软件,数据库开发者和数据库管理员来说更易理解。它通常被应用开发团队或者数据库管理员安装,配置和管理,本身不需要部署到数据库服务器上。