数据库学习笔记_17_可串行化——let’s call it
Serializability —— 这个单词竟然不被接受啊……惊了,怕不是生造单词
serializability,中文翻译为可串行化,这让我感叹一下看来理工行业的先行者们的命名无能这个特性是不分国界的啊……
或者说就是因为这种过于术语的命名规范才使得理工看起来很难理解吧。
回归重点,上个笔记我们讲到了并发和串行(或者说顺序)的区别,有灵性的读者可以看出,并发必然是由串行的执行指令顺序交换而得出的,那么这次我们就要讨论怎么样的交换是合理的,怎么样的交换是不合理的。
以上是一个最简单的交易列表,我们假定read(A)是向硬盘里读取A的数据,write(A)是向硬盘里写A的数据。
接下来有4种可以讨论的情况:
1. i=read(A),j=read(A),那这个时候i和j谁在前面是不要紧的,都可以对换。
2. i=read(A),j=write(A),这个时候不同的顺序带来的结果是不同的,比如说j先行,那么i读到的结果是j写进去的,反之则没有。
3. i=write(A),j=read(A),类似于上面
4. i=write(A),j=write(A),这个看起来谁写都一样,但是考虑到他们本身读的函数可能顺序不一样,所以还是可能带来不同的结果,所以说不一样。
就上述的研究我们可以得出结论:在读同一个数据的时候,若双方有任意一个为写操作,则可能因为顺序不一样造成不同的结果。
故我们把2,3,4中的i,j这样的两个操作称为矛盾操作,而其他的操作成为非矛盾操作。
此处易知对两个不同数据进行操作不会因为顺序的差别造成任何的关系:你无论对b进行多少次操作都不会影响到a的读写。
由上述理论可知,交换两个非矛盾的操作顺序,并不会造成任何的结果差别,但是出来的是一张不同的schedule,我们把这种能由原来的schedule经过多次非矛盾操作交换得到的schedule称为矛盾等价(conflict-equivalent——好吧他们的语文老师又死了)。