tinykv学习记录

tinykv学习记录

2022.1.14

学习Golang,笔记见《Golang学习笔记》

2022.1.15

继续学习Golang,稍微读了一下kv和badger,感觉和刚开始搞OceanBase的时候一样,很懵,不过应该过几天就好了。

2022.1.16

摆了一天……

2022.1.17

基本上把Golang都熟悉了,打开GoLand的时候从github上import的全红了,昨天还没事的。只好挂上梯子,重新下载一遍。

晚上尝试写了一下project1,一写就写了好几个小时,一下写到第二天一点多……现在只有RawScan没过,实在De不动了,睡觉起来以后再说吧!

2022.1.18

今天把Project1写完了,感觉没有想象中的那么难。本来以为会像OceanBase miniOB一样写一些涉及到存储底层的东西,没想到只是简单的封装函数……

现在写一下实现的细节吧

  • engine_util是对badger的一个封装,添加了对Column Family的支持,Project1的主要任务就是在StandAloneStorage里调用engine_util里的函数,然后再实现RawXXX函数
  • storage.Storage这个interface感觉就是一个数据库,支持对数据库的读写操作。而StandAloneStorage只需要对engine_util里的函数做一个简单的封装,就可以实现单机数据库的功能
  • 在get的cf不存在的时候,要把valueerror都返回成nil,这里不能直接返回接口里的内容,因为接口会返回ErrKeyNotFound
  • iterator在用完以后要close, txn要discard, 但在没有close iterator的时候直接discard txn的话,会panic, 我的做法是把txn也封装进StandAloneReader里,这样可以用Reader.Close()同时进行txn.Discard()it.Close()
  • iterator在被new出来之后,要先Seek(),我被这个问题困扰了好久。

2022.1.19

读论文

2022.1.20

把论文读完了,感觉整体而言理解起来挺简单的,但是有些安全性证明的细节还是没搞太清楚,等搞清楚了再写。

晚上尝试着写了一下代码,发现comprehension和implementation之间的差距还是很大的,大概知道要写什么样的东西,但就是无从动手,一写起来就捉襟见肘,实在不知道该怎么写,只能看到局部,没有对大局的宏观把控。明天再仔细看一下doc,了解一下框架再写吧。

2022.1.22

坐大牢。有几个问题想不明白,但看了测试函数以后感觉简单了很多。

2022.1.29

摸鱼摸了一周,导致分享会不敢参加……今天写了些project2ab,leader和follower的sync还没有解决,leader收到Append Response以后更新自己的commit后没法通知follower新的commit,挺头疼的

2022.3.31

  • 摸鱼两个月,今天终于把project2ab过了。感觉还是很有必要写一些记录的,不然之后再看代码就一头雾水了。
  • 感觉TestHandleMessageType_MsgAppend2AB的下标为7的测试数据出锅了,就把它改过来了
  • 上次提到的leader更新commit后通知follower的问题,可以直接sendAppend解决,在msg里附加commit就行了
  • 2AB要求becomeLeader后提交noop entry,2AC又要求没有noop entry,太奇怪了!

2022.4.1

  • 今天是愚人节!到启明独占808的感觉好爽!
  • 感觉func TestRawNodeStart2AC就是测试函数出锅了,改了一下。
  • 还看不懂Ready是干啥的,明天继续努力吧💪
posted @ 2022-01-15 21:31  Franky0705  阅读(430)  评论(0编辑  收藏  举报