共識演算法-LevelDB
LevleDB 是什麼
- leveldb 是 google 兩位工程師使用 C++實現的單機版 k-v 儲存系統
- key 和 value 都是任意的位元組陣列,支援記憶體和持久化儲存
- 資料都是按照 key 排序,使用者可以重寫排序函式
- 包含基本的資料操作介面,Put(key,value),Get(key),Delete(key)
- 多操作可以當成一次原子操作
LevleDB 的侷限性
- leveldb 是非關係型資料庫,不支援 SQL 查詢也不支援索引
- 同一時間只支援單程式(支援多執行緒)訪問 db
- 不支援客戶端-伺服器模型,使用者需要自己封裝
LevelDB工作流程
LevelDB儲存介質分為記憶體和硬碟兩種
(一)記憶體:記憶體中有memtable 和immutable memtable
(二)硬碟:硬碟中有log檔案,manifest檔案,current檔案和sstable檔案
//DB的結構體
type DB struct {
path string
data map[string][]byte
}
//模擬開啟
func New(path string) (*DB, error) {
self := DB{
path: path,
data: make(map[string][]byte),
}
return &self, nil
}
//模擬關閉
func (self *DB) Close() error {
return nil
}
Put
//Put
func (self *DB) Put(key []byte, value []byte) error {
self.data[string(key)] = value
return nil
}
Get
//Get
func (self *DB) Get(key []byte) ([]byte, error) {
if v, ok := self.data[string(key)]; ok {
return v, nil
} else {
//取不到
return nil, fmt.Errorf("NotFound")
}
}
Delete
//Delete
func (self *DB) Del(key []byte) (error) {
if _, ok := self.data[string(key)]; ok {
delete(self.data, string(key))
return nil
} else {
return fmt.Errorf("NotFound")
}
}
模擬遍歷:
//定義
type Iterator interface {
Next() bool
Key() []byte
Value() []byte
Close() error
}
//定義一個鍵值對結構體
type Pair struct {
Key []byte
Value []byte
}
//定義迭代器
type DefaultIterator struct {
data []Pair
index int
length int
}
func NewDefaultIterator(data map[string][]byte) *DefaultIterator {
//建立預設迭代器
self := new(DefaultIterator)
self.index = -1
self.length = len(data)
for k, v := range data {
p := Pair{
Key: []byte(k),
Value: v,
}
//遍歷出的資料新增到data
self.data = append(self.data, p)
}
return self
}
//是否存在下一個值
func (self *DefaultIterator) Next() bool {
//若還有值,index加1
if self.index < self.length-1 {
self.index++
return true
}
return false
}
func (self *DefaultIterator) Key() []byte {
//判斷是否越界
if self.index == -1 || self.index >= self.length {
panic(fmt.Errorf("越界"))
}
return self.data[self.index].Key
}
func (self *DefaultIterator) Value() []byte {
//判斷是否越界
if self.index >= self.length {
panic(fmt.Errorf("越界"))
}
return self.data[self.index].Value
}
func (self *DefaultIterator) Close() error {
return nil
}
相關文章
- 初識:LevelDB
- Pow共識演算法演算法
- PBFT共識演算法演算法
- 共識演算法-PoW演算法
- LevelDB學習筆記 (1):初識LevelDB筆記
- 分散式共識演算法分散式演算法
- 【go共識演算法】-POWGo演算法
- Raft共識演算法詳解Raft演算法
- Paxos共識演算法詳解演算法
- CSA GCR:共識演算法與共識安全白皮書(附下載)GC演算法
- Bystack的高TPS共識演算法演算法
- 深入剖析共識性演算法 Raft演算法Raft
- 區塊鏈主流共識演算法區塊鏈演算法
- 淺談 CAP 和 Paxos 共識演算法演算法
- DPOS 共識演算法 - 缺失的白皮書演算法
- 可用於區塊鏈的共識演算法區塊鏈演算法
- 分散式系統之Raft共識演算法分散式Raft演算法
- 共識演算法的比較:Casper vs Tendermint演算法
- 區塊鏈主流共識演算法彙總區塊鏈演算法
- 對話 | 淺析NEO的dBFT共識演算法演算法
- 共識演算法PoS及Go語言實現演算法Go
- 4.8 共識演算法的社會學探討演算法
- 區塊鏈共識演算法(3)PoS權益證明演算法區塊鏈演算法
- 分散式系統架構1:共識演算法Paxos分散式架構演算法
- 共識演算法之爭(PBFT,Raft,PoW,PoS,DPoS,Ripple)演算法Raft
- 區塊鏈中五種常見共識演算法區塊鏈演算法
- 第4章 區塊鏈靈魂:共識演算法區塊鏈演算法
- 區塊鏈共識演算法(5)DPoS股份授權證明演算法區塊鏈演算法
- 共識演算法論文閱讀筆記1-hotstuff演算法筆記
- 死磕以太坊原始碼分析之Ethash共識演算法原始碼演算法
- 深入剖析分散式一致性共識演算法分散式演算法
- 幽默!分散式系統共識演算法的三階段分散式演算法
- LevelDB,你好~
- 【阿菜讀論文】區塊鏈共識演算法綜述區塊鏈演算法
- 區塊鏈共識之Paxos演算法理解與實戰區塊鏈演算法
- LevelDB 入門 —— 全面瞭解 LevelDB 的功能特性
- 區塊鏈共識演算法(1)分散式一致性演算法Raft區塊鏈演算法分散式Raft
- 區塊鏈共識演算法(4)分散式一致性演算法Paxos區塊鏈演算法分散式