亚洲人成网网址在线看_亚洲国产美女视频_激情综合色五月丁香六月亚洲_亚洲精品在线网站

MemGraph 背后論文《基于內(nèi)存和MVCC 的高速可串行化》詳細(xì)解析(一)

2023-05-24 05:49:10來(lái)源:嗶哩嗶哩  

Memgraph 是一個(gè)內(nèi)存型圖數(shù)據(jù)庫(kù),使用 OpenCypher 作為查詢語(yǔ)言,主打小數(shù)據(jù)量、低延遲的圖場(chǎng)景。由于 Memgraph 是開源的(repo 在這,使用 C++ 實(shí)現(xiàn))我們可以一窺其實(shí)現(xiàn)。根據(jù)這行注釋[1],我們可以看出,其內(nèi)存結(jié)構(gòu)實(shí)現(xiàn)靈感主要來(lái)自論文:Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems[2]。


(資料圖)

本系列主要分為兩大部分,論文解讀和代碼串講,每一部分會(huì)根據(jù)情況拆成幾篇。本篇,是論文解讀(一),主要講論文概述以及如何使用鏈表巧妙的存儲(chǔ)了多版本、控制了可見性。論文解析(二),會(huì)講如何實(shí)現(xiàn)可串行化以及回收多版本數(shù)據(jù)。

概述

從論文題目可以看出,本論文旨在實(shí)現(xiàn)一種針對(duì)內(nèi)存型數(shù)據(jù)庫(kù)的、基于多版本(MVCC)實(shí)現(xiàn)的、支持可串行化隔離級(jí)別的高性能數(shù)據(jù)結(jié)構(gòu)。其基本思想是:

使用列存

復(fù)用 Undo Buffer 數(shù)據(jù)結(jié)構(gòu)

使用雙向鏈表來(lái)串起數(shù)據(jù)的多版本

巧妙設(shè)計(jì)時(shí)間戳來(lái)實(shí)現(xiàn)數(shù)據(jù)的可見性

通過謂詞樹(PT)來(lái)判事務(wù)讀集合(Read Set)是否被更改

與一般的多版本不同的是,本論文會(huì)在原地更新數(shù)據(jù),然后將舊版本數(shù)據(jù)“壓”到鏈表中去,使用 “壓”是因?yàn)殒湵聿捎妙^插法:表頭一側(cè)數(shù)據(jù)較新、表尾一側(cè)數(shù)據(jù)較舊。所有數(shù)據(jù)的鏈表頭由一個(gè)叫?VersionVector的數(shù)據(jù)結(jié)構(gòu)維護(hù),如果某一行沒有舊數(shù)據(jù),對(duì)應(yīng)的位置就是?null

之后,我們之后會(huì)一直使用上圖例子來(lái)輔助理解原理。這是一個(gè) Sally 持續(xù)向別人轉(zhuǎn)賬的例子。開局時(shí)(T0)每人十塊錢,然后 Sally 每次轉(zhuǎn)給別人 1 塊錢,一共轉(zhuǎn)了三筆,當(dāng)前時(shí)刻前兩筆已經(jīng)完成:

Sally → Wendy,提交時(shí)間戳為 T3

Sally → Henry,提交時(shí)間戳為 T5

正在進(jìn)行第三筆:

3. Sally → Mike,事務(wù) ID 是 Ty,起始時(shí)間戳為 T6

中間穿插著兩次全表掃描(求所有賬戶總額)事務(wù) Tx 和 Tz,起始時(shí)間戳分別為 T4 和 T7 ,都已經(jīng)開始,但還沒結(jié)束。

版本管理

每個(gè)事務(wù)在進(jìn)入系統(tǒng)時(shí)會(huì)獲取兩個(gè)時(shí)間戳(uint64):

transactionID:事務(wù) ID 也是一個(gè)時(shí)間戳(從 2^63 開始自增),上圖中的 Tx, Ty, Tz。

startTime-stamp:一個(gè)自增的時(shí)間戳(從 0 開始自增),上圖中的 T4, T6, T7。

如前所述,所有的更新是原地的(in-place),但會(huì)在 undo buffer 中保存舊值。舊版本的數(shù)據(jù)有兩個(gè)作用:

before-image value,作為事務(wù) undo log 的一部分。

作為該字段多版本的一個(gè)舊值。

對(duì)于快照隔離和可串行化隔離級(jí)別來(lái)說,原地更新的值,是不為其他事務(wù)所見的,下一小節(jié)我們會(huì)講如何控制可見性。

在事務(wù)提交時(shí),會(huì)獲取另外一個(gè)時(shí)間戳:commitTime-stamp,該時(shí)間戳和 startTime-stamp 共用一個(gè)自增計(jì)數(shù)器。

在事務(wù)進(jìn)行中,所有的 Undo Buffer 中的舊值會(huì)被打上 transactionID 的時(shí)間戳(圖中第三筆轉(zhuǎn)賬:Ty);在事務(wù)提交時(shí),會(huì)統(tǒng)一替換為 commitTime-stamp (圖中前兩筆轉(zhuǎn)賬:T3 和 T5)。

版本可見性

某個(gè)事務(wù)在訪問一個(gè)字段的值時(shí),會(huì)首先進(jìn)行原地訪問,然后沿著該值對(duì)應(yīng)的 VersionVector 指向鏈表進(jìn)行訪問,直到滿足以下條件后停止:

下面我們逐一看下三個(gè)子條件各自適用情況:

v.pred == null:當(dāng)該值沒有多版本,或者鏈表到頭時(shí)成立。

v.pred.TS == T:正在進(jìn)行的事務(wù)訪問自己更新的數(shù)據(jù)。

v.pred.TS < T.startTime:通過事務(wù)起始時(shí)間戳,訪問已經(jīng)提交的老版本數(shù)據(jù)。

上述條件比較抽象,我們結(jié)合例子來(lái)看。Sally 的多次轉(zhuǎn)賬會(huì)形成以下鏈表:

然后來(lái)看不同事務(wù)訪問 Sally 的 Bal(Balance)數(shù)據(jù)的可見性:

事務(wù) Ty:(Ty 是一個(gè) > 2^63 的值),所以會(huì)在后繼節(jié)點(diǎn)滿足:pred == (Ty, Bal, 8)(條件2,Ty == Ty)時(shí)停住,此時(shí)訪問到的值為 7 ,也即事務(wù) Ty 更新到的值。

事務(wù) Tx:起始時(shí)間戳為 T4,所以會(huì)在后繼節(jié)點(diǎn)滿足?pred == (T3, Bal, 10)(條件3,T3 < T4)時(shí)停住,此時(shí)訪問到的 Sally 賬戶的值為 9,也即此時(shí)剛轉(zhuǎn)過一次賬,即提交時(shí)間戳為 T3 的那次轉(zhuǎn)賬。

事務(wù) Tz:起始時(shí)間戳為 T7,所以會(huì)在后繼節(jié)點(diǎn)滿足?pred == (T5, Bal, 9)(條件 3,T5 < T7)時(shí)停住,此時(shí)訪問到 Sally 的賬戶值為 8,也即此時(shí)完成了兩次轉(zhuǎn)賬,第三次轉(zhuǎn)賬尚未完成,對(duì) Tz 不可見。

可以看出,上述鏈表把時(shí)間軸分成了四段:

比較事務(wù)起始時(shí)間戳和后繼鏈節(jié)時(shí)間戳,是為條件 1:

T0 ~ T3:見到的值是 10

T3 ~ T5:見到的值是 9

T5 ~ ∞:見到的值是 8

其中,Ty (事務(wù) ID)相對(duì)起始時(shí)間戳來(lái)說就是無(wú)窮大,這就是我們?cè)谇耙恍」?jié)提到的將 uint64 對(duì)半劈開的妙用之處:

起始和提交時(shí)間戳:0 ~ 2^63 -1

事務(wù)ID:2^63 ~ 2^64 - 1

另外,null 就相當(dāng)于 T0 ,是為條件 1 。

最后,為了讓事務(wù)能夠看到自己的更新,于是額外加了條件 2 。

下篇,我們會(huì)詳細(xì)講如何基于上述數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)可串行化隔離級(jí)別的。

參考資料

[1]

MemGraph 參考論文注釋: https://github.com/memgraph/memgraph/blob/master/src/storage/v2/storage.hpp#L57

[2]

Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems: https://db.in.tum.de/~muehlbau/papers/mvcc.pdf

題圖故事

本篇文章來(lái)自我的小報(bào)童專欄,第二篇解讀也已經(jīng)在專欄更新,歡迎喜歡我文章的朋友訂閱支持,激勵(lì)我產(chǎn)出更多優(yōu)質(zhì)文章。訂閱方式見https://xiaobot.net/p/system-thinking,會(huì)保證每周不低于兩篇更新。

標(biāo)簽:

相關(guān)閱讀

精彩推薦

相關(guān)詞

推薦閱讀

亚洲人成网网址在线看_亚洲国产美女视频_激情综合色五月丁香六月亚洲_亚洲精品在线网站
<ul id="ouw02"></ul>
  • 成人黄页毛片网站| 亚洲一区二区三区四区的| 天天操天天综合网| 日韩欧美国产麻豆| 一二三四社区欧美黄| 国产成人自拍高清视频在线免费播放| 国产亲近乱来精品视频| 欧美专区日韩专区| 国产精品狼人久久影院观看方式| 免费一级欧美片在线观看| wwwwww.欧美系列| 色中色一区二区| 国产目拍亚洲精品99久久精品| 秋霞电影一区二区| 国产清纯在线一区二区www| 欧美性生活大片视频| 国产精品国产三级国产aⅴ中文| 精品一区二区三区久久久| 国产精品久久久久久久久久免费看 | 欧美一级精品大片| 亚洲午夜日本在线观看| av在线不卡电影| 色婷婷综合久色| 中文字幕色av一区二区三区| 国产成人免费在线观看| 亚洲一区在线观看网站| 国产欧美中文在线| 国产精品主播直播| 一二三四社区欧美黄| 国产欧美一区二区三区沐欲| 久草精品在线观看| 一区二区三区四区高清精品免费观看 | 日韩三级.com| 日韩精品色哟哟| 中文字幕欧美日本乱码一线二线| 在线播放欧美女士性生活| 亚洲午夜久久久久久久久电影院 | 夜夜嗨av一区二区三区网页| 国产三级一区二区| 国产精品一级片在线观看| 亚洲一二三区视频在线观看| 欧美激情中文不卡| 国产91精品久久久久久久网曝门| 亚洲18色成人| 亚洲天堂av老司机| 2024国产精品| 欧美一级理论片| 免费观看成人av| 亚洲激情成人在线| 国产精品三级久久久久三级| 成人午夜电影网站| 欧美性猛交xxxxxx富婆| 亚洲电影在线免费观看| 国产精品视频观看| 久久久综合激的五月天| 国产精品一区二区久久不卡| 日本高清不卡一区| 亚洲国产精品自拍| 国产精品不卡一区| 中文字幕的久久| 91美女片黄在线观看| 欧美一区二区久久| 激情文学综合丁香| 91国产精品成人| 亚洲第一电影网| 亚洲欧美激情插| 成人免费在线播放视频| 久久久久国产精品人| 日韩视频一区二区三区| 国产一区二区三区综合| 在线一区二区三区四区| 午夜视频一区在线观看| 亚洲欧美精品午睡沙发| 亚洲美女在线一区| 亚洲国产精品国自产拍av| 国产清纯美女被跳蛋高潮一区二区久久w| 国产不卡在线播放| 欧美卡1卡2卡| 国产一区二区三区四区五区入口| 色先锋资源久久综合| 日欧美一区二区| 亚洲va欧美va国产va天堂影院| 亚洲午夜免费视频| 一区二区三区国产| 亚洲福利电影网| 亚洲一级在线观看| 亚洲成av人片一区二区| 亚洲一区二区三区视频在线播放| 一级中文字幕一区二区| 亚洲精品va在线观看| 亚洲综合在线第一页| 樱桃国产成人精品视频| 亚洲一区二区视频在线观看| 一区二区三区小说| 亚洲一区二区三区四区的| 亚洲综合色在线| 午夜精品久久久久久不卡8050| 亚洲一二三区视频在线观看| 亚洲777理论| 天天免费综合色| 久久精品国产**网站演员| 欧美色网一区二区| 国产一区二区三区四区五区入口| 51精品视频一区二区三区| 国产91丝袜在线播放| 日韩久久久精品| 91麻豆国产自产在线观看| 日本一区二区视频在线观看| 中文字幕精品一区二区精品绿巨人 | 久久婷婷一区二区三区| 国产日本一区二区| 国产精品国产三级国产| 一区二区三区在线视频观看 | 日本在线观看不卡视频| 在线观看欧美黄色| 国产精品综合网| 欧美精品一区二区不卡| 国产亚洲欧美激情| 亚洲精选视频免费看| 亚洲福利一区二区| 久久99精品久久久| 日韩欧美中文字幕一区| 2022国产精品视频| 亚洲日本在线观看| 亚洲成av人片一区二区| 精品无人码麻豆乱码1区2区| 日韩欧美国产午夜精品| 国产午夜精品在线观看| 亚洲乱码中文字幕| 色婷婷久久综合| 成人在线视频首页| 国产精品女上位| 亚洲国产综合视频在线观看| 精品亚洲欧美一区| 欧美精品一区二区三区久久久| 欧美激情一区二区在线| 亚洲成人精品一区二区| 欧美喷潮久久久xxxxx| va亚洲va日韩不卡在线观看| 欧美激情综合五月色丁香| 亚洲精品国产a| 激情图区综合网| 久久久久久久久久久久久久久99| 国产精品久久久久久久久图文区| 天堂蜜桃一区二区三区| 欧美一级xxx| 中文字幕免费一区| 天天色 色综合| 欧美一三区三区四区免费在线看| 国产偷v国产偷v亚洲高清| 亚洲国产色一区| 91精品欧美久久久久久动漫| 国产亚洲欧美在线| 视频在线观看国产精品| 欧美一区二区三区小说| 中文字幕+乱码+中文字幕一区| 无吗不卡中文字幕| 日韩一卡二卡三卡| 国产精品不卡在线| 九一九一国产精品| 国产日韩精品一区二区浪潮av| 亚洲综合一区二区| 高清国产一区二区三区| 亚洲欧洲精品一区二区三区不卡| 色久综合一二码| 26uuu国产日韩综合| 午夜精品久久久久| 精品久久久久一区二区国产| 亚洲激情自拍视频| 粉嫩av一区二区三区在线播放| 国产精品电影一区二区三区| 欧洲人成人精品| 久久精品无码一区二区三区| 五月天婷婷综合| 久久综合狠狠综合| 亚洲va欧美va人人爽午夜| av欧美精品.com| 亚洲成av人在线观看| 精品国产一区二区亚洲人成毛片| 亚洲美女在线一区| 国产91露脸合集magnet| 亚洲永久精品国产| 日韩精品一区二区三区在线播放| 亚洲乱码一区二区三区在线观看| 国产成人av电影在线| 亚洲精品国产品国语在线app| 91精品国产入口在线| 亚洲精品日韩一| 波多野结衣在线一区| 五月开心婷婷久久| 欧美激情自拍偷拍| 欧美欧美午夜aⅴ在线观看| 综合色中文字幕| 国产精品69毛片高清亚洲| 亚洲综合一区二区| 久久午夜色播影院免费高清| 色综合久久中文综合久久牛| 亚洲国产精品成人久久综合一区 | 欧美日本国产视频| 亚洲另类一区二区|