成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

沖突的處理 - 分布式數(shù)據(jù)庫相關(guān)理論 Part5

CoorChice / 2067人閱讀

摘要:沖突的處理,也是分布式系統(tǒng)中一個重要的議題。假設(shè)負(fù)責(zé)整理新聞段子有個人王尼瑪張全蛋紙巾。第二天,張全蛋復(fù)查列表,由于紙巾的更新操作并不是在他之后的而是和他同時的,這時候就產(chǎn)生了一個沖突,需要處理。

沖突的處理,也是分布式系統(tǒng)中一個重要的議題。今天我們繼續(xù)以 Riak 為案例,看看 Riak 是怎么做沖突處理的。

Vector Clock(向量鐘)

Riak 通過一種叫做 Vector Clock 的機制來處理沖突問題。簡單來說,Vector Clock 是一段 token,
Riak 這樣的分布式系統(tǒng)通過這樣的 token 來追蹤數(shù)據(jù)更新操作的先后順序。

在沖突處理中,能夠知道沖突操作(eg. 創(chuàng)建操作,更改操作)的順序,是非常重要的。
因為對于分布式系統(tǒng)來說,不同的客戶端連接到的是不同的服務(wù)器節(jié)點,
當(dāng)一個客戶端更新了一個服務(wù)器節(jié)點上的數(shù)據(jù),也許另一個客戶端也同時更新了另一個服務(wù)器節(jié)點上的數(shù)據(jù)。

這時候,也許你會想到:記錄每個操作的時間戳,然后依照時間戳靠后的操作來。然而要這么做的話,這里有個隱含的前提:
在這個分布式系統(tǒng)中的每個服務(wù)器節(jié)點,時鐘都必須是完全同步的。
然而事實上,一方面這是非常困難的:需要非常大的財力物力的投入;另一方面,整個系統(tǒng)又是單點故障的。

所以,Riak 使用 Vector Clocks 來處理沖突。Vector Clocks 給每個寫操作(創(chuàng)建,更改,刪除) 打上一個標(biāo)簽,標(biāo)簽代表了是哪個客戶端以什么樣的順序執(zhí)行的操作。
這樣一來,客戶端或者開發(fā)者就能決定面對沖突,該怎么決定。
如果你熟悉像 Git, Subversion這樣的版本控制系統(tǒng),
這就和兩個人同時修改了同一個文件產(chǎn)生的沖突解決思路是相似的。

Vector Clock 小故事 —— Vector Clock 相關(guān)理論

暴走大事件的編輯部每周都要整理下一期里要播報的新聞段子。

假設(shè)負(fù)責(zé)整理新聞段子有3個人:王尼瑪(A), 張全蛋(B), 紙巾(C)。他們需要確定最終的新聞段子的列表。新聞段子的列表存儲在分布式的服務(wù)器中。

每個人用自己的終端連接數(shù)據(jù)庫。這些終端都有著唯一的標(biāo)識,用來構(gòu)建 vector clock。下面就讓我們模擬一下,vector clock 是如何工作的。

首先,王尼瑪用自己的終端更新了列表

vclock: A[0]
value: ["news xx"]

然后,張全蛋先下載了這個列表,然后更新了這個列表

vclock: A[0], B[0]
value: ["news xx", "news xyy"]

張全蛋更新的同時(王尼瑪做更新之后),紙巾同樣的下載了已有的列表,做了更新。

vclock: A[0], C[0]
value: ["news xx", "news yyz"]

第二天,張全蛋復(fù)查列表,由于紙巾的更新操作并不是在他之后的(而是和他同時的),
這時候就產(chǎn)生了一個沖突,需要處理。

他拿到兩個值:

vclock: A[0], B[0]
value: ["news xx", "news xyy"]
--
vclock: A[0], C[0]
value: ["news xx", "news yyz"]

他需要解決這個沖突:于是他選擇合并這兩個值:

vclock: A[0], C[0], B[1]
value: ["news xx", "news xyy", "news yyz"]

這樣一來,任何人之后獲取到的就是這個最新的合并后的值了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/17457.html

相關(guān)文章

  • VUE - MVVM - part5 - Observe

    摘要:具體代碼執(zhí)行方式進入到的目錄下,命令行運行即可。確保為一個對象如果對象下有則不需要再次生成函數(shù)返回該對象的實例,這里判斷了如果該對象下已經(jīng)有實例,則直接返回,不再去生產(chǎn)實例。這就確保了一個對象下的實例僅被實例化一次。 看這篇之前,如果沒有看過之前的文章,可拉到文章末尾查看之前的文章。 回顧 在 step4 中,我們大致實現(xiàn)了一個 MVVM 的框架,由3個部分組成: defineRe...

    xi4oh4o 評論0 收藏0
  • 【超越白皮書3】DAG技術(shù)解析與實測

    摘要:有向無環(huán)圖,以下簡稱是其中的代表之一。的去中心化和可擴展性可認(rèn)為是一體兩面的,因為基于數(shù)據(jù)結(jié)構(gòu)帶來的異步記賬特性,同時實現(xiàn)了高度的參與網(wǎng)絡(luò)節(jié)點的去中心化和交易的可擴展性。因此,目前對于雙花問題,需要綜合考慮實際情況進行設(shè)計。 本報告由火幣區(qū)塊鏈研究院出品,作者:袁煜明、胡智威。原文地址 相關(guān)報告: 【超越白皮書2】EOS主網(wǎng)上線前夕的實測分析與技術(shù)建議 【超越白皮書1】EOSIO程序?qū)?..

    caikeal 評論0 收藏0
  • 用PHP寫一個最簡單解釋器Part5(計算器最后一節(jié),下節(jié)開始如何寫個腳本語言)

    摘要:經(jīng)過幾天的努力,用已經(jīng)實現(xiàn)了一個完整的基礎(chǔ)計算器,如下圖上代碼定義整數(shù)類型描述定義操作符號類型描述加法定義操作符號類型描述減法定義操作符號類型描述乘法定義操作符號類型描述除法定義操作符號類型描述定義操作符號類型描述定義空格用來存儲輸入字符的 showImg(https://segmentfault.com/img/bVbdNO5?w=900&h=377); 經(jīng)過幾天的努力,用PHP已經(jīng)...

    yanest 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<