日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

這一次,徹底搞懵 CRDT

來源: 責編: 時間:2024-05-16 09:04:21 201觀看
導讀我是前端西瓜哥,今天我們來簡單入門一下 CRDT。CRDT 是什么?CRDT,全稱為 conflict-free replicated data type(無沖突復制數據類型),它是一種數據類型,或者說是方案,確保在網絡中的不同副本最后數據保持一致的,可以用協同編輯

8R228資訊網——每日最新資訊28at.com

我是前端西瓜哥,今天我們來簡單入門一下 CRDT。8R228資訊網——每日最新資訊28at.com

CRDT 是什么?

CRDT,全稱為 conflict-free replicated data type(無沖突復制數據類型),它是一種數據類型,或者說是方案,確保在網絡中的不同副本最后數據保持一致的,可以用協同編輯領域。8R228資訊網——每日最新資訊28at.com

CRDT 在 2011 年在論文中被正式提出,雖相比 OT 算法(1989年)起步晚了很長的時間,但實現難度低很多,且出現了高性能的 CRDT 庫 Y.js,越來越多產品選擇使用 CRDT 來實現協同編輯功能。8R228資訊網——每日最新資訊28at.com

CRDT 有以下特性:8R228資訊網——每日最新資訊28at.com

每個客戶端可獨自操作副本,即支持并發,不需要和其他副本協同溝通。8R228資訊網——每日最新資訊28at.com

這是一種樂觀復制(Optimistic replication)的策略。8R228資訊網——每日最新資訊28at.com

各個副本可以獨立地在本地編輯,不用把更新提交到服務器,等待服務端返回最新的狀態,用這個新狀態覆蓋掉舊狀態。即可做到離線編輯,本地更新了狀態后再同步到服務端。8R228資訊網——每日最新資訊28at.com

算法能夠自動地處理不一致的問題。8R228資訊網——每日最新資訊28at.com

一個副本和另一個副本通常是不同的,當其他副本同步過來時,有可能會出現沖突(不一致)的地方,比如兩個副本同時刪除和新增一個元素。8R228資訊網——每日最新資訊28at.com

這個需要 CRDT 算法使用特定的策略去自動處理,而不是像 git merge 那樣去手動處理沖突。8R228資訊網——每日最新資訊28at.com

同一時刻不同副本的狀態可能不同,但同步后它們能最終收斂(converge),達到相同的狀態(最終一致性)。8R228資訊網——每日最新資訊28at.com

CRDT 的類型

CRDT 主要分為兩大類型:Operation-based 和 State-based。8R228資訊網——每日最新資訊28at.com

Operation-based

Operation-based CRDTs,基于操作的 CRDT。8R228資訊網——每日最新資訊28at.com

副本進行同步時,只會把 新增的本地操作(operation) 發送出去。8R228資訊網——每日最新資訊28at.com

另一個副本拿到這個 operation 會將其應用到自己的狀態上,operataion 需要滿足交換律(commutative)。8R228資訊網——每日最新資訊28at.com

交換律,指的是交換運算順序,最后的結果不變。比如加法就滿足交換律,a+b 和 b+a 的結果是相等的。8R228資訊網——每日最新資訊28at.com

operataion 之所以要滿足交換律,是因為網絡并不可知。8R228資訊網——每日最新資訊28at.com

假設有兩個副本 a 和 b 要同步過來給其他副本,你不知道到底誰先到達。對于一些副本可能是先 a 后 b,另一些可能是先 b 后 a,我們需保證在不同順序下,結果是一致的。8R228資訊網——每日最新資訊28at.com

通常我們是通過 Generator 函數生成新的 opreation,發送給其他副本,然后這些副本通過  Effector 函數應用這些副本。8R228資訊網——每日最新資訊28at.com

因為交換律這個特性,Operation-based CRDTs 還有另一個名字 commutative replicated data types(CmRDTs)。8R228資訊網——每日最新資訊28at.com

基于操作的 CRDT 的優點是, 傳輸的數據量較少。8R228資訊網——每日最新資訊28at.com

State-based

State-based CRDTs,基于狀態的 CRDT。8R228資訊網——每日最新資訊28at.com

一個副本進行同步時,會將 整個完整的本地狀態(state) 發送出去。另一個副本需要支持將其他副本進行合并(merge)的操作,這個 merge 方法需要滿足交換律、分配律,以及冪等性。8R228資訊網——每日最新資訊28at.com

基于狀態的 CRDT 的問題是,在文檔很大時,需要傳輸大量的數據,會耗費大量的帶寬,且花費時間長。所有實際生產很少會使用它。8R228資訊網——每日最新資訊28at.com

優點是實現更簡單,如果數據量不大,是可以考慮使用的。8R228資訊網——每日最新資訊28at.com

State-based CRDTs 同樣也有另一個名字:Convergent Replicated Data Types(CvRDTs)。Convergent 是收斂的意思。8R228資訊網——每日最新資訊28at.com

一些 CRDT

CRDT 做到數據最終一致性,是基于數學上的特性來保證的。8R228資訊網——每日最新資訊28at.com

我們來看幾個簡單的 CRDT 模型。8R228資訊網——每日最新資訊28at.com

AWSet

AWSet(Add-wins set),一種新增優先于刪除的集合數據結構。8R228資訊網——每日最新資訊28at.com

假如剛開始的時候,副本 A 和 副本 B 的狀態是一致的,有一個 a 在集合中。8R228資訊網——每日最新資訊28at.com

副本 A 刪除了 a,然后再新增 a。8R228資訊網——每日最新資訊28at.com

副本 B 刪除了 a。8R228資訊網——每日最新資訊28at.com

副本 A 的新增 a 和 副本 B 的刪除 a 同時發生。8R228資訊網——每日最新資訊28at.com

此時我們會選擇新增,忽略刪除,最后兩個副本的狀態還是 a 在集合中。8R228資訊網——每日最新資訊28at.com

8R228資訊網——每日最新資訊28at.com

為判斷兩個操作是否是 “同時” 的,我們會附加一個和時序相關的元數據,比如時間戳、版本向量。8R228資訊網——每日最新資訊28at.com

RWSet

RWSet(Remove-win set),一種刪除優先新增的集合數據結構。8R228資訊網——每日最新資訊28at.com

AWSet 類似,但對于并發的操作,會保留刪除,丟棄新增。8R228資訊網——每日最新資訊28at.com

LWW

LWW(Last-writer-wins),最后寫入者優先。8R228資訊網——每日最新資訊28at.com

所有的操作會有一個時間戳元數據,副本會對比同步操作的時間戳。8R228資訊網——每日最新資訊28at.com

如果大于當前狀態時間戳,覆蓋掉原來的狀態;如果小于當前狀態時間戳,則忽略。8R228資訊網——每日最新資訊28at.com

2P-Set

Two-Phase Set。8R228資訊網——每日最新資訊28at.com

此模型會維護兩個集合,一個是新增集合,保存新增的元素,另一個是刪除集合,保存被刪除的元素。8R228資訊網——每日最新資訊28at.com

模型的最終狀態為新增集合和刪除集合的差集。8R228資訊網——每日最新資訊28at.com

另外,集合比較特殊,它是只增集合(grow-only set),只能往集合里加元素,不能從集合里移除元素。8R228資訊網——每日最新資訊28at.com

這意味著一個元素如果被刪除了,就再也不能添加回來。所以刪除集合也被叫做 tombstone set(墓碑集合),人噶不能復生。8R228資訊網——每日最新資訊28at.com

2P-Set 也算是一種 RW-Set(刪除優先),特別的點在于元素被刪除后不能新增回來。8R228資訊網——每日最新資訊28at.com

G-Counter

G-Counter,Grow-only Counter,只增計數器,一個只能增加計數的計數器。8R228資訊網——每日最新資訊28at.com

此模型使用 n 個節點的容器(一個整數數組),每個副本會分配一個 id,某個副本給計數器 +1,其實就會給對應的數組元素 +1。8R228資訊網——每日最新資訊28at.com

計數器的值為數組的求和。8R228資訊網——每日最新資訊28at.com

PN-Counter

PN-Counter,Positive-Negative Counter,一個支持增減的計數器。8R228資訊網——每日最新資訊28at.com

多個 CRDT 可以組合成一個更復雜的 CRDT。8R228資訊網——每日最新資訊28at.com

類似 G-Counter,但 PN-Counter 使用兩個 G-Counter,一個保存新增數(新增操作),另一個保存減少數(減少操作)。8R228資訊網——每日最新資訊28at.com

計數器的值為新增數組求和減去減少數組的和。8R228資訊網——每日最新資訊28at.com

YATA

最后我們看看復雜點的,簡單介紹一下 Y.js 的 YATA(Yet Another Transformation Approach)模型。8R228資訊網——每日最新資訊28at.com

假設我們有值為 "ABCD" 的字符串。8R228資訊網——每日最新資訊28at.com

YATA 模型會將其拆分成一個個字符,加上元數據,然后按順序首尾相連組成一個雙鏈表。8R228資訊網——每日最新資訊28at.com

// 大概這樣子{  id: '2:0', // 客戶端 ID + clock ID  val: 'B',  left: a, // 當前節點的左節點  right: c, // 右節點  origin: a, // 節點創建時的左節點  rightOrigin: c // 節點創建時的右節點}

操作有 “插入” 和 “刪除”。8R228資訊網——每日最新資訊28at.com

假設本地在 AB 之間插入 E,此時沒有發送同步,然后收到其他副本傳過來的 F,也是要插入到 AB 之間。8R228資訊網——每日最新資訊28at.com

此時 E 和 F 是沖突的,我們會對唯一的 id(某種意義上的時間戳)使用特定的規則來決定先后順序。8R228資訊網——每日最新資訊28at.com

至于刪除操作,因為插入操作需要找到在左右節點的位置,所以節點即使被刪除了也是不能從雙鏈表中移出的。8R228資訊網——每日最新資訊28at.com

對此,YATA 選擇使用墓碑機制。YATA 將對應節點標記為刪除(item.deleted 設置為 true),并將節點記錄到刪除集合 DeleteSet 里。8R228資訊網——每日最新資訊28at.com

這里其實可以看到,CRDT 通常是需要加很多元數據的,尤其是復雜數據結構且數據量較大的場景,所以這也是 CRDT 起初被詬病占用內存高的原因。8R228資訊網——每日最新資訊28at.com

但 Y.js 通過一系列手段(比如將多個節點合并為一個大節點),將性能優化到足夠面對大多數場景,證明了用 CRDT 是做協同編輯的是不用擔心性能問題的,如果有,一定是你沒優化好。8R228資訊網——每日最新資訊28at.com

結尾

本文只是簡單介紹一些 CRDT 是什么,并感受了一些簡單的 CRDT 模型,希望對你有所幫助。8R228資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88328-0.html這一次,徹底搞懵 CRDT

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: PlantUML畫時序圖,真香!

下一篇: 什么鎖比讀寫鎖性能更高?

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲高清色综合| 欧美激情第8页| 亚洲伊人网站| 午夜精品久久久久久久99水蜜桃 | 亚洲国产婷婷| 亚洲黄色免费电影| 一卡二卡3卡四卡高清精品视频| 亚洲视频网在线直播| 欧美一区永久视频免费观看| 麻豆精品视频在线| 欧美三日本三级少妇三2023| 国产手机视频一区二区| 亚洲福利小视频| 中文亚洲欧美| 欧美影片第一页| 免费观看在线综合色| 欧美四级在线观看| 激情视频一区二区三区| 日韩亚洲一区二区| 久久精品视频导航| 欧美人成在线视频| 国产综合在线视频| 亚洲麻豆av| 欧美一区二区三区喷汁尤物| 亚洲高清在线| 亚洲一区影音先锋| 免费在线亚洲| 国产目拍亚洲精品99久久精品| 亚洲第一级黄色片| 亚洲综合久久久久| 欧美成人午夜激情| 国产日韩欧美在线播放| 亚洲每日更新| 久久久久久综合| 欧美视频一区二| 亚洲国产精品免费| 欧美专区福利在线| 国产精品99一区| 91久久精品一区| 久久九九久精品国产免费直播| 欧美四级在线| 亚洲区国产区| 久久久噜噜噜久久| 国产精品毛片| 亚洲美女视频网| 久久天天综合| 国产日韩精品在线播放| 中文无字幕一区二区三区| 欧美va天堂va视频va在线| 国产欧美大片| 亚洲一区中文字幕在线观看| 欧美—级a级欧美特级ar全黄| 韩国欧美一区| 午夜在线精品| 国产精品久久午夜| 一区二区三区精品国产| 欧美成年人视频| 黑人极品videos精品欧美裸| 亚洲欧美一区二区原创| 欧美视频在线观看视频极品| 亚洲欧洲一区二区天堂久久| 久久综合色综合88| 国内在线观看一区二区三区| 欧美一区成人| 国产精品专区h在线观看| 中文亚洲欧美| 欧美视频在线观看免费网址| 99精品热视频只有精品10| 欧美成人在线网站| 亚洲国产日韩在线一区模特| 久久男女视频| 黄色精品免费| 久久青草福利网站| 精品成人免费| 久久综合狠狠| 在线观看中文字幕亚洲| 久久一区二区三区四区五区| 激情五月婷婷综合| 久久综合久久综合久久综合| 一色屋精品视频在线看| 久久一区视频| 亚洲成人原创| 欧美a级大片| 亚洲黄色精品| 欧美激情一区二区三区四区| 亚洲精品乱码久久久久久日本蜜臀 | 麻豆九一精品爱看视频在线观看免费| 国产性猛交xxxx免费看久久| 欧美一级日韩一级| 国产一区在线看| 久久亚洲综合色| 亚洲福利久久| 欧美国产精品va在线观看| 亚洲日本电影在线| 夜夜嗨av色综合久久久综合网| 欧美大片免费观看| 亚洲理伦在线| 欧美日韩情趣电影| 亚洲午夜极品| 国产欧美亚洲日本| 久久男人资源视频| 亚洲片在线观看| 欧美视频三区在线播放| 亚洲一区二区三区三| 国产精品午夜在线观看| 欧美与黑人午夜性猛交久久久| 好看的日韩视频| 免费观看成人www动漫视频| 亚洲裸体在线观看| 国产精品免费观看视频| 久久精品视频播放| 亚洲激情午夜| 国产精品国产三级欧美二区| 欧美一区二区三区免费视频| 一区二区三区在线视频免费观看| 欧美电影打屁股sp| 亚洲一区二区三区成人在线视频精品| 国产精品自拍三区| 老色鬼精品视频在线观看播放| 日韩写真在线| 国产精品亚洲美女av网站| 久久久久欧美精品| 日韩视频一区二区| 国产精品女主播在线观看| 久久久久久久999精品视频| 亚洲精品自在在线观看| 国产精品视频一| 久久香蕉精品| 在线视频欧美一区| 国产一区在线视频| 欧美激情国产日韩| 午夜天堂精品久久久久| 亚洲大胆av| 国产精品毛片va一区二区三区 | 久久精品一本| 日韩亚洲精品在线| 国产手机视频精品| 欧美精品一区二区三区四区| 欧美在线短视频| 亚洲免费精品| 好看不卡的中文字幕| 欧美三级视频在线播放| 久久嫩草精品久久久久| 亚洲影音一区| 亚洲国产日韩欧美综合久久| 国产精品视频免费一区| 欧美高清一区| 久久精品国产99国产精品澳门| 日韩一级大片在线| 精品69视频一区二区三区| 欧美亚男人的天堂| 欧美11—12娇小xxxx| 欧美一区二区三区在线| 99亚洲精品| 亚洲第一免费播放区| 国产精品自拍一区| 欧美日韩亚洲一区| 欧美.日韩.国产.一区.二区| 欧美专区日韩专区| 亚洲一区二区视频| 日韩视频免费观看| 亚洲第一毛片| 国模精品娜娜一二三区| 欧美视频在线一区| 欧美精品18videos性欧美| 久久久久久久综合色一本| 国产精品美女久久久浪潮软件| 美女国内精品自产拍在线播放| 亚洲欧美日产图| 日韩亚洲在线观看| ●精品国产综合乱码久久久久| 国产伦精品一区二区三区免费迷| 欧美理论电影在线播放| 麻豆精品传媒视频| 久久久欧美精品| 欧美主播一区二区三区美女 久久精品人| 一本综合精品| 日韩视频不卡| 亚洲国产美国国产综合一区二区| 国产日韩欧美91| 国产精品一区毛片| 国产精品伦理| 欧美视频一区二区三区四区| 欧美激情按摩| 欧美激情一区在线观看| 欧美~级网站不卡| 女人香蕉久久**毛片精品| 久久亚洲精品中文字幕冲田杏梨| 欧美亚洲日本网站| 亚洲欧美在线另类| 香蕉久久一区二区不卡无毒影院| 亚洲一区二区动漫| 亚洲午夜黄色| 亚洲色无码播放| 在线视频一区二区| 一区二区日韩免费看| 99精品久久久| 中文国产成人精品| 亚洲午夜一级| 亚洲欧美日韩专区| 性久久久久久久久| 欧美一区二区三区四区高清| 欧美伊人久久| 久久久在线视频|