成人免费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架構分布式

2022-01-06 10:58:07

Redis數據分布式鎖

2023-08-21 19:10:34

Redis分布式

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2015-05-18 09:59:48

ZooKeeper分布式計算Hadoop

2024-11-28 15:11:28

2017-09-01 05:35:58

分布式計算存儲

2019-06-19 15:40:06

分布式鎖RedisJava

2023-05-29 14:07:00

Zuul網關系統

2025-06-12 09:10:21

2019-05-05 08:37:39

分布式PyTorchGPU

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2023-01-13 07:39:07

2012-07-20 14:48:54

Nginx測試

2023-02-06 09:44:35

美圖開源kv存儲

2023-07-30 17:34:53

KV存儲ChunkPosit

2025-06-18 11:16:50

大模型性能KV-Cache
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人福利视频 | 亚洲视频在线观看 | 日本精品在线观看 | 成人a在线观看 | 欧州一区 | 国产一区二区在线播放 | 成人精品一区二区三区中文字幕 | 91九色porny首页最多播放 | 亚洲夜夜爽 | 亚洲精品久久久久久一区二区 | 久久精品国产一区二区电影 | 99在线免费观看 | 亚洲视频精品 | 欧美精品一区二区在线观看 | 国产精品69毛片高清亚洲 | 久久人人爽人人爽 | 日日夜夜精品免费视频 | 91九色婷婷| 国产男女视频 | 1000部精品久久久久久久久 | 国产精品久久久久久久久久免费看 | 成人精品一区二区 | 欧美午夜精品理论片a级按摩 | 中文字幕一级毛片 | 色偷偷噜噜噜亚洲男人 | 91观看| 日本久草视频 | 日韩一区二区三区av | 欧美在线观看一区二区 | 91九色视频在线 | 国产午夜高清 | www亚洲精品 | 欧美成人一区二区三区 | 亚洲视频一区二区三区 | 一区二区视频在线 | 黑人精品欧美一区二区蜜桃 | caoporn国产精品免费公开 | 精品视频在线免费观看 | 精品一区电影 | 欧美嘿咻 | 免费视频中文字幕 |