Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
share
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张振华
share
Commits
00ff43ff
Commit
00ff43ff
authored
Sep 03, 2018
by
张振华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改内容
parent
13f3e16f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
18 additions
and
11 deletions
+18
-11
Store新增支持MVCC的KVDB实现.md
Store新增支持MVCC的KVDB实现.md
+18
-11
mvcc.png
resource/mvcc.png
+0
-0
No files found.
Store新增支持MVCC的KVDB实现.md
View file @
00ff43ff
# 一、现
状 #
# 一、现
状 #
...
@@ -49,7 +49,7 @@ dbCache=128
...
@@ -49,7 +49,7 @@ dbCache=128
[
exec
]
[
exec
]
enableMVCC=true
enableMVCC=true
上述字段置为true,则说明系统开启了MVCC能力。
上述字段置为true,则说明系统开启了MVCC能力。
开启该功能,需要
重新开始同步区块,因为系统对于数据的存储格式及存储位置都有变化调整,如果不重新开始,会出现
问题。
开启该功能,需要
从头开始同步区块,因为系统对于数据的存储格式及存储位置都有变化调整,如果不从头开始同步区块数据,会出
问题。
### 新增区块
### 新增区块
1.
ExecBlock的处理中,通过EventExecTxList触发执行器,执行交易(检查交易,处理手续费,调用具体执行器执行交易),获得交易执行结果KV及日志,存储在receipts,并将kv及StateHash写入Store数据库(通过EventStoreMemSet、EventStoreRollback、EventStoreCommit几个消息触发,分为Set-获得stateHash、Rollback-失败回滚、Commit-提交存储几个步骤)。
1.
ExecBlock的处理中,通过EventExecTxList触发执行器,执行交易(检查交易,处理手续费,调用具体执行器执行交易),获得交易执行结果KV及日志,存储在receipts,并将kv及StateHash写入Store数据库(通过EventStoreMemSet、EventStoreRollback、EventStoreCommit几个消息触发,分为Set-获得stateHash、Rollback-失败回滚、Commit-提交存储几个步骤)。
...
@@ -57,28 +57,34 @@ enableMVCC=true
...
@@ -57,28 +57,34 @@ enableMVCC=true
关于AddMVCC的处理过程描述如下:
关于AddMVCC的处理过程描述如下:
1).首先从本地数据库使用prevHash来获得对应的version
1).首先从本地数据库使用prevHash来获得对应的version
本地数据库中的对应关系:.-mvcc-m.hash->version
本地数据库中的对应关系:
.-mvcc-m.hash->version
校验版本号信息是对的(hash对应的version与preHash对应的preVersion相差1)
校验版本号信息是对的(hash对应的version与preHash对应的preVersion相差1)
2).SetVersionKV
2).SetVersionKV
按如下对应的key-value关系,加入kvset
按如下对应的key-value关系,加入kvset
.-mvcc-m.hash->version
.-mvcc-m.hash->version
.-mvcc-m.version.000000000000xx->hash
.-mvcc-m.version.000000000000xx->hash
3).对于原有的kv进行GetSaveKV处理,生成MVCC的对应version的kv数据,并加入kvset
3).对于原有的kv进行GetSaveKV处理,生成MVCC的对应version的kv数据,并加入kvset
.-mvcc-.d.key.version->value
.-mvcc-.d.key.version->value
4).生成对应版本的versionkeylist数据,并加入kvset
4).生成对应版本的versionkeylist数据,并加入kvset
.-mvcc-.m.versionkl.000000000000xx->delkeys
.-mvcc-.m.versionkl.000000000000xx->delkeys
这个数据用于回滚
删除数据
。
这个数据用于回滚
区块时删除数据使用
。
### 删除区块
### 删除区块
1.
从本地数据中,通过批量删除tx信息
1.
从本地数据中,通过批量删除tx信息
通过EventDelBlock消息触发执行器执行删除交易,获得要删除的kv的正确格式,如果系统配置为支持MVCC,则相关kv要使用DelMVCC处理改造,才能从本地数据库中正确删除;也包括要删除的手续费信息:TotalFeeKey:hash->fee
通过EventDelBlock消息触发执行器执行删除交易,获得要删除的kv的正确格式,如果系统配置为支持MVCC,则相关kv要使用DelMVCC处理改造,才能从本地数据库中正确删除;也包括要删除的手续费信息:
TotalFeeKey:hash->fee
关于DelMVCC的处理过程描述如下:
关于DelMVCC的处理过程描述如下:
1).获取最大的version,检查与要删除的version相等。(删除区块必须从最高区块开始
顺
序删除)。
1).获取最大的version,检查与要删除的version相等。(删除区块必须从最高区块开始
逆
序删除)。
2).DelVersionKV
2).DelVersionKV
按如下对应的key-value关系,加入要删除的kvset
按如下对应的key-value关系,加入要删除的kvset
.-mvcc-m.hash->version
.-mvcc-m.hash->version
.-mvcc-m.version.000000000000xx->hash
.-mvcc-m.version.000000000000xx->hash
新增区块时,保存的对应版本的versionkeylist数据也加入要删除的kvset:
.-mvcc-.m.versionkl.000000000000xx->delkeys
2.
从db中删除block相关的信息
2.
从db中删除block相关的信息
### 开启MVCC与关闭MVCC时的数据读写区别
### 开启MVCC与关闭MVCC时的数据读写区别
...
@@ -121,7 +127,7 @@ Store需要新增接口EventStoreDel,按照要删除的区块高度height,St
...
@@ -121,7 +127,7 @@ Store需要新增接口EventStoreDel,按照要删除的区块高度height,St


底层为leveldb数据库,提供基础的数据存取能力。
底层为leveldb数据库,提供基础的数据存取能力。
上层为对外接口,支持Store原来的对外接口,并提供对回滚区块删除数据的新接口EventStoreDel的支持。
上层为对外接口,支持Store原来的对外接口,并提供对回滚区块删除数据的新接口EventStoreDel的支持。
MVCC处理层作为中间层,对传入的kv或者要查询的k,先进行mvcc的加工处理,再进行数据的存储或者读取,使MVCC的机制能够正常工作。这一层的处理参考现有系统的MVCC实现方式进行改造。
MVCC处理层作为中间层,对传入的kv或者要查询的k,先进行mvcc的加工处理
(主要是数据Key的的加工处理:Prefix+Key+version,以便和数据库中的存储数据格式对应起来)
,再进行数据的存储或者读取,使MVCC的机制能够正常工作。这一层的处理参考现有系统的MVCC实现方式进行改造。
## 5.与当前实现的差异点分析,参见"开启MVCC与关闭MVCC时的数据读写区别"中的表格描述
## 5.与当前实现的差异点分析,参见"开启MVCC与关闭MVCC时的数据读写区别"中的表格描述


\ No newline at end of file
resource/mvcc.png
View replaced file @
13f3e16f
View file @
00ff43ff
58.3 KB
|
W:
|
H:
62.7 KB
|
W:
|
H:
2-up
Swipe
Onion skin
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment