无码a片

竣事散播式 Kv

发布日期:2022-06-18 17:08    点击次数:110

竣事散播式 Kv

本文转载自微信公众号「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 接口中界说的几个体式。

这里贴一下结构体的界说:

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

需要阐述的是,在 Reader 体式中,被按摩师玩弄到潮喷在线播放需要复返一个 StorageReader 接口,这是一个综合接口,具体逻辑需要咱们自界说。

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

举例我界说了一个 StandaloneReader:

type StandaloneReader struct {   txn *badger.Txn }  func NewStandaloneReader(txn *badger.Txn) *StandaloneReader {   return &StandaloneReader{     txn: txn,   } } 

这里完成之后,还需要在 kv/server/raw_api.go 中完善相应的 gRPC 接口,告成分解传过来的参数,然后调用 Storage 接口中的体式即可。这里展示一个示例:

func (server *Server) RawGet(_ context.Context, req *kvrpcpb.RawGetRequest) (resp *kvrpcpb.RawGetResponse, err error) {   // Your Code Here (1).   resp = &kvrpcpb.RawGetResponse{}    // get storage reader.   var reader storage.StorageReader   reader, err = server.storage.Reader(req.Context)   if err != nil {     return   }   defer reader.Close()    val, err := reader.GetCF(req.Cf, req.Key)   if len(val) == 0 {     resp.NotFound = true   }   resp.Value = val   return } 

这里的几个接口完成之后,一个完满的 Standalone KV 就完成了。

 

你不错把 TinyKV 的代码 clone 下来,然后我方随着我的节律做,一步一步相持下去,敬佩大致在散播式存储领域有个初步的领会。

 



栏目分类



Powered by 无码a片 @2013-2022 RSS地图 HTML地图