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