一种基于时间戳的分布式数据库并发控制方法

来源 :中国高新技术企业 | 被引量 : 0次 | 上传用户:wwxxzz123
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:并发控制是分布式数据库中的一个关键环节,通过对分布式数据库中并发控制方法的分析和研究,以VS2008和SQL Sever 2008为平台,按时间戳顺序来处理并发冲突,实现了并发控制,保证了数据的完整性和一致性。
  关键词:分布式数据库;并发控制;时间戳
  中图分类号:TP311
  文献标识码:A
  文章编号:1009-2374(2011)22-0016-02
  集中式数据库因为其管理方便得了迅速的发展和广泛的应用,但是,随着信息的增多,若是频繁地访问某个数据库,将给中心服务器带来巨大的负担,同时,若中心服务器发生故障,或者导致数据的丢失,整个系统也会受到很大影响。而分布式数据库的诞生很好的解决了这些问题。
  分布式数据库是将数据分开存储,这大大加快了数据的访问效率。然而,分布式数据库中的并发控制却一直是一个不可逾越的鸿沟,并发控制的好坏直接关系到分布式数据库的性能优劣。本文就分布式数据库中并发控制的几种常用方法进行了描述,并用实例实现了按时间戳顺序处理并发冲突的问题。
  一、问题的引入
  两个或两个以上的用户并发地对数据库中的同一数据进行读写操作导致数据不一致,这时就需要通过并发控制来处理这种问题。常见的并发问题主要有以下几种:
  (一)丢失修改
  它是指两个事务读入了同一个数据,其中一个事务对数据进行了修改,这种修改的结果破坏了另一个事务对数据的修改,导致数据的丢失。
  (二)不可重复读
  不可重复读是指两个或两个以上事务对同一个数据库进行了读操作,其中的一个事务对数据库进行了修改,导致其它事务读数据时与前一次读的数据不一致。
  (三)读脏数据
  当两个以上的事务对数据库进行操作,其中某个事务对数据库中的数据进行了修改,其它事务读取到的是新修改的值,但是当那个事务因某种原因撤销,导致修改无效,则其它事务读取的数据与数据库中不一致。
  二、并发控制的常用方法和比较
  (一)锁
  通过对表或记录加锁,可以保证事务的串行化调度。锁的类型可分为两类,共享锁和排它锁。共享锁也叫读锁,当一个事务读数据时,其它事务可以对数据进行读写操作。排它锁也叫写锁,当一个事务写数据时,如果它没有释放该锁,其它事务都不能对该数据进行读写操作。
  根据锁的两个极端,又产生了悲观锁和乐观锁。悲观锁是指给某个事务分配了锁后,其它事务都不能对这个数据进行操作,只有当锁释放之后,才允许其它事务进行访问,它的时间比较长。乐观锁是指只有当用户对数据进行修改时才加锁,并且等到该操作完成之后才释放,它的时间相对于悲观锁较短。
  运用锁技术时,必须有相应的锁管理器对其进行管理,同时它还要解决可能产生的死锁问题。因此,虽然锁能较好的实现并发控制,但是由于其成本高,实现难而并没有全部应用在解决并发冲突的问题上。
  (二)时间戳
  时问戳的并发控制方法与锁不同,它是在事务建立时,为每个事务分配一个唯一的时间戳。事务的执行按照时间戳的顺序来执行,从而实现多事务的可串行性。
  时间戳的基本思想为:在数据的操作过程中,每个数据都存在着时间戳。时间戳又分为读时间戳和写时间戳,读时间戳是数据上一次读出的时问,而写时间戳是指最近一次写入数据的时间。只有当读时间戳大于或等于数据存取的时间戳时,才能执行写操作。当读取的时间戳与数据存取的时间戳相等,说明数据没有发生更改,这时不会导致并发冲突。而当读取的时间戳小于数据存取的时间戳时,说明数据已经发生了更改,这时,如果再对它修改,可能会导致并发冲突。如果发生冲突,则撤销原有的事务,并重新启动一个事务来解决。当事务重新启动时,再赋给它新的时间戳。
  运用时间戳来解决并发冲突问题时,它的最大优点是无须设置锁,因此,也不会有死锁的现象发生,但是它要求时问戳在系统中是唯一的。
  三、在VS2008中采用时间戳顺序的方法来解决并发冲突
  依照时间戳运用的原理,时间戳在整个系统中必须是唯一的,因此可以根据VS2008中的DateTime.Now可以获取系统的当时时间,而SOL Sever 2008中的DateTime类型也可以精确到毫秒,用于存取系统的时间。具体设计如下:
  (一)在SQL Sever 2008建立表
  在设计数据表时,因为要把时间戳考虑进去,可以有两种方法,第一种是设置一个全局的时问戳,让这个表中的数据都只有一个时间戳。第二种是为每一个数据设置一个时间戳。第一种设置减少了数据表的存取,但是当多个事务不是对同一个数据进行操作时,并不需要并发控制,因此它大大降低了数据访问的效率。在这里,采用了第二种设计方法,每一个数据都对应一个时间戳,这个时间戳是数据最后一次修改的时间。见表1:
  


  在表1中,行号作为主键,用于标识唯一的一条记录。数据是存放具体的数值大小,用于测试修改时,检测修改成功与否的问题。时间戳列用于存取数据最后一次修改的时间,不能为空,每一条数据都存在一个时间,它可以精确到毫秒。
  (二)VS2008具体实现过程
  并发冲突主要发生在读写不一致的情况下,当多个事务进行读操作时,并不会导致并发冲突。因此,在整个过程中,需要有读写操作。在整个界面上,还有一个dataGridView用于显示数据库中的数据。
  读操作因为不涉及到数据的修改,因此,直接将数据表中的信息显示到界面上即可。它可以通过点击dataGridView中的一行,取得这一行的所有数据,此时取它的时间戳,把它存取在一个变量中,在这里称它为读时间戳。它的代码如下:
  SqlConnection eonn=new SqlConnection(constr)://建立连接
  SqlDataAdapter ada
  new SqlDataAdapter(“select术from myTable”,eonn):
  DataSet ds=new DataSet():
  ada.Fill(ds):
  dataGridViewl.DataSouree=ds.Tables[0].DefaultView://将数据表中的数据显示到界面上
  int index=dataGridViewl.CurrentRow.Index://取得当前选中的行号
  string @Date dataGridViewl.Rows[index].eells[2].Value.ToString()://获得读时间戳
  写操作首先需要读取界面上的值,然后将该值写入到数据库,由于对数据库进行了更改,此时有可能数据已经不是原始读出的数据,因此其它再读写数据库时,可能存在并发冲突。为了解决这种问题,在这里引入一个判断条件,比较数据库中存放的时间戳与之前读的时间戳是否一致。当不一致时,说明这条数据已经修改,不能对它进行写操作,若此时再对它进 行的写操作就不成功。当一致时,说明这条数据没有发生修改,即可以对这条数据进行写操作。写操作中的核心代码为:
  SqlCommand cmd new SqlCommand(“updatemyTable
  set
  Number=’”+txtNum.Text+”’,Date=’”+DateTime.Now+”’where ID’”+@ID+”’andDate=’”+@Date+”’”,conn):
  通过行号和时间戳的一致来对数据库实现并发控制,保证数据的完整性和一致性。当写入不成功时,MessageBox.Show(“更新失败!”)来确认没有更新成功。若更新成功,也同样有相应的提示,此时数据库中的数据和时间戳都发生了变化,时间戳是写入数据时系统的时间,因此它是唯一的。
  四、结果测试与分析
  程序运行成功后,在多台计算机上运行,对同一数据库进行操作,首先进行读操作,每个计算机上面都能得到相应的表,各台计算机上面的读操作不会受其它计算机的影响。这也验证了读读操作不会发生并发冲突,也不需要使用并发控制来处理。
  程序在进行写操作之前,会先获得读间时戳,这时再来看写操作是否能执行成功。例如:A和B分别表示两台计算机,当A获得了读时间戳,B也获得了读时间戳,同时B对数据库中的数据进行了更新操作并写回到数据库,这时数据库中该数据对应的时间戳会发生变化,A想要进行写操作,会提示更新失败。分析如下:A想要进行写操作时,因它获得的时间戳为未修改之前的时间戳,与该数据对应的时间戳不一致,因此不能更新到数据库,它的操作也就不会成功,而只能再次读取,获得新的时间戳才能修改数据。这样就确保了写操作不会产生并发冲突。
  五、结语
  运用时间戳顺序在一定程度上解决了并发冲突,完成了并发控制,保持了数据的完整性和一致性。
  参考文献
  [1]王元恺.降低分布式数据库并发冲突的数据模型研究
  [D].上海师范大学,2009.
  [2]弓耀龙.分布式并发控制技术[J].山西电子技术,2010,(4)
  [3]贾智平,崔文静.分布式实时数据库系统中基于Web的
  并发控制[J]大连理工大学学报,2003,(10).
  [4]宋静.分布式并行数据库一致性机制研究与实现[D].
  电子科技大学,2006.
  责任编辑 王书柏
其他文献
发展绿色经济、低碳经济,把积极应对气候变化作为实现可持续发展战略的长期任务,已纳入我国国民经济和社会发展规划。作为环境容量有限的资源型城市铜陵来说,需要从低碳经济发展
承接政府转移职能和购买服务的对象主要是社会组织,但目前面临的最大难题是社会组织承接能力差,亟须探索提升社会组织自我发展能力的经验和路径。在目前政府转移职能、简政放权
目前,工程塑料被广泛应用于工业生产中,但工程塑料的相关缺点严重限制了其应用领域,工程塑料的改性则是突破这一局限的主要途径。文章在阐释工程塑料及其改性基本概念的基础上,说
振动挤密加固砂性土地基是在地基土中产生周期性振动挤压作用,从而使周围土体产生动孔隙水压力。挤密碎石桩在南水北调地震液化处理中效果显著、运用广泛。文章通过施工实例
抽油机减栽器减载活塞上下端面分别处在油管、套管两个不同的压力系统中,压力差作用于减载活塞的下端面产生一个向上托举力,可解决现有抽油设备悬点额定栽荷不足和抽油杆柱过重
从大部分企业年会的订货、吸款、总结、表彰、把酒言欢中开始,到二月份大江南北浓浓年味中原材料价格的悄悄上涨,而后再过渡到三月份终端活动的屡屡欠收,这是一个最具代表性的、