成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實現分布式 Kv-1 Standalone KV

存儲 存儲軟件 分布式
在 TinyKV 中,存儲層是一個抽象接口,分別實現了 raft storage、mem storage、standalone storage,這里我們只需要實現 standalone storage 就行了。

[[437220]]

本文轉載自微信公眾號「roseduan寫字的地方」,作者roseduan。轉載本文請聯系roseduan寫字的地方公眾號。

旨在實現一個簡易的分布式 kv,其中很多代碼框架它已經提供了,我們只需要填充具體的邏輯即可。

這個課程分為了 4 個 Project:

  • Standlone KV
  • Raft KV
  • Multi Raft KV
  • Transaction

分別需要實現單機版 kv、基于 raft(和 multi raft) 一致性算法的 kv、具有分布式事務的 kv,除了第一個 standalone kv 沒有什么難度之外,其他的幾個 Project 都非常的有挑戰,涉及到手寫 raft 算法以及分布式事務。

當然這個課程也是入門和實踐分布式存儲領域的挺好的學習資源,因此記錄一下自己的學習歷程。

今天這篇文章先來看看第一個 Project。

第一個 Project 是集成 Badger,實現一個簡易的單機版 kv。

Badger 是一個很優秀的開源的單機版 kv 存儲引擎,基于 LSM Tree 實現,讀寫性能都很好,因此需要簡單熟悉下 Badger 的用法,可以參考下官方示例:github.com/dgraph-io/bager。

在 TinyKV 中,存儲層是一個抽象接口,分別實現了 raft storage、mem storage、standalone storage,這里我們只需要實現 standalone storage 就行了。

具體的實現,在 kv/storage/standalone_storage/standalone_storage.go 中,需要封裝一下 Badger,然后實現 storage 接口中定義的幾個方法。

這里貼一下結構體的定義:

  1. type StandAloneStorage struct { 
  2.   // Your Data Here (1). 
  3.   badgerDB *badger.DB 
  4.   options badger.Options 

需要說明的是,在 Reader 方法中,需要返回一個 StorageReader 接口,這是一個抽象接口,具體邏輯需要我們自定義。

  1. func (s *StandAloneStorage) Reader(ctx *kvrpcpb.Context) (storage.StorageReader, error) { 
  2.   // Your Code Here (1). 
  3.   txn := s.badgerDB.NewTransaction(false
  4.   reader := NewStandaloneReader(txn) 
  5.   return reader, nil 

例如我定義了一個 StandaloneReader:

  1. type StandaloneReader struct { 
  2.   txn *badger.Txn 
  3.  
  4. func NewStandaloneReader(txn *badger.Txn) *StandaloneReader { 
  5.   return &StandaloneReader{ 
  6.     txn: txn, 
  7.   } 

這里完成之后,還需要在 kv/server/raw_api.go 中完善相應的 gRPC 接口,直接解析傳過來的參數,然后調用 Storage 接口中的方法即可。這里展示一個示例:

  1. func (server *Server) RawGet(_ context.Context, req *kvrpcpb.RawGetRequest) (resp *kvrpcpb.RawGetResponse, err error) { 
  2.   // Your Code Here (1). 
  3.   resp = &kvrpcpb.RawGetResponse{} 
  4.  
  5.   // get storage reader. 
  6.   var reader storage.StorageReader 
  7.   reader, err = server.storage.Reader(req.Context) 
  8.   if err != nil { 
  9.     return 
  10.   } 
  11.   defer reader.Close() 
  12.  
  13.   val, err := reader.GetCF(req.Cf, req.Key
  14.   if len(val) == 0 { 
  15.     resp.NotFound = true 
  16.   } 
  17.   resp.Value = val 
  18.   return 

這里的幾個接口完成之后,一個完整的 Standalone KV 就完成了。

 

你可以把 TinyKV 的代碼 clone 下來,然后自己跟著我的節奏做,一步一步堅持下去,相信能夠在分布式存儲領域有個初步的認知。

 

責任編輯:武曉燕 來源: roseduan寫字的地方
相關推薦

2021-12-20 07:51:17

分布式 Kv分布式 Kv

2022-04-12 15:53:24

存儲緩存分布式

2022-06-27 08:21:05

Seata分布式事務微服務

2019-10-10 09:16:34

Zookeeper架構分布式

2015-05-18 09:59:48

ZooKeeper分布式計算Hadoop

2024-11-28 15:11:28

2025-06-12 09:10:21

2022-01-06 10:58:07

Redis數據分布式鎖

2023-08-21 19:10:34

Redis分布式

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2023-01-13 07:39:07

2023-05-29 14:07:00

Zuul網關系統

2017-09-01 05:35:58

分布式計算存儲

2019-06-19 15:40:06

分布式鎖RedisJava

2019-05-05 08:37:39

分布式PyTorchGPU

2023-10-26 18:10:43

分布式并行技術系統

2017-10-27 08:40:44

分布式存儲剪枝系統

2010-06-03 19:46:44

Hadoop

2022-06-28 08:37:07

分布式服務器WebSocket
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久热m3u8 | 亚洲一区二区精品视频 | 午夜小电影 | 国产区在线视频 | 精品久久久久久久久久久久 | 草草精品| 中文字幕一区二区三区四区 | 在线观看视频中文字幕 | 理论片87福利理论电影 | 美女国产精品 | 国产在线一区二区三区 | 国产激情在线 | 天天干天天操天天爽 | 91精品国产高清一区二区三区 | 青春草国产 | 欧美xxxx在线 | 欧美高清一区 | 国产精品自拍视频网站 | 欧美 日韩 在线播放 | 午夜精品网站 | 国产在线观看av | 久久精品a级毛片 | 国产99久久 | 日韩成人一区二区 | 午夜国产一级 | 婷婷福利视频导航 | 日韩欧美成人一区二区三区 | 天天av天天好逼 | 国产成人99久久亚洲综合精品 | 国产成人精品网站 | 国产精品毛片 | 99视频在线免费观看 | 国产中文视频 | 日韩三级| 日韩在线中文 | 欧美亚洲激情 | 国产精品中文字幕在线 | 精国产品一区二区三区 | h视频免费观看 | 麻豆视频在线免费观看 | 欧美激情一区二区 |