首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MVCC事务总结(二)

逻辑时钟的背景

在MVCC的理论中,需要一个能力,能够识别整个系统中的所有事件(事务开始,事务提交)的先后关系。即系统中的所有事件能够在一个有向轴上,描述他们的先后关系,即事件是全序的。一般在分布式系统特别在分布式的数据库中把有向轴定义为时间轴,因此一个事务通常都有一个开始的时间戳和一个结束的时间戳。

但是在分布式系统中,基本上做不到一个统一的时间轴(即使使用NTP服务,依然有误差和跳变的问题, 哪怕是google spanner 的 true time 依然使用的是一个事件范围),因为时间相对的 (侠义相对论)。

于是Lamport 大师的逻辑时钟就闪亮登场,在他定义的逻辑时钟算法,给分布式系统里面定义了一个有向轴,把分布式系统里面的事件放在有向轴中,以所有事件都达到全序关系状态。

参见论文

time clocks and the ordering of events in a dritribute system

http://www.stanford.edu/class/cs240/readings/lamport.pdf

在论文中系统的事件分为三类

本地事件

发送消息事件

接收消息事件

WIKI的描述

algorithm

The algorithm follows some simple rules:

In pseudocode, the algorithm for sending is:

The algorithm for receiving a message is:

通俗一点讲

每个进程都有一个计数器,进程每发生一个事件,本地的计数器加1

进程在执行一个发送消息的事件时,要把本地时间戳(进程计数器的值)带到消息内部,一个进程接到该消息的时候,要把本地的计数器的值设置为max(消息带的时间戳的值,本地计数器的当前值)

结论

在数据库中定义事务的开始时间点和提交时间,就是可以逻辑时钟来定义。本地事件发生时,发生的逻辑时钟的时间就是本地计数器的值。就可以使用逻辑时钟确定任意进程间中任意事件的前后关系。

如何解决这个问题,待续的下一篇 混合逻辑时钟和spanner true time。

.......................... END..........................

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180411G1S1SS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券