91精品国产自产在线观看永久_香蕉久久一区二区不卡无毒影院_91视频国产精品_日韩成人高清在线_久久久久久久久久久久久女国产乱 _亚洲欧美日韩国产一区二区三区_99久久精品免费看_亚洲影视九九影院在线观看_久久精品国产亚洲_成人a级免费视频

首頁 > 行業 > 正文

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

2023-05-24 05:49:10來源:嗶哩嗶哩  

Memgraph 是一個內存型圖數據庫,使用 OpenCypher 作為查詢語言,主打小數據量、低延遲的圖場景。由于 Memgraph 是開源的(repo 在這,使用 C++ 實現)我們可以一窺其實現。根據這行注釋[1],我們可以看出,其內存結構實現靈感主要來自論文:Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems[2]。


(資料圖)

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

概述

從論文題目可以看出,本論文旨在實現一種針對內存型數據庫的、基于多版本(MVCC)實現的、支持可串行化隔離級別的高性能數據結構。其基本思想是:

使用列存

復用 Undo Buffer 數據結構

使用雙向鏈表來串起數據的多版本

巧妙設計時間戳來實現數據的可見性

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

與一般的多版本不同的是,本論文會在原地更新數據,然后將舊版本數據“壓”到鏈表中去,使用 “壓”是因為鏈表采用頭插法:表頭一側數據較新、表尾一側數據較舊。所有數據的鏈表頭由一個叫?VersionVector的數據結構維護,如果某一行沒有舊數據,對應的位置就是?null

之后,我們之后會一直使用上圖例子來輔助理解原理。這是一個 Sally 持續向別人轉賬的例子。開局時(T0)每人十塊錢,然后 Sally 每次轉給別人 1 塊錢,一共轉了三筆,當前時刻前兩筆已經完成:

Sally → Wendy,提交時間戳為 T3

Sally → Henry,提交時間戳為 T5

正在進行第三筆:

3. Sally → Mike,事務 ID 是 Ty,起始時間戳為 T6

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

版本管理

每個事務在進入系統時會獲取兩個時間戳(uint64):

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

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

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

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

作為該字段多版本的一個舊值。

對于快照隔離和可串行化隔離級別來說,原地更新的值,是不為其他事務所見的,下一小節我們會講如何控制可見性。

在事務提交時,會獲取另外一個時間戳:commitTime-stamp,該時間戳和 startTime-stamp 共用一個自增計數器。

在事務進行中,所有的 Undo Buffer 中的舊值會被打上 transactionID 的時間戳(圖中第三筆轉賬:Ty);在事務提交時,會統一替換為 commitTime-stamp (圖中前兩筆轉賬:T3 和 T5)。

版本可見性

某個事務在訪問一個字段的值時,會首先進行原地訪問,然后沿著該值對應的 VersionVector 指向鏈表進行訪問,直到滿足以下條件后停止:

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

v.pred == null:當該值沒有多版本,或者鏈表到頭時成立。

v.pred.TS == T:正在進行的事務訪問自己更新的數據。

v.pred.TS < T.startTime:通過事務起始時間戳,訪問已經提交的老版本數據。

上述條件比較抽象,我們結合例子來看。Sally 的多次轉賬會形成以下鏈表:

然后來看不同事務訪問 Sally 的 Bal(Balance)數據的可見性:

事務 Ty:(Ty 是一個 > 2^63 的值),所以會在后繼節點滿足:pred == (Ty, Bal, 8)(條件2,Ty == Ty)時停住,此時訪問到的值為 7 ,也即事務 Ty 更新到的值。

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

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

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

比較事務起始時間戳和后繼鏈節時間戳,是為條件 1:

T0 ~ T3:見到的值是 10

T3 ~ T5:見到的值是 9

T5 ~ ∞:見到的值是 8

其中,Ty (事務 ID)相對起始時間戳來說就是無窮大,這就是我們在前一小節提到的將 uint64 對半劈開的妙用之處:

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

事務ID:2^63 ~ 2^64 - 1

另外,null 就相當于 T0 ,是為條件 1 。

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

下篇,我們會詳細講如何基于上述數據結構來實現可串行化隔離級別的。

參考資料

[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

題圖故事

本篇文章來自我的小報童專欄,第二篇解讀也已經在專欄更新,歡迎喜歡我文章的朋友訂閱支持,激勵我產出更多優質文章。訂閱方式見https://xiaobot.net/p/system-thinking,會保證每周不低于兩篇更新。

標簽:

相關閱讀

精彩推薦

相關詞

推薦閱讀

91精品国产自产在线观看永久_香蕉久久一区二区不卡无毒影院_91视频国产精品_日韩成人高清在线_久久久久久久久久久久久女国产乱 _亚洲欧美日韩国产一区二区三区_99久久精品免费看_亚洲影视九九影院在线观看_久久精品国产亚洲_成人a级免费视频
av在线一区二区三区| 成人动漫av在线| 91视频在线观看免费| 午夜精品福利一区二区三区蜜桃| 欧美精品丝袜久久久中文字幕| 国产精品亚洲第一| 成人精品免费视频| 国产一区二区精品久久99| 久久精品噜噜噜成人av农村| 天天爽夜夜爽夜夜爽精品视频| 午夜久久久影院| 国产69精品一区二区亚洲孕妇| 日韩黄色免费电影| 激情成人综合网| 亚洲欧洲日本在线| 丁香婷婷综合网| 欧美特级限制片免费在线观看| 日本亚洲三级在线| 在线播放亚洲一区| 在线一区二区三区做爰视频网站| 精品一区二区三区的国产在线播放| 亚洲乱码国产乱码精品精的特点| 亚洲精品在线电影| 久久婷婷国产综合精品青草| 欧美男生操女生| 欧美日韩国产影片| 精品污污网站免费看| 欧美日本视频在线| 欧美一级黄色大片| 久久精品一级爱片| 国产婷婷色一区二区三区四区| 精品久久五月天| 精品免费视频一区二区| 国产偷v国产偷v亚洲高清| 最新国产成人在线观看| 亚洲欧美日韩在线| 亚洲制服丝袜一区| 国产精品一区二区黑丝| 日本韩国精品在线| 国产农村妇女毛片精品久久麻豆 | 久久成人久久鬼色| 亚洲免费毛片网站| 欧美一区二区三级| 麻豆成人综合网| 久久久亚洲高清| 国内精品不卡在线| 欧美日本韩国一区二区三区视频| 国产欧美日韩精品一区| 亚洲一二三四区不卡| 亚洲精品高清在线观看| 91激情五月电影| 在线日韩国产精品| 18欧美亚洲精品| 99热99精品| 丁香六月综合激情| 国产精品第四页| av电影在线不卡| 男人操女人的视频在线观看欧美| 美女视频一区在线观看| 国产精品久久久久久久久搜平片 | 欧美激情一区二区三区蜜桃视频| 99re这里只有精品首页| 欧美久久久久中文字幕| 国产精品少妇自拍| 色综合欧美在线视频区| 在线不卡的av| 国产亚洲综合性久久久影院| 国v精品久久久网| 日韩制服丝袜av| 日本一区二区三区四区在线视频 | 亚洲欧美日韩一区二区三区在线观看| 色婷婷久久综合| 国产精品一级片在线观看| 亚洲欧洲成人精品av97| 91精品国产欧美一区二区18| 成人一区二区三区视频在线观看| 亚洲6080在线| 亚洲精品伦理在线| 国产精品久久久久婷婷| 精品福利视频一区二区三区| 一本到高清视频免费精品| 国产精品一区在线| 六月丁香婷婷久久| 国产一二三精品| 日韩中文字幕av电影| 日韩电影在线看| 日韩av午夜在线观看| 精品夜夜嗨av一区二区三区| 亚洲一区二区三区视频在线播放| 久久伊99综合婷婷久久伊| 欧美一级一区二区| 丝瓜av网站精品一区二区| 香蕉加勒比综合久久| 一区二区免费在线播放| 美国欧美日韩国产在线播放 | 亚洲一区二区三区自拍| 中文字幕va一区二区三区| 精久久久久久久久久久| 日韩一区二区精品在线观看| 精品国产精品网麻豆系列| 青青青爽久久午夜综合久久午夜| 欧美欧美欧美欧美首页| 美日韩黄色大片| 精品一区二区免费视频| 一二三区精品福利视频| 欧美视频一区二区在线观看| 中文成人综合网| 色系网站成人免费| 高清日韩电视剧大全免费| 国产色产综合色产在线视频| 欧美日本在线播放| 91亚洲大成网污www| 久久国产剧场电影| 日本欧美一区二区三区| 国产精品久久久久久亚洲毛片| 日产国产欧美视频一区精品| 欧洲精品一区二区三区在线观看| 一本到高清视频免费精品| 综合欧美一区二区三区| 韩国v欧美v亚洲v日本v| 亚洲黄色av一区| 亚洲欧美激情在线| 一区二区三区自拍| 香蕉av福利精品导航| 亚洲国产精品一区二区久久恐怖片| 亚洲精品国产无天堂网2021| 欧美不卡视频一区| 亚洲电影一级片| 亚洲精品五月天| 九一九一国产精品| 国产在线精品一区二区不卡了| 亚洲欧美日韩一区二区三区在线观看| 欧美韩国日本不卡| 香蕉久久一区二区不卡无毒影院| 激情另类小说区图片区视频区| 成人av电影免费观看| 欧美猛男男办公室激情| 欧美高清视频www夜色资源网| 欧美日韩精品一区二区三区| 久久久精品综合| 视频在线观看国产精品| 成人免费高清在线| 久久久精品国产99久久精品芒果| 日韩高清国产一区在线| 欧美精品一区二区三区高清aⅴ | 一片黄亚洲嫩模| 亚洲成a人v欧美综合天堂下载 | 波多野结衣精品在线| 国产成人免费在线视频| 一本色道久久综合亚洲精品按摩| 日韩视频永久免费| 久久电影网电视剧免费观看| 91小宝寻花一区二区三区| 久久久国产精华| 成人黄色777网| 亚洲国产美女搞黄色| 欧美一区二区大片| 久久超碰97人人做人人爱| 欧美成人aa大片| 成人a免费在线看| 日本亚洲最大的色成网站www| 久久影视一区二区| 成人午夜在线播放| 亚洲三级在线看| 国产三级久久久| 亚洲视频一区二区在线观看| 日韩激情一区二区| 欧美成人精品3d动漫h| 国产jizzjizz一区二区| 成人h动漫精品| 日韩国产欧美在线视频| 日韩欧美亚洲国产另类| 高清久久久久久| 国产一区高清在线| 蜜桃精品在线观看| 日本aⅴ免费视频一区二区三区 | 国产精品无遮挡| 欧美色视频一区| 97超碰欧美中文字幕| 蜜臀av国产精品久久久久| 国产亚洲欧美中文| 欧美变态tickling挠脚心| 在线中文字幕不卡| 色香蕉成人二区免费| 成人午夜大片免费观看| 日本女优在线视频一区二区| 亚洲欧美一区二区三区久本道91 | 欧美精品一区二区三区高清aⅴ| 99re这里只有精品首页| 午夜伦欧美伦电影理论片| 色狠狠综合天天综合综合| 国产成人av资源| 亚洲欧洲日韩在线| 一本在线高清不卡dvd| 国产亚洲一区二区三区| 精品国产网站在线观看| 欧美一区二区免费视频| 欧美人牲a欧美精品| 国产日韩欧美精品电影三级在线 | 日日嗨av一区二区三区四区|