摘要
: 本文论述《金蚕工程》的分布式数据库的设计和实现。该项目的设计目标是实现企业间茧、丝等的合同交易(交易规则和期货交易一样)、实时行情和成交数据的发布、茧丝质押和质押数据的发布。所有功能均要求既能在企业局域网交易大厅和 Internet 上进行,许多功能又要在苏州和成都分中心进行。系统从设计时就把基于分布式数据库应用的可用性和可靠性作为系统一个关键目标。为了达到系统的上述要求,系统分别从数据库设计、应用数据集成和测试以及分布式数据库部署等做了大量工作。针对上述各部分,本文论述了分布式数据库的设计和实现及遇到过的典型问题和措施,最后对系统改进,谈一些自己的体会。 在项目开展期间,我担任了系统分析、系统设计与关键模块的编程等大量工作。
背景
该项目在 2020 年通过了浙江省软件评测中心的评测。 我于2019年底到 2020 年 6 月组织了中国茧丝绸市场由国家经贸部资助的《金蚕工程》一、二期项目的开发。由于原有系统存在如下问题: (一)原有系统采用传统 C/S 结构,客户端运行在 DOS 平台,后台使用 Foxpro 数据库。系统处理慢,前后台数据一致性,并且 Foxpro 服务器在交易高峰经常莫名其妙的死锁和 Down 机。 (二)市场是中国最大的茧丝交易市场,由于会员单位不断增加,原有远程电话拨入设备严重不够用,系统又不能通过 Internet 连接访问,进行合同交易和行情的及时查询,严重限制了市场的发展。 (三)原有系统只部分实现了合同交易和资金清算,功能和企业发展不相适应。 (四)由于会员在地区上分布不均匀,为了更好地服务于会员要求在满足一定条件下建立分中心交易系统。在这种情况下,市场决定开发基于 Internet B/S结构和基于 Xnetserver通讯中间件(类似 IBM MQSeries 的通讯中间件)的4-Tier 结构的综合软件,分中心采用基于分布式数据库地应用系统。一期项目包括:基于 4-Tier 的合同交易系统和资金清算系统,基于 Internet 的行情查询和信息发布的企业网站(www.es***.net)。
二期项目包括
二期项目包括:茧丝质押、仓库管理系统、 Internet 质押查询系统和分中心交易和资金结算系统。 鉴于该项目业务比较复杂,流程比较多,系统要兼顾企业交易大厅会员、远程 Internet 交易的会员和分交易中心会员,项目完成时间短等特点,为了既要项目的按期投产又要实现基于分布式数据库的分中心交易和资金结算系统,我从数据库选型、数据库设计、应用数据集成和测试以及分布式数据库部署如下工作。
数据库选型
(1)数据库选型。现在的主流数据库一般都可以按分布式进行部署,例如:SQL Server、Oracle、Informix和 DB2 等。由于一期项目的数据库平台是选择了 Oracle 7.0,经过了近一年的运行,其数据自动备份、多用户并发处理性能、磁盘表空间管理、Web数据发布等表现良好。我公司又由于开发过基于该平台的分布式应用系统,公司对其分布式实施也有相当的经验,所以经我们开发部相关人员的讨论,我决定在各分交易中心继续采用Oracle数据库来实现,其分布功能主要基于SQL.Net来完成。
分布式数据库设计
(2)分布式数据库设计。由于各交易品种的每节交易价格由市场的交易大厅决定,所以各分中心必须在每节交易开始前取得相关的交易数据。各分交易中心必须保留其会员已经交易成功的买入和卖出交易数据,并根据会员需要进行资金结算。经对分交易中心充分业务需求分析后,我觉得分交易中心的主要功能还是和主市场交易中心(简称:主中心)功能是一致的,只不过分交易中心的会员数比较少和无需保留各节的历史交易行情,所以,分中心的主要数据库中的各表还是照搬主市场数据库的各表,分中心只保留各自的会员基础数据和成交数据,保留会员历史交易数据,只保留当前的各节的交易行情,不保留历史行情。主中心必须保留各分中心的各项明细数据,主中心也必须及时计算分中心会员的汇总资金,所以主中心必须增加分中心汇总资金表。
数据集成
(3)数据集成。为了保证分中心及时下单,必须保证每节的交易行情要及时的传送到各交易分中心。节处理最后一步必须把下一节的交易行情传送送各交易分中心。同时下发给分中心的数据还有,分中心本节各会员的成交数据。由于主中心保留各分中心的各项数据,所以,分中心有新的会员加入必须同时更新分中心和主中心数据库;分中心会员资金有变动时也必须同时更新主数据库。由于各会员只能在当日交易结束后才能进行数据平仓,所以分中心平仓数据汇总后同意发送到主中心进行平仓。在上述设计的数据库到数据库操作的数据完整性和一致性由数据库的二阶段提交( 2 Phase Comit )来保证。由于Oracle 是一个比较成熟的数据库平台,又由于每次事务都不大,所以运行到现在也没有发现数据不一致现象,没有出现“单边帐”,数据处理也比较快。为了近一步保障各中心数据的一致性,我还做了一个同步程序,由主中心发起,对主中心和分中心数据进行比较。该程序可定期进行。
测试
(4)测试。由于一期项目已经运行了相当长的一段时间,系统已经相当稳定了。由鉴于2 Phase Commit 出色表现,所以基于分布式的测试没有觉得和集中数据库有太大的区别。唯一的感觉是在第一次建立远程数据库连接时,连接速度比较慢(有时超过20秒)。为了提高测试速度,我在同一个局域网中安装了三套Oracle,分别充当主中心和两个分中心进行测试。
部署分布式数据库
(5)部署分布式数据库。和集中时式的数据库不同,采用分布式系统,必须配置SQL.NET。其他的Oracle组件和子系统安全同本地安装数据库一样。 分布式数据库在逻辑上属于同一系统,使得应用不必关心远程数据库的物理位置,就可以像访问本地数据库一样访问远程数据库。采用分布式数据库可充分提高系统的处理能力、均衡网络负载,所以该分布式数据库应用方案在银行代收、代付业务处理、保险代理点等单位和机构中大量采用。但由于近些年来通信基础建设比较迅速,特别是2M、10M和100M光纤的推广,又为了节省下属网点的机房费用,各单位又不约而同的采用的集中方案。
扩展阅读
1.数据库
数据库(DB)是存放数据的仓库,而且这些数据存在一定的关联,并按一定的格式存放在计算机内。例如,把一个学校的学生、课程、成绩等数据有序地组织并存放在计算机内,就可以构成一个数据库。
2.数据库管理系统
数据库管理系统(DBMS)按一定的数据模型组织数据形成数据库,并对数据库进行管理。简单地说,DBMS 就是管理数据库的系统(软件)。数据库系统管理员(DataBase Administrator,DBA)通过DBMS对数据库进行管理。
目前,比较流行的DBMS有:Oracle、SQL Server、MySQL、Sybase、DB2、Access、Visual FoxPro等。其中,Oracle是目前最流行的大型关系数据库管理系统。本书介绍的是最新的Oracle 11g版。
3.数据库系统
数据、数据库、数据库管理系统与操作数据库的应用程序,加上支撑它们的硬件平台、软件平台和与数据库有关的人员一起构成了一个完整的数据库系统。如图1.1所示描述了数据库系统的构成。
数据库管理系统根据数据模型对数据进行存储和管理,数据库管理系统采用的数据模型主要有层次模型、网状模型和关系模型。1.层次模型
层次模型将数据组织成一对多关系的结构,采用关键字来访问其中每一层次的每一部分。它存取方便且速度快;结构清晰,容易理解;数据修改和数据库扩展容易实现;检索关键属性十分方便。但结构不够灵活;同一属性数据要存储多次,数据冗余大;不适合于拓扑空间数据的组织。
如图1.2所示为按层次模型组织的数据示例。
图1.2 按层次模型组织的数据示例2.网状模型
网状模型具有多对多类型的数据组织方式。它能明确而方便地表示数据间的复杂关系;数据冗余小。但网状结构的复杂增加了用户查询和定位的困难;需要存储数据间联系的指针,使得数据量增大;数据的修改不方便。
如图1.3所示为按网状模型组织的数据示例。
图1.3 按网状模型组织的数据示例3.关系模型
关系模型以记录组或二维数据表的形式组织数据,以便于利用各种实体与属性之间的关系进行存储和变换,不分层也无指针,是建立空间数据和属性数据之间关系的一种非常有效的数据组织方法。它的结构特别灵活,概念单一,满足所有布尔逻辑运算和数学运算规则形成的查询要求;