分布式数据库是在集中式数据库系统成熟技术的基础上发展起来的,它使物理分布的数据构成了一个逻辑整体。对用户来说,一个分布式数据库系统逻辑上就如同一个集中式数据库,用户可以在任何一个场地执行全局应用。Informix是一个具有跨平台、全功能的关系型数据库,它可在Online 7.1以上版本中将I-star等网络产品进行集成,并使其不但支持本地数据库,而且支持分布式数据库。
当前,银行、保险等金融行业均存在多业务处理系统,比如银行的综合业务、代理业务,保险的出单业务等,各业务系统常驻留于不同的主机上。为达到系统间数据共享,提高数据的安全性及完整性,增强整个系统的应用功能,需要构建分布式处理,这在实际应用中已显示出重要的作用。建立在Unix基础上的Informix分布式数据库,需对服务器端的文件hosts、hosts.equiv、services、sqlhosts作相应设置。
一、 服务器端的配置
假设在网络上有两个数据库服务器,分别命名为motor2000、zhtj2000,网络连接采用TCP/IP协议。
设置网络结点:
/etc/hosts.equiv
gztb_motor
gztb_zhtj
设置网络结点机器名及IP地址:
/etc/hosts
161.83.1.1 gztb_motor
161.83.1.2 gztb_zhtj
设置数据库服务的Services名称及端口号:
/etc/services
sqlexec_1 9991/tcp
sqlexec_2 9992/tcp
端口号9991、9992不能与已有的端口号重复。
设置服务器名称、端口、协议间的对应关系: $INFORMIXDIR/etc/sqlhosts
motor2000 ontlitcp gztb_motor sqlexec_1
zhtj2000 ontlitcp gztb_zhtj sqlexec_2
通过sqlhosts这个设置文件可知道motor2000数据库服务器位于gztb_motor结点上,并且其Services名为sqlexec_1,对应端口号为9991,从/etc/hosts可知网络服务器gztb_motor的网络地址为161.83.1.1,再通过9991端口号向网络地址为161.83.1.2的zhtj2000数据库服务器提出数据操作的请求。 二、 分布式数据库的使用范例
假设在motor2000服务器中有motor数据库(insur_f、veh_list是其中的表),zhtj2000服务器中有zhtj数据库(tj_ssfy、tj_chb 是其中的表)。
例1 从zhtj2000主机发出SQL命令,检索出motor中insur_f 表的所有数据,且insur_f的p_no字段值在zhtj数据库的tj_ssfy表中 。
SELECT p_no
FROM motor @ motor2000:insur_f
WHERE p_no IN (SELECT dzhhm FROM zhtj:tj_ssfy)
例2 把motor2000服务器veh_list表中的数据插入到zhtj2000主机的tj_chb表中 。
INSERT zhtj:tj_chb
SELECT * FROM motor @ motor2000:veh_list
WHERE p_no NOT IN (SELECT dzhhm FROM zhtj:tj_chb)
例3 用zhtj2000服务器的tj_ssfy表中的shshje合计值更新motor2000服务器中insurf表的act_pre字段值。
UPDATE motor:insurf SET act_pre =
(SELECT sum(shshje) FROM zhtj@ zhtj2000:tj_ssfy
WHERE dzhhm = insurf.p_no) 三、 调整分布式数据库的通讯量
在多Online主机数据交互操作性强、网络负载较重情况下,网络通讯极易成为制约数据库应用性能的“瓶颈”,这时通过调配主机间的通讯流量,可极大地提高分布式数据库的综合性能。具体方法有如下4种:1在服务器端建立经过系统优化的常用存储过程,把更多的工作交由数据库服务器完成;2创建触发器TRIGGER,它是一种特殊的存储例程;3用prepare对SQL语句进行预处理,减少数据库系统对SQL语句分析的信息传输量;4适当增大共享内存的大小。以上方法均可有效地减小网络通讯的数据流量,减轻网络的负载。