<pre style="box-sizing: border-box; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; font-stretch: normal; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(247, 247, 247); border-radius: 3px; word-break: normal; color: rgb(51, 51, 51);"><span class="pl-v" style="box-sizing: border-box; color: rgb(237, 106, 67);">Storage</span></pre>
local_store
dbStore
Begin
LocalVersionProvider::CurrentVersion
newTxn,创建dbTxn
newSnapshot,用storage和Version创建
NewUnionStore,用上一步创建好的snapshot创建kv.UnionStore
GetSnapshot
GetClient
Close
UUID
CurrentVersion
tikv
tikvStore
Begin
newTiKVTxn
tikvStore::getTimestampWithRetry
tikvStore::oracle.Oracle::GetTimestamp
newTiKVSnapshot,用storage和Version创建
NewUnionStore,用上一步创建好的snapshot创建kv.UnionStore
GetSnapshot
GetClient
Close
UUID
CurrentVersion
<pre style="box-sizing: border-box; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; font-stretch: normal; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(247, 247, 247); border-radius: 3px; word-break: normal; color: rgb(51, 51, 51);"><span class="pl-v" style="box-sizing: border-box; color: rgb(237, 106, 67);">Transaction</span></pre>
local_store
dbTxn
String
SetOption
kv.UnionStore::SetOption
DelOption
kv.UnionStore::DelOption
Commit
dbTxn.doCommit
kv.UnionStore.CheckLazyConditionPairs
kv.UnionStore.WalkBuffer,闭包函数dbTxn.LockKeys
遍历keys,dbTxn::lockedKeys标识
dbStore::CommitTxn
dbStore::doCommit
获取commitVer,如果有正在提交的事务操作,需要等待
dbStore::trylock
检测事务中的lockedKeys和dbStore中的keyslocked是否冲突,提交版本号检测
engine.DB.NewBatch
kv.UnionStore.WalkBuffer,闭包函数
MvccEncodeVersionKey
delete,localstoreCompactor::OnDelete,batch中放入操作
put,localstoreCompactor::OnSet,batch中放入操作
dbStore::writeBatch
engine.DB.Commit
dbStore::unLockKeys
遍历事务中的lockedKeys,检测事务冲突
更新对应key的版本号
dbTxn.close
LockKeys
lockedKeys这个map中标识
RetrieverMutator
Retriever
SeekReverse
kv.UnionStore::SeekReverse
Mutator
kv.UnionStore::Set
kv.UnionStore::Delete
组件
kv.UnionStore
组件
继承BufferStore
组件
继承MemBuffer,RetrieverMutator别名
lazyMemBuffer
Get
判断MemBuffers是否为NULL,为NULL直接返回空
否则调用MemBuffer.Get
Seek
SeekReverse
Set
Delete
Retriever,其实就是snapshot
Get
Seek
SeekReverse
Get
Seek
SeekReverse
WalkBuffer
SaveTo
Snapshot,主要是在CheckLazyConditionPairs中执行批量Get操作使用
Get
MemBuffer.Get
MemBuffer.BufferStore.Retriever.Get
CheckLazyConditionPairs
SetOption
DelOption
GetOption
<pre style="box-sizing: border-box; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; font-stretch: normal; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(247, 247, 247); border-radius: 3px; word-break: normal; color: rgb(51, 51, 51);"><span class="pl-v" style="box-sizing: border-box; color: rgb(237, 106, 67);">Driver</span></pre>
分类
engine.Driver
local_store
boltdb
Open
bolt.Open,返回bolt.DB
开始事务,创建bucket,提交
返回engine.DB
db
Get
Seek
SeekReverse
NewBatch
Commit
goleveldb
Open
leveldb.OpenFile
返回engine.DB
db
Get
Seek
SeekReverse
NewBatch
Commit
tikv
Open
driver.Open,调用engine.Driver.Open,返回db
创建dbStore
mock集群,设置region信息
<pre style="box-sizing: border-box; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; font-stretch: normal; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(247, 247, 247); border-radius: 3px; word-break: normal; color: rgb(51, 51, 51);"><span class="pl-v" style="box-sizing: border-box; color: rgb(237, 106, 67);">Snapshot</span></pre>
local_store
dbSnapshot
Retriever
Get
dbSnapshot::mvccSeek,在当前snapshot中找第一个不小于当前key的,并且version小于snapshot
key和version,使用MvccEncodeVersionKey
dbStore::Seek
dbStore::prepareSeek
engine.DB::Seek
如果key刚好匹配,则返回对应version的value
Seek
newDBIter,返回dbIter
逆序
dbSnapshot::reverseMvccSeek
SeekReverse
BatchGet
遍历,分别调用dbSnapshot::Get
tikv
tikvSnapshot
Retriever
tikvSnapshot::Get
tikvSnapshot::get
CmdGetRequest
RegionCache::LocateKey
tikvStore::SendKVReq
BatchGet
<pre style="box-sizing: border-box; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 13.6px; margin-top: 0px; margin-bottom: 0px; font-stretch: normal; line-height: 1.45; word-wrap: normal; padding: 16px; overflow: auto; background-color: rgb(247, 247, 247); border-radius: 3px; word-break: normal; color: rgb(51, 51, 51);"><span class="pl-v" style="box-sizing: border-box; color: rgb(237, 106, 67);">Iterator</span></pre>
local_store
dbIter
Valid
Key
Value
Next
逆序
dbSnapshot::reverseMvccSeek
Close
tikv