用户名: 密码: 忘记密码? 注册

分布式数据库中数据同步

作者:  时间: 2010-09-20

分布式数据库系统已不为大家陌生。该方案中描述了一个典型的分布式数据库系统,主要由几个部分组成: 数据中心、远程数据库、远程数据库与数据中心之间的数据交换。


从运行状态来看,分布式数据库系统又可分为“常连接”和“偶连接”两大类。顾名思义,“常连接”状态下的分布式数据库系统是指数据中心与远程数据库长期保持连通状态的部署环境。一般来说,这种系统对数据的实时性要求高,需要在实时或者近乎实时(比如秒级)的条件下保持数据中心与远程数据库的数据一致性。例如,全国铁路客票系统采用的多级分布式数据库系统中各远程数据库与数据中心的数据之间就需要实现接近实时的数据复制。


本方案中提到的是“偶连接”环境下的分布式数据库系统。该系统允许数据交换有一定延迟。通常,各远程数据库是数据中心的一个数据分区(即数据中心的一部分数据),数据中心与各远程数据库在平时不保持连接状态,且数据中心与各远程数据库均可能有数据变更。在需要的时候,各远程数据库与数据中心通过数据交换模块连接,交换必要的数据。下面针对组成该环境下分布式数据库系统的两个重要部分(远程数据库、数据交换)来阐述如何考虑选择合适的解决方案。


远程数据库


正如上面提到的,各远程数据库是数据中心的一个数据分区,运行在各个远程站点上。对于远程数据库,我们着重要考虑以下几个方面的问题:


1. 免维护。对类似于本方案中提出的运行在船舶上的各远程数据库来说,零维护是至关重要的。如果每个船舶都无需配备IT人员或DBA,这将节省大量成本。


2. 合理资源占用情况下的高性能。对于远程数据库来说,它一般不会像数据中心那样存储着海量数据,同时它的运算环境也远不如数据中心那样强大。很多远程数据库甚至部署在普通的PC上,而且有的远程应用并非需要多用户环境。这就要求各远程数据库在资源有限的环境下合理利用资源,规避可能造成的资源浪费,并且要获取企业级数据库的强大性能。


3. 安全性。数据安全是每个企业建立信息系统时首要考虑的问题。


数据库之间的数据交换


各远程数据库与数据中心的数据交换有以下几个方面的问题需要考虑:


1. 双向同步。一般情况下,不仅远程数据库的数据需要上传到数据中心,数据中心也可能有一些数据需要下载到各远程数据库中去。当然,在数据下载的过程中会涉及到如何调度,把不同的数据下载到不同的远程数据库的问题,即数据如何分区。


2. 异构数据库支持。我们需要考虑数据中心与各远程数据库是非同构数据库的情况。例如,数据中心运行着Oracle,而各远程数据库由于种种原因并不想采用Oracle,因而也需要进行数据同步的情况。


3. 增量同步。当系统运行了一段时间以后,数据中心和各远程数据库的数据都会发生膨胀,为了真正缩短网络连接时间,需要对数据进行摘取,选择自上次同步以来未同步的数据,组织它们进行上传下载。


4. 数据一致性。对于1:N的双向数据传输来说,要控制数据一致性并非一件易事。例如,数据中心将同一条数据下发到了两个不同的远程数据库,这两个远程数据库都对该数据进行了修改。继而,它们分别将数据同步到中心数据库去。那么,在这种情况下,我们如何去判断哪一条数据是真正有效的数据就成了问题。另外,数据一致性还体现在对传输失败的处理上。由于种种原因,我们并不能保证传输的过程不会失败。假设传输失败后,失败的数据该如何处理成了重要的问题。


5. 安全性。前面已经提及各远程数据库上的数据需要进行必要的保护,当然在数据中心与各远程数据库的数据传输链路上也必须对数据进行保护。只有安全的数据中心、安全的远程数据库再加上安全的数据交换渠道才能构成一个安全的分布式数据库系统