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不存在的时候,要把value和error都返回成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是干啥的,明天继续努力吧💪
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!