论文摘要
数据库是现实世界中某些现象或活动的状态和演化【1】。由于许多数据要一起被访问和修改以便正确反映现实世界,因此必须保证相关数据的一致性。任何对相关数据修改的中断,或对相关数据访问或修改的交错,都会造成数据的不一致。保证数据一致性的关键是要明确数据访问和更新的序列,这一序列就是事务。因此,可把对数据库的访问、更新划分为称为“事务”的基本原子单位,一个事务要么全做,要么全不做(即all-or-nothing 原则);用户在对数据库发出操作请求时,需要对有关的数据“加锁”,防止不同用户的操作之间互相干扰;在事务运行过程中,采用“日志”记录事务的运行状态,以便发生故障时进行恢复;对数据库的任何更新都采用“两阶段提交”策略来保证数据库的一致。DPSQL 是由电子科技大学8010 研究室自主研发的分布式并行数据库系统。在DPSQL 实现中,数据一致性存在下面的问题:如果DPSQL 采用双日志系统,底层InnoDB 的事务日志和 DPSQL 的上层SQL 日志的不一致可能导致数据的不一致。如果DPSQL 采用标准的分布式两阶段提交协议,在事务提交阻 塞发生阶段可能会出现消息等待超时、消息乱序等问题,导致数 据不一致。本文解决的数据一致性是只针对上面两个问题的狭义的数据一致性。在深入研究的基础上,本文首先详细分析了InnoDB 的事务实现机制,介绍了分布式并行数据库DPSQL 的分布式事务机制,主要是其分布式事务日志机制的实现策略。DPSQL 系统采用改进的两阶段提交协议,来确保事务故障恢复的数据一致性。文章重点研究了两阶段提交协议机制,特别是改进的两阶段提交协议进行故障恢复的实现。在分析、比较标准两阶段提交协议、三阶段提交协议及各种改进两阶段提交协议的不足之后,本文提出了一种新的基于状态缓存的询问式两阶段提交协议(SQ2PC)。SQ2PC 对2PC 的主要改进是解决两阶段提交协议阻塞发生时的事务处理