计算机应用研究
APPLICATION RESEARCH OF COMPUTERS
2000 Vol.17 No.3 P.40-42,61




DM2分布式管理技术研究
李东　冯玉才　王元珍
摘　要：长期以来，由于没有我国自主版权的DBMS，几乎现有的MIS全都建立在国外的DBMS之上，甚至一些要害部门的MIS也不例外，这就存在一些严重问题：功能不能满足应用要求；软件集成困难；安全保密潜在巨大威胁；价格昂贵；版权纠纷时有发生。DM2是拥有国产自主版权的分布式DBMS系统，它采用当前最流行的客户/服务器模型结构。介绍了DM2中采用的分布式查询处理、事务处理、并发控制、故障恢复等技术。
关键词：分布式数据库管理系统 并发控制 事务处理 故障恢复 体系结构
1　引言
　　长期以来，由于没有我国自主版权的DBMS，几乎现有的MIS全都建立在国外的DBMS之上，甚至一些要害部门的MIS也不例外，这就存在一些严重问题：
　　1)功能不能满足应用要求。现有的商用DBMS一般都不能直接管理诸如地图一类的复杂对象。
　　2)软件集成困难，甚至无法进行。有些功能涉及到许多软件的集成，如DBMS、网络、汉字、多媒体软件等。一些主要软件因为是从国外买进，所以无源代码，集成和修改就十分困难，往往因此耗费大量时间，严重影响了工程进度。
　　3)安全保密潜在巨大威胁。将关系国家安危和机密情报的系统建立在国外的DBMS之上，本身就存在巨大威胁，以至后患无穷，如病毒破坏和利用计算机窃取情报都可能从根本上摧毁所建立的系统。
　　4)价格昂贵，国力难以支持推广。
　　5)版权纠纷时有发生。
　　因此必须研制自主版权的DBMS。华中理工大学计算机学院数据库多媒体所研究开发国产DBMS已有18年的历史。先后开发了十几种数据库管理系统，有代表性的如汉字关系数据库管理系统CRDS；图形数据库管理系统GDB；知识数据库管理系统KDB；地图数据库管理系统MDB；SQL标准关系数据库管理系统ADB；网络多用户数据库管理系统DM1；面向对象分布式数据库管理系统DM-ODA；综合数据库管理系统WMDB等等，并多次获奖。
　　DM2是分布式多媒体数据库管理系统的简称，它是华中理工大学达梦数据库多媒体技术研究所科技人员经过十多年艰苦奋斗，总结了多项成果的经验教训研制开发的国产数据库管理系统。在研制DM2的过程中分布式管理技术是其中的关键技术。
2　DM2体系结构
　　DM2系统采用当前最流行的客户/服务器模型结构。系统由多个服务器和多个客户机组成。服务器一般由高档微机或工作站组成。这些服务器上均运行有DM2服务器Server，它们之间通过网络相连，互相协作来完成各种对数据库的请求，服务器的个数可以动态地随机增减。每个服务器可向一个或多个客户机提供服务。客户机一般为档次较低的微机，在其上运行DM2系统提供的各种工具集(如预编译系统、交互式ISQL等)。客户机与服务器之间也通过网络相连，客户机通过发消息向服务器提出请求以存取数据库。每个客户机只能对应一个服务器，服务器本身亦可兼当客户机。结构如图1所示。

图1　DM2总体结构
　　在DM2分布式数据库中，数据库在物理上可存放在多台服务器上，从逻辑上是一个整体，用户在使用数据库时感觉如同操纵集中式数据库一样。DM2的分布式数据库对用户是透明的，用户不必了解其所需数据存放在哪个节点。DM2的分布透明性使得用户在查询时只需指出所查对象的全局关系，其余的工作都交由系统完成。
3　DM2分布式查询处理
　　一般来说，建立数据库就是为了使用，使用就是“查询”。当建立了分布式数据库，就存在分布式查询。所谓分布式查询是指从两个或多个结点上检索信息。进行DM2分布式查询时用户只需指明所查内容和对象，不必指定对象所在地点，就可以获得查询结果。
　　在关系模型的DBMS中，查询的效率一直是一个困难而又非常重要的问题，DM2系统的查询优化子系统有效地提高了核心系统的效率，DM2实现了逻辑优化和物理优化，使DM2具有较高的查询效率。
　　在分布式查询过程中，DM2系统的查询处理模块根据客户程序发来的查询消息，进行处理并得到查询的最终结果。查询处理的存取方法包括索引查询、聚簇查询和全表扫描等。查询的存取路径由查询优化程序决定，所依据的标准是不同的存取路径估算代价，给出一个计费标准，存取路径选择的信息在查询消息结构名给出。比如，查询处理在查询消息中找到可用索引或聚簇的谓词。并且这个索引或聚簇仍然有效，则查询处理程序就采用这个索引或聚簇查询。如果对于一个关系的查询，没有任何一个谓词因子能用索引或聚簇，而且没有其它有效使用索引的方法，则DM2分布式查询采用全表扫描的方法完成查询。如果查询的谓词中没有索引可用，而GROUP BY子句或ORDER BY子句的列上可用索引，则DM2分布式查询以这个索引进行查询，其结果是有序的，因而能减少一次排序运算。
　　DM2分布式查询经过分解后可能存在远程查询、本地查询。查询之间又可能要进行连接处理。DM2中涉及分布式特点的查询主要包括远程查询处理和分布式连接查询。
　　远程查询的处理策略是，由分布式查询优化决定将该查询发送给存储该关系的站点去执行，如果消息处理程序要完成一个远程查询，则它将这个远程查询发出，并等待查询结果返回。处理远程查询的线索先设置其唤醒的触发器事件为“等待一个远程查询结果”，然后挂起并转入调度线索。当查询结果到来之时，该线索从等待状态转入就绪状态，并最终被调度，此时查询处理程序就能进行后续处理。
　　分布式连接查询是涉及多个服务器站点上关系的连接查询，分布式连接查询的处理方法是首先将连接分解，然后交给多个站点去执行远程查询任务，最后完成连接运算。
　　分布式连接查询分解由分布式查询优化程序完成，分解后的查询可以交给具体的服务器独立完成。当查询处理程序处理这类查询时，它将分解后的多个查询向各自的服务器站点发出，并同步等待查询结果的到来。当某个查询结果(临时表的形式)到来时，可以唤醒该处理线索将查询结果接收过来；当所有查询结果都到来之时，就可以不必同步等待地进行最后的连接运算。
　　如果分布式连接涉及到本地的查询，则查询处理程序发出远程查询后，可以先进行本地处理，而不必将线索挂起，这样可以使本地查询和远程查询并行工作。
4　DM2分布式事务管理
　　一般来讲，数据库系统中的事务指的是用户在数据库上的一次原子操作过程，是保证数据库正确的最小运行单位。
　　在集中式数据库管理系统中，任何数据库应用都是对数据库进行存取的一个操作序列。为了保证数据库的正确性及操作的有效性，将一个或一段应用操作序列的执行定义为事务。更准确地说，事务是保证数据库正确的最小运行单位。它具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration)，即事务ACID性。和集中式事务一样，分布式事务也是一个应用的操作序列，是用户对数据库存取操作序列的执行的最小单元。DM2的分布式事务也满足ACID特性，DM2的事务有主事务和子事务之分，子事务由主事务创建。
　　DM2的事务结构分为主事务结构和子事务结构(核心事务结构)。主事务结构主要用于分布式处理时分解分布式消息为分布式子消息使用，在DM2系统中主事务又常称为分布式事务。子事务结构则在核心处理消息时使用。
　　在主事务结构中包含的信息主要有：使用标识、用户标识、主事务标识、消息链链头、子事务信息链链头。其中子事务信息链链头指向子事务信息结构，该信息结构中包含的信息有：子事务站点号，子事务的标识，子事务执行状态及指向下一条子事务信息的指针。
　　子事务结构用于核心处理消息时存储事务处理的必要信息，主要包括事务标识，消息链链头，用户私有数据区，临时表和游标等信息。
　　当客户向其代理服务器进程登录时，就为该客户建立一个分布式事务结构。在与这个分布式事务相关的各个局部结点(包括本地的和异地的)上，建立该分布事务的子事务结构，以便于该事务在这些结点上的处理。局部子事务是由代理服务器进程发送子事务登录命令来建立的。分布式事务结构和它相应的子事务结构共同记录了客户事务的当前处理状态。
　　DM2系统中，每个事务都有自己的私有更新区，事务的所有操作都在自己的更新区进行。当事务没有提交时，其它事务是不可能感知的。事务要读数据时，首先在自己的私有缓冲区中找，当私有缓冲区中没有时，再到系统缓冲区和数据库中去找。显然，这种技术保证了当一事务更新时，其它事务读到的数据是系统缓冲区和数据库中没有更改的数据，从而保证了共享更新和无竞争读的正确性。当然，无竞争读还基于更新事务滞后提交。所谓更新事务滞后提交是指更新事务必须等待正在读与之相同数据的那些事务提交了以后再提交，并且暂时不让新事务读相同的数据。
　　在子事务结构中创建的用户私有数据区、临时表、游标等是DM2采用事务私有更新区技术的基础。事务私有更新技术结合更新事务滞后提交等技术实现了DM2数据无竞争读机制，保证了对读事务的开放性，大大提高了系统的查询效率。
　　当系统发生故障时，为了保证数据库处于一种正确的状态。事务总是把数据库从一个正确状态改变到另一个正确的状态。因此当发生故障时，恢复机制可以做的是，要么把数据库的状态改变成事务执行前的状态，要么改变成事务执行后的状态。
　　在分布式系统环境中除了可能出现集中环境中的故障外，还可能产生新的故障，主要有通讯故障和网络分割。DM2事务的原子性的维护也是由DM2的恢复机制来保证。为了实现DM2分布式事务的提交，DM2系统采用的是两段提交方法，即由代理服务器(主事务所在的站点)首先向具有子事务的站点发送预提交消息(命令)，当代理服务器收到了各子事务预提交成功的消息后，再次向各子事务的站点发送正式提交消息。预提交只是把用户私有缓冲区的数据写入后映象文件(AI)，正式提交才把数据写入系统缓冲区和数据库。在预提交过程中，只要有一个子事务不成功，系统就将该事务回滚。在全部子事务预提交成功后，即使系统出现了故障，在系统重新启动后，该事务仍然有效，因为预提交已写好了后映象文件(AI)，此时只要将该事务AI文件中的内容写入数据库中即可。这样DM2分布式事务是可恢复的，从而保证了分布式事务的原子性。
5　DM2分布式并发控制
　　分布式并发控制的主要目的是保证分布式事务及分布式数据库的一致性。它要保证分布式事务的可串行性，同时又要保证分布式事务具有良好的并发度，以保证系统具有用户满意的效率。DM2系统的事务调度模型是锁模型，该封锁方法的基本思想基于的原则是：事务对任何数据的操作必须先申请该数据项的锁，只有申请到锁以后，即加锁成功以后，才可以对数据项进行操作。操作完了以后，要释放已申请的锁。通过锁的共享及排斥的特性，实现事务的可串行化调度。通过封锁机制实现DM2的分布式并发控制。
　　为了保证DM2分布式事务的可串行性，系统采用了两段锁协议(2PL协议)。DM2分布式事务在执行时是以场地为基础划分为多个事务进行执行，而子事务的操作是全局事务操作序列的一部分。并发执行的多个事务对数据进行操作前要进行加锁，且保证每个事务中的所有加锁操作在第一个解锁操作以前执行。每个事务中的加锁操作和解锁操作分布在两个部分。由于DM2在分布式事务上采用2PL协议加锁，因而它在不同场地(站点)的全部子事务也是2PL协议加锁的。
　　在分布式并发控制中，当采用锁方法时就可能出现死锁的情况。在DM2分布式数据库系统中，事务和事务之间可能形成一种分布式等待图。在某一个结点上，事务之间由于竞争资源而引起等待并形成一个局部等待图。在DM2中局部事务采用的是避免死锁的方法，分布式数据库中所有站点上的等待图叠加后就形成为一个分布式等待图。如果等待图中出现了有向环，则表明出现了分布式死锁。
　　DM2分布式事务采用的是超时检测法来检测死锁。这种解决死锁问题的方法是，对系统中运行的远程访问的某事务，判别其是否超过某一时间限制，若超过了时间限制，则激活DM2系统中某个指定服务器进行死锁检测。在该服务器进程中集中各站点的局部等待图并合成为一个分布式等待图，然后检测其中有无形成有向环。若检测到死锁则认为系统处于死锁状态，进入死锁处理过程，夭折该事务，释放其占用的资源。这种方法的最大优点是，没有额外的控制报文的传递，也不像基于时间戳的死锁检测算法要经常夭折事务。
6　DM2分布式故障恢复
　　在DM2数据库系统中，局部场地上的数据库系统就是一个集中数据库系统。其恢复主要是针对数据的丢失。局部数据库系统的数据丢失主要由存储介质故障引起的。
　　DM2分布式数据库系统中，除了有集中式数据库中可能发生的故障外，它还有自己特有的故障模型，主要体现在系统中场地间的通讯故障。通讯故障可以分为以下两种：报文丢失和网络分割。报文丢失是指传送过程中报文的丢失导致数据不正确。在DM2中，采用的是TCP/IP协议，加之采用了相应的诸如超时处理等措施从而保证了在出现报文丢失故障时能恢复正常。网络分割是指通讯网络中一部分场地和另一部分场地之间完全失去联系。DM2系统运行在局部总线型网络上，任何两个节点之间都能直接互相通信，造成网络分割总体上分为两类：1)网络的线路中断；2)某一个节点的网络通信系统发生故障。由于DM2系统采用面向连接的套接字服务作为网络通信手段，因此，网络故障的检测较为方便，当网络连接断开时，说明可能有故障发生，当检测到故障时，就进入相应的处理例程进行故障处理。下面将介绍DM2对网络分割的恢复策略。
　　DM2系统中每个站点上都有对其它站点的描述，从一个站点来看，DM2系统中其它站点从大体上分可能处于三种状态，即完好、失败或不确定状态之一。
　　所谓完好(GOOD)状态表示此站点与本站点通信正常；失败(FAILURE)状态表示此站点系统崩溃或与本站点失去联系；不确定(UNCERTAIN)状态则表示此站点与本站点连接断开，还在试图重连接，处于不确定状态。
　　站点的故障状态转换的过程可用图2表示。

图2　站点的故障状态转换图
　　核心进程实施远程访问时，先要检查所访问站点的状态。如果为GOOD就正常工作，如果为FAILURE则返回错误码，如果为UNCERTAIN则让当前线索睡眠，等待该站点状态变为GOOD或FAILURE后再作相应的处理。
　　DM2系统具有效高的可靠性。当网络故障发生时，所有站点还能继续有限地运行，而当网络故障修复以后，中断联系的站点之间还能及时地恢复连接。
　　系统运行过程中发现有故障站点存在时，则会定时地给这些站点发送连接请求。当故障是因网络发生分割而产生时，对方站点也会视此方为故障站点，也在不断地向此方发送连接请求。这样如果网络分割恢复，则双方的全双工的联系必将成功地建立起来。故障恢复以后必须唤醒因这个故障而等待的线索。
7　结束语
　　DM2是数据库多媒体所经过十八年的技术积累和五年的研究开发推出的具有自主版权的分布式多媒体数据库管理系统。其中分布式管理技术是其关键。DM2的分布式应用就标志着DM2分布式管理技术研究的成功。目前DM2已成功用于电力、财务、人事、旅游、消防等多个应用领域，打破了国外软件在中国一统天下的局面，产生了良好的经济和社会效益。最具代表性的是与电力部华中电力集团财务有限责任公司合作使用DM2开发的一个覆盖四省七地的大型远程分布式MIS系统CWMIS，包括：财务、信贷投资、计划、稽核、人事、工资、保险、文书档案、综合查询等八个子系统，总投入500万，正逐步在电力系统76个同类型的公司推广使用。
李东(华中理工大学计算机学院 武汉 430074)
冯玉才(华中理工大学计算机学院 武汉 430074)
王元珍(华中理工大学计算机学院 武汉 430074)
参考文献
1 周龙骧等. 分布式数据库管理系统实现技术. 北京：科学出版社, 1998
2 郑振楣, 于 戈, 郭 敏. 分布式数据库. 北京：科学出版社, 1998
3 华中理工大学计算机学院数据库多媒体所. 分布式多媒体数据库管理系统DM2用户手册. 1998
收稿日期：1999年8月3日
