手把手玩转协同编辑(1):AST (Address Space Transformation)地址空间转换算法 基本介绍...
寫在前面的話
加入實(shí)驗(yàn)室已經(jīng)有大半年的時(shí)間了,科研上一直沒(méi)有取得什么重大突破。除去自身的實(shí)力問(wèn)題之外,最大的問(wèn)題恐怕就是對(duì)于自己或?qū)熖岢龅囊粋€(gè)問(wèn)題往往不知道從何入手去研究,如何快速的了解相關(guān)工作的現(xiàn)狀。相信這個(gè)導(dǎo)致我進(jìn)步緩慢而且不斷走彎路的主要原因。
寫下這篇博客,出發(fā)點(diǎn)是為了能夠記錄自己在學(xué)習(xí)AST時(shí)的一些總結(jié)和感想,分享給以后的自己和實(shí)驗(yàn)室的小伙伴們。
?
看論文的方法
首先,對(duì)于一個(gè)剛進(jìn)實(shí)驗(yàn)室的我來(lái)說(shuō)如何找一個(gè)相關(guān)領(lǐng)域的優(yōu)質(zhì)論文是一件很棘手的事。因此,暫且把我現(xiàn)在找論文的一些心得記錄下來(lái),大神勿噴謝謝!
首先給出ccf推薦排名?http://www.ccf.org.cn/sites/ccf/paiming.jsp
在這個(gè)鏈接中有個(gè)領(lǐng)域的權(quán)威會(huì)議和期刊并且給出了在dblp【http://dblp.uni-trier.de/db/】上的鏈接,由于google學(xué)術(shù)需要FQ所以上述兩個(gè)網(wǎng)站基本是我搜索論文的主要途徑。
搜索論文的三要素:引用,被引用,作者
可以從一篇論文的相關(guān)工作出發(fā),他引用的尋找權(quán)威會(huì)議的論文
可以從一篇論文的相關(guān)工作出發(fā),尋找他被引用數(shù)多的引用論文
尋找一個(gè)領(lǐng)域的權(quán)威作者,搜索這個(gè)作者的相關(guān)論文
除去這幾點(diǎn)之外,平時(shí)也需要廣撒網(wǎng)沒(méi)事看看相關(guān)領(lǐng)域會(huì)議論文的摘要,一篇一篇看這樣也能對(duì)他們?cè)谧鍪裁从幸恍┝私狻?/span>
?
AST(地址空間轉(zhuǎn)換)的預(yù)備知識(shí)
從下文開始我會(huì)結(jié)合一些論文介紹一些ast的預(yù)備知識(shí),相關(guān)論文會(huì)以引用的方式出現(xiàn):
需要入門ast第一個(gè)要看的必定是老板的論文[1,2],好在中英文版都有。不過(guò)有略微的區(qū)別,需要對(duì)照的看。
AST的有什么用?
AST的應(yīng)用領(lǐng)域可以說(shuō)是比較廣泛的,一個(gè)重要的領(lǐng)域就是協(xié)同編輯[支持多個(gè)用戶在不同的計(jì)算機(jī)終端同時(shí)協(xié)同處理共享文檔]:Demo和若干產(chǎn)品 collabedit?石墨?google drive?One drive等等。AST是用來(lái)處理并發(fā)操作沖突的一個(gè)算法,那為什么會(huì)產(chǎn)生并發(fā)操作呢?
?
?
圖1
各個(gè)站點(diǎn)的操作執(zhí)行序列
站點(diǎn)1:操作1 -> 操作3 -> 操作2
站點(diǎn)2:操作2 -> 操作1 -> 操作3
站點(diǎn)3:操作3 -> 操作1 -> 操作2
圖1所示的三個(gè)操作為并發(fā)操作,當(dāng)并發(fā)操作發(fā)生的時(shí)候若不加以算法控制會(huì)導(dǎo)致各個(gè)站點(diǎn)上執(zhí)行效果完全不一致。
操作間的關(guān)系
在分布式系統(tǒng)中沒(méi)有辦法保證各個(gè)站點(diǎn)的時(shí)鐘精確一致,因此不能通過(guò)時(shí)鐘確定操作的先后關(guān)系,因此Lamport提出了操作之間的邏輯關(guān)系[3],他提出的操作間的邏輯順序在協(xié)同編輯研究領(lǐng)域被廣泛采用。
定義1:因果關(guān)系"->" 假設(shè)操作a和操作b,于是操作滿足關(guān)系a->b當(dāng)且僅當(dāng) (1)他們來(lái)自于同一個(gè)站點(diǎn)且a的發(fā)生時(shí)間在b之前。(2)他們來(lái)自于不同站點(diǎn)且a在站點(diǎn)b的執(zhí)行時(shí)間在b操作產(chǎn)生之前。(3)存在一個(gè)操作x使得a -> x && x -> b。
滿足因果關(guān)系的前兩種圖示:第三種情況規(guī)定了操作因果關(guān)系的可傳遞性。
?
圖2
定義2: 并發(fā)關(guān)系"||" 假設(shè)操作a和操作b,操作滿足a||b,當(dāng)且僅當(dāng)不存在a->b也不存在b->a。如圖2所示。
存儲(chǔ)結(jié)構(gòu),操作,時(shí)間戳
?AST的基本存儲(chǔ)結(jié)構(gòu)為線性結(jié)構(gòu),AST需要管理的是一系列操作的集合,然后將這些操作確定一個(gè)全序關(guān)系(就是兩兩之間可比較的)。這樣不管操作在每個(gè)站點(diǎn)的到達(dá)順序是怎么樣的,他都會(huì)按照一定的順序執(zhí)行并且使得每個(gè)站點(diǎn)得到的文本狀態(tài)最終一致。
站點(diǎn)1:操作1 -> 操作3 -> 操作2 ? ? ? ? ? ? ? ? ? 站點(diǎn)1:操作1 -> 操作2 -> 操作3
站點(diǎn)2:操作2 -> 操作1 -> 操作3 ? ? -->> ?AST ? ? 站點(diǎn)2:操作1 -> 操作2 -> 操作3
站點(diǎn)3:操作3 -> 操作1 -> 操作2 ? ? ? ? ? ? ? ? ??站點(diǎn)3:操作1 -> 操作2 -> 操作3
提到給操作排序那么我們會(huì)想到給操作附加一個(gè)信息按照這個(gè)信息來(lái)進(jìn)行排序,這個(gè)信息我們稱為時(shí)間戳。由于每個(gè)站點(diǎn)的物理時(shí)鐘是不可能精確統(tǒng)一時(shí)間的,因此Eillis.[4]最早將向量時(shí)間戳引入了協(xié)同編輯領(lǐng)域。
狀態(tài)向量(時(shí)間戳):N表示協(xié)同編輯站點(diǎn)的個(gè)數(shù),每個(gè)站點(diǎn)都有一個(gè)唯一的ID,然后對(duì)于這些ID從1-N編號(hào),站點(diǎn)j的狀態(tài)向量是一個(gè)N維的向量,其中第i個(gè)分量表示站點(diǎn)i上的操作在站點(diǎn)j上被執(zhí)行了幾個(gè)。
?
操作發(fā)生后各站點(diǎn)時(shí)間戳的變化
狀態(tài)向量的大小關(guān)系
兩個(gè)狀態(tài)向量a,b 若a=b則a和b的每個(gè)分量都相等。
? ? ? ? ? ? ? ? ?若a<b則a中每個(gè)分量都小于等于b中的對(duì)應(yīng)分量,且至少有一個(gè)分量小于對(duì)應(yīng)分量。
? ? ? ? ? ? ? ? ?若a>b則a中至少有一個(gè)分量大于b中的對(duì)應(yīng)分量。
舉個(gè)例子 :(0,0,0) < (1,0,1) < (1,1,1) = (1,1,1)
操作的傳輸
定義3:對(duì)于文檔的所有操作都可以拆分成兩個(gè)基本操作
Insert[c, pos]:在 pos 與 pos + 1 的位置上插入字符c
Delete[c, pos]:在 pos 位置上刪除可見(jiàn)字符c
定義[op, ts]為操作的傳輸結(jié)構(gòu),其中op表示上述兩種操作之一,而ts表示狀態(tài)向量時(shí)間戳。
?
操作的結(jié)構(gòu)化傳輸
?
地址空間轉(zhuǎn)換的介紹
在協(xié)同編輯算法中,操作被分為兩種:本地操作和遠(yuǎn)程操作。為了保證良好的用戶體驗(yàn),操作產(chǎn)生或者被接收會(huì)直接在站點(diǎn)上執(zhí)行,然而為了保證每個(gè)站點(diǎn)副本內(nèi)容的一致操作必須有序的執(zhí)行。綜合考慮兩點(diǎn)矛盾就產(chǎn)生了,如果遠(yuǎn)程操作到達(dá)的順序和產(chǎn)生的順序相反那么后到來(lái)的操作如何執(zhí)行呢?AST的解決方案很簡(jiǎn)單,回到操作產(chǎn)生時(shí)的文本狀態(tài)執(zhí)行該操作,相應(yīng)的就是在執(zhí)行一個(gè)遠(yuǎn)程操作之前先消除應(yīng)該在該操作之后執(zhí)行的操作對(duì)于文本的影響,在操作執(zhí)行完之后再恢復(fù)那些操作的影響。
地址空間結(jié)構(gòu)
地址空間由若干節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)除了字母信息外還有一個(gè)有效位(在回溯操作中需要用到),節(jié)點(diǎn)上包含對(duì)于這個(gè)字母的插入和刪除操作。操作節(jié)點(diǎn)的內(nèi)容和操作的傳輸結(jié)構(gòu)類似,包含基本操作和狀態(tài)向量(時(shí)間戳)兩部分。地址空間結(jié)構(gòu)如下圖所示:
?
地址空間結(jié)構(gòu)圖(黃色為無(wú)效節(jié)點(diǎn))
操作的劃分
接著,我們來(lái)討論哪些操作的集合才是文本執(zhí)行時(shí)的狀態(tài)呢?試想當(dāng)一個(gè)用戶操作A在一個(gè)站點(diǎn)1上被執(zhí)行的時(shí)候,所有的操作可以被分成三部分:
定義4:因果先序 在站點(diǎn)1上已經(jīng)執(zhí)行的操作{X}稱因果先序操作 X->A
? ? ? ?并發(fā)操作 對(duì)于任意站點(diǎn)i(i≠1)操作A到達(dá)站點(diǎn)i之前產(chǎn)生的操作中還未到達(dá)站點(diǎn)1的操作{X}稱并發(fā)操作 X||A
? 因果后序 對(duì)于任意站點(diǎn)i(i≠1)操作A到達(dá)該站點(diǎn)后產(chǎn)生的操作和站點(diǎn)1在操作A之后產(chǎn)生的操作{X}稱因果后序操作 A->X
所謂的文本執(zhí)行時(shí)狀態(tài)指的是因果先序操作集合,因此在地址空間回溯的時(shí)候僅僅保留因果先序操作集合。
性質(zhì)1:一個(gè)操作可以在站點(diǎn)上執(zhí)行當(dāng)且僅當(dāng)以下兩種情況:
(1)操作是該站點(diǎn)的本地操作
(2)操作是遠(yuǎn)程操作且操作的因果先序操作已經(jīng)在當(dāng)前站點(diǎn)上全部執(zhí)行。
?
回溯算法介紹
性質(zhì)1是操作的前提條件,在滿足性質(zhì)1的情況下提出回溯操作的算法框架,其中SV表示需要回溯到的時(shí)間戳:
?
AST回溯算法步驟
算法解釋:對(duì)于每個(gè)操作節(jié)點(diǎn)進(jìn)行掃描,通過(guò)時(shí)間戳的比較判斷此操作節(jié)點(diǎn)是否為當(dāng)前操作的因果先序操作,若不是則將該操作節(jié)點(diǎn)值為無(wú)效?;厮菟惴ǖ哪康氖腔氐讲僮鳟a(chǎn)生時(shí)的文本狀態(tài),也就是僅僅保留因果先序操作。
操作邏輯關(guān)系在狀態(tài)向量(時(shí)間戳)上的體現(xiàn)
通過(guò)時(shí)間向量的比較我們可以確定操作之間的邏輯關(guān)系,提出如下性質(zhì):
性質(zhì)2:定義操作A和操作B分別產(chǎn)生于站點(diǎn)1和站點(diǎn)2他們的時(shí)間戳分別為SVa和SVb。
A->B 因果先序 則有SVa<SVb
A||B 并發(fā)關(guān)系 則有SVa>SVb && SVb>SVa
A<-B 因果后序 則有SVb<SVa
?
控制算法介紹
當(dāng)一個(gè)來(lái)自與R站點(diǎn)的操作O到來(lái)時(shí)操作的時(shí)間戳為SVo,且性質(zhì)1已經(jīng)被滿足,則當(dāng)前時(shí)間戳為SVS時(shí)站點(diǎn)S的控制算法過(guò)程如下所示:
AST控制算法步驟
算法解釋:首先回溯到操作產(chǎn)生時(shí)的文本狀態(tài)(第一行),然后執(zhí)行操作加入時(shí)間戳(第二、三行),接著更新當(dāng)前站點(diǎn)時(shí)間戳(第四行),最后回溯站點(diǎn)至當(dāng)前文本狀態(tài)(第五行)。
操作執(zhí)行算法
下面來(lái)討論一個(gè)操作具體的執(zhí)行步驟。
操作O是一個(gè)刪除操作,則僅需在地址空間中找到操作的相應(yīng)位置(從左至右對(duì)有效節(jié)點(diǎn)計(jì)數(shù)),將操作附著到這個(gè)節(jié)點(diǎn)上。
操作O是一個(gè)插入操作,現(xiàn)在地址空間中找到操作的相應(yīng)位置(從左至右對(duì)有效節(jié)點(diǎn)計(jì)數(shù)),建立一個(gè)新的字符節(jié)點(diǎn),初始化節(jié)點(diǎn)的標(biāo)記并把它插入到插入范圍中的一個(gè)確定位置。
對(duì)于插入操作存在一個(gè)問(wèn)題:根據(jù)插入操作的位置僅僅能夠確認(rèn)插入的位置位于兩個(gè)有效節(jié)點(diǎn)之間,但并不能夠知道具體位置(兩個(gè)有效節(jié)點(diǎn)之間可能存在若干個(gè)無(wú)效節(jié)點(diǎn))。
對(duì)于這個(gè)問(wèn)題AST是通過(guò)range-scan算法來(lái)確定操作的具體插入位置,range-scan的原理在于通過(guò)定義TOrder函數(shù)來(lái)確定操作兩兩之間的全序關(guān)系(操作兩兩之間可以直接比較)。TOrder函數(shù)的定義如下:
定義5:考慮連個(gè)元素CNa和CNb,他對(duì)應(yīng)的操作分別產(chǎn)生至站點(diǎn)a和站點(diǎn)b,并且時(shí)間戳分別為SVa和SVb。有TOrder(CNa)<TOrder(CNb)當(dāng)且僅當(dāng):
(1)sum(SVa)<sum(SVb)
(2)sum(SVa)=sum(SVb)且a<b
TOrder是一個(gè)全序關(guān)系且是傳遞的,也就是說(shuō)任意兩個(gè)節(jié)點(diǎn)之間是可比較的。在這個(gè)基礎(chǔ)上提出了range-scan算法,CNa和CNb是算法的執(zhí)行范圍,是兩個(gè)相鄰的有效節(jié)點(diǎn),CNnew是將要插入的節(jié)點(diǎn),P表示一個(gè)位置:
?
AST的range-scan算法步驟
算法解釋:range-scan算法可能是初學(xué)者最容易弄不懂的地方了,接下來(lái)詳細(xì)解釋一下他的執(zhí)行過(guò)程。首先在兩個(gè)有效節(jié)點(diǎn)之間的無(wú)效節(jié)點(diǎn)分為兩類:因果先序操作節(jié)點(diǎn)(算法12-17行)和并發(fā)關(guān)系操作節(jié)點(diǎn)(算法4-11行)。算法的初始化將p賦值為空,將掃描指針CNscan賦值為第一個(gè)無(wú)效節(jié)點(diǎn)。外層循環(huán)依次掃描每個(gè)無(wú)效節(jié)點(diǎn)直到遇到有效節(jié)點(diǎn)CNb停止并返回位置P。對(duì)于因果先序操作節(jié)點(diǎn)規(guī)定新節(jié)點(diǎn)一定插入在其左側(cè),對(duì)于并發(fā)關(guān)系操作節(jié)點(diǎn)則按照TOrder函數(shù)比較插入在合適的位置。
至此整個(gè)AST算法就介紹完了。
聲明
算法步驟圖摘自[5],部分關(guān)于算法細(xì)節(jié)的說(shuō)明參考了[1,5,6]。
轉(zhuǎn)發(fā)請(qǐng)注明來(lái)源?http://www.cnblogs.com/shu-xiaohao/p/5358455.html
參考文獻(xiàn)
[1] 顧寧, 楊江明, 張琦煒. 協(xié)同組編輯中基于地址空間轉(zhuǎn)換的一致性維護(hù)方法[J]. 計(jì)算機(jī)學(xué)報(bào), 2007, 30(5):763-774.
[2]?Gu N, Yang J, Zhang Q. Consistency maintenance based on the mark & retrace technique in groupware systems[C]// Proceedings of the 2005 International ACM SIGGROUP Conference on Supporting Group Work, GROUP 2005, Sanibel Island, Florida, USA, November 6-9, 2005. 2005:264-273.
[3]?L. Lamport. Time, clocks, and the ordering of events in a distributed system.?Commun, 7:558–565, 1978.
[4]?Ellis C A, Gibbs S J. Concurrency control in groupware systems[J]. Acm Sigmod Record, 1989, 18(2):399-407.
[5]?楊江明. 協(xié)同組編輯環(huán)境中的數(shù)據(jù)一致性維護(hù)方法[D]. 復(fù)旦大學(xué), 2007.
[6]?張琦煒. 大規(guī)模協(xié)同環(huán)境下的實(shí)時(shí)組編輯技術(shù)研究[D]. 復(fù)旦大學(xué), 2007.
轉(zhuǎn)載于:https://www.cnblogs.com/shu-xiaohao/p/5358455.html
總結(jié)
以上是生活随笔為你收集整理的手把手玩转协同编辑(1):AST (Address Space Transformation)地址空间转换算法 基本介绍...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [ubuntu]dlna平台搭建(在家里
- 下一篇: 配置安全的Impala集群集成Sentr