本文为学习用途,版权及信息未经原授权方同意不得复制、转载用于商业目的。
一、引言
80年代以来,数据库技术得到了极大的发展,特别是分布式网络数据库技术的出现,使不同区域的数据得以共享,提高了工作的协调性与效率。
在保险企业中,营业机构的分散造成了业务数据的分散,总公司与各分公司处于不同的城市或城市中的各个地区,在业务上它们处理各自的数据,但也需要彼此之间数据的交换和处理,如何处理分散的数据和集中的管理,是困绕保险数据库开发者多年的难题,分布式数据库系统技术的出现为解决这个问题提供了可能。本文就是讨论如何利用分布式数据库技术实现保险资料的交换和管理。
二、分布式数据库技术介绍
分布式数据库技术是分布式技术与数据库技术的结合,在数据库研究领域中已有多年的历史。从概念上讲,分布式数据库是物理上分散在计算机网络各结点上,而逻辑上属于同一个系统的数据集合。它具有数据的分布性和数据库间的协调性两大特点。系统强调结点的自治性而不强调系统的集中控制,且系统应保持数据的分布透明性,使应用程序编写时可完全不考虑数据的分布情况。
在分布式数据库系统中数据独立性概念也同样重要,然而增加了一个新的概念,就是分布式透明性。所谓分布式透明性就是在编写程序时好像数据没有被分布一样,因此把数据进行转移不会影响程序的正确性。
与集中式数据库系统不同,数据冗余在分布式系统中被看作是所需要的特性,其原因在于:首先,如果在需要的节点复制数据,则可以提高局部的应用性。其次,当某节点发生故障时,可以操作其它节点上的复制数据,因此这可以增加系统的有效性。当然,在分布式系统中对最佳冗余度的评价是很复杂的。
在分布式数据库中,数据存储通过以下三种途径实现:
复制:系统维护关系的几个完全相同的副本,这些副本存储在不同的结点上。
分片:关系被划分为几个片段,各个片段存储在不同的结点上。
复制+分片:关系被划分为几个片段,系统为每个片段维护几个副本。
三、分布式数据库技术在系统体系结构中的体现
3.1 保险企业数据管理的现状
在保险企业中,总公司与各分公司处于不同的城市或城市中的各个地区,在业务上它们处理各自的数据,但也需要彼此之间数据的交换和处理。在保险企业原有的业务管理模式中,每个营业机构处理的是本机构的数据,各营业机构之间或下级营业机构与上级营业机构之间只是定期进行统计数据的交换,曾经多次出现客户交叉投保或被拒保客户另处投保的现象,存在着严重的承保风险隐患,
3.2 数据库设计的基本原则
从全局应用的角度出发,将这些数据库自下而上构成分布式数据库系统,实现全局数据的完整性和一致性,各营业机构仍然存放本机构的数据,总公司的数据库则存放所有业务数据,并对数据进行完整性和一致性的检查,这种做法虽然有一定的数据冗余,但在不同场地存储同一数据的多个副本,能提高系统的可靠性和可用性,也提高了局部应用的效率,减少了通讯代价。该分布式数据库系统可以在对当前机构影响最小的情况下进行扩充,增加新的营业机构时只需增加一个节点就可以了,同时也使得各处理机之间的相互干扰降到最低。
3.3 数据存储
分布式数据库系统可以通过复制、分片和复制加分片三种方式存储数据,因为各数据库之间存在一定的数据冗余,又存在着差异,我们使用了复制+分片的方式进行数据存储。
3.3.1 数据分片
在分布式数据库系统中,将关系分片,有利于按用户需求组织数据的分布,目前的分片方式有水平分片、垂直分片、导出分片、混合分片等四种。我们根据不同的数据关系采用了不同的分片方式:
(1)在总公司与分支营业机构的数据关系中,由于分支机构的数据是总公司业务数据的子集,我们采用了水平分片的方式,通过并运算实现关系的重构。
(2)在总公司数据库服务器与Web数据库服务器的数据关系中,数据是按照其应用功能来划分的,所以我们采用了垂直分片的方式。
3.3.2 数据同步
数据同步方式则根据系统需求使用事务复制(transaction replication)和合并复制(merge replication)两种,由于营业分支机构只存放本部门的数据,数据管理和分析功能是由总公司的数据库服务器来实现的,营业分支机构只需将更新的数据发送到总公司的数据库即可,我们使用事务复制进行业务数据的同步,把营业分支机构的数据库作为出版者和分发者,总公司的数据库作为订阅者,对营业分支机构的数据建立快照代理,并在分发数据库中记录同步状态的信息。每一个使用事务复制的营业分支机构数据库均有自己的日志读取代理,运行在分发者上并连接出版者。分发代理的任务是将分发数据库中保持的事务任务直接推动到订阅者。当推订阅被创建时,每个为立即同步而建立的事务出版物通过自己的分布代理运行在分发者上并与订阅者相连。
事务复制可以支持两种类型的对象复制:表和存储过程。在出版者中定义数据库中的部分或全部的数据,选择多个存储过程作为复制。当营业分支机构的数据发生更新时,日志读取代理将即时的把更新信息推到总公司的数据库中。基于存储过程的复制使应用具有更好的性能,可以大大减少网络的通讯量。事务性日志使用事务日志来监视文章中的数据改变。
由于总公司数据库服务器与Web服务器之间的数据交换是双向的,传统投保客户和网上投保客户都会产生新的业务数据,我们使用合并复制方式实现数据同步,把总公司数据库服务器设置为出版者,Web数据库服务器设置为订阅者,合并复制监视源数据库中的改变,并同步出版者和订阅者的数据值,其中无论是出版者还是订阅者均可以更新数据。当出版者同订阅者发生冲突时,我们将出版者设置为高优先级。与此类似,目的数据库中的数据改变将被告知源数据库。合并复制涉及快照代理和合并代理的参与。快照代理将准备包含有被出版数据表的结构与数据的快照文件,在分发者上存储这些文件,并在分发者的分发数据库中记录同步任务。合并代理应用存储在出版数据库表中的初始快照任务于订阅者。它也合并在最初快照被建立后增加的数据改变,并依据用户配置的规则或使用用户自定义的解决方法来协调冲突。
四、 利用分布式技术实现事务处理和查询
4.1 分布式事务处理
分布式数据库系统中数据的分布导致事务具有了分布性。一个全局事务的执行被划分为在许多场地上子事务的执行。
分布式事务要能够在多个服务器上执行,我们使用MS DTC作为事务管理器来协调各个服务器对事务的处理操作,为了减少网络故障对分布式事务处理的影响,避免分布式事务造成不同服务器间数据的不一致,X/Open XA规范将分布式事务的处理过程规定为两个阶段,即准备阶段和提交阶段,就是常说的两阶段提交。
在进行分布式事务处理时,我们首先在服务器端用Transact SQL脚本程序BEGIN DISTRIBUTED TRANSACTION语句启动一个分布式事务,将该服务器作为分布式事务管理服务器,然后脚本程序对连接服务器执行分布式查询或远程服务器上的存储过程,分布式事务管理服务器会自动调用MS DTC,使远程服务器参加分布式事务处理。当脚本程序执行COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION或ROLLBACK WORK语句时,分布式事务管理服务器将再次调用MS DTC,用它来管理两阶段提交进程,使连接服务器和远程服务器提交或回滚事务。例如在业务系统中,如果总公司数据库管理系统发现该客户是交叉投保,则需将该保单插入拒保记录表中,同时在对应的营业分支机构的数据库中将该保单的状态设为无效。我们在营业分支机构的数据库(DBServer1)中建立存储过程update_policy更新保单状态,在总公司数据库服务器(DBServer)上执行以下脚本程序,启动一个分布式事务insert_reject:
USE business
GO
BEGIN DISTRIBUTED TRANSACTION
INSERT reject
VALUES(policy_id, insurance_no,business_date,customer_id,customer_name…)
EXECUTE DBServer1.business.dbo.update_policy
COMMIT TRANSACTION
GO
系统执行insert_reject事务向DBServer中的reject表插入一条记录,同时更新对应的分支机构数据库中的保单表status字段,该事务使系统数据的完整性得到了保证。
4.2 分布式查询
分布式数据库系统中数据的分布导致查询也具有了分布性,分布式查询可能针对异类的OLE DB 或 ODBC 数据源。SQL Server 支持分布式查询,即包括来自两个或更多服务器数据的查询,支持服务器间的检索、更新和游标,并使用 Microsoft Distributed Transaction Coordinator (MS DTC) 保证节点间事务语义,维护服务器间的安全。
在系统设计的过程中,为了减少网络通讯量,我们根据应用的功能已将数据关系进行分片存放在各数据库中,因此大部分的应用是面向局部数据库的操作,但全局性的查询仍需要多个数据库的数据支持。在业务人员的管理模块中,由于各分支机构对其业务人员进行直接管理,且管理制度都有差异,我们将业务人员信息存放在分支机构的数据库中,通过联合分布式查询对公司所属的所有业务员进行登记;在客户管理模块中,我们根据来源将客户信息分别存放在业务数据库服务器的传统客户表和Web数据库服务器的网络客户表中,通过联合分布式查询才能对公司所属的所有业务员和客户进行登记,下面以年度的业务员查询为例介绍联合分布式查询的方法:
SELECT emp.emp_name, emp.emp_id,emp.emp_gender…
FROM DBServer1.business.dbo.employee AS emp
WHERE date between '01/01/2000' and '12/31/2000'
UNION
SELECT emp.emp_name, emp.emp_id,emp.emp_gender…
FROM DBServer2.business.dbo.employee AS emp
WHERE date between '01/01/2000' and '12/31/2000'
五、结论
分布式数据库技术引入保险信息管理后,有效的解决了数据分散和集中管理的矛盾,实现了数据的共享和交换。事实证明,分布式技术在远程数据管理中具有不可替代的作用。