让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

@      罢了漫衍式 Kv

你的位置:拉菲彩票 > 公司资讯 >

罢了漫衍式 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 下来,然后我方随着我的节律做,一步一步宝石下去,服气大约在漫衍式存储领域有个初步的贯通。