10 | boltdb:如何持久化存储你的key-value数据?
该思维导图由 AI 生成,仅供参考
boltdb 磁盘布局
- 深入了解
- 翻译
- 解释
- 总结
boltdb是一种用于持久化存储key-value数据的技术,基于B+树实现了快速查找、写入和事务提交。文章深入介绍了boltdb的磁盘布局和API操作,包括元数据页、B+树索引节点页、B+树叶子节点页等核心数据结构,以及打开boltdb文件、开启写事务、创建bucket和写入key-value数据等操作。boltdb使用B+树高效管理子bucket和key-value数据,同时通过freelist管理页面的分配。此外,文章还解释了boltdb的Open API原理、Put API原理以及事务提交原理。通过对boltdb的核心数据结构和操作流程的深入分析,读者可以快速了解和掌握boltdb持久化存储key-value数据的技术特点。同时,文章提出了思考题,引发读者对于事务提交过程中数据持久化和元数据损坏的思考,为读者提供了进一步思考和探讨的空间。
《etcd 实战课》,新⼈⾸单¥59
全部留言(24)
- 最新
- 精选
- issac唐聪老师,能把每节课的思考题解答一下吗?觉得都是重点有意思的地方,非常感谢老师的辛苦付出!
作者回复: 嗯,一定会的,春节快乐,近期大量时间投入在新稿,思考题后面我会一个个抽空更新,先看看大家自己思考情况,你也可以把你的想法观点在留言里面回复下。
2021-02-10210 - Geek_7d539e事务提交原理 这小节,没有讲清楚单个的客户端事务请求跟批量事务的关系。麻烦老师再放大讲讲下?多谢。老师看着很年轻,造诣确不一般,了不起。
作者回复: 感谢支持,受限篇幅的确有一些内容没覆盖到或更深入介绍,后面加餐的时候我看看能否覆盖到。
2021-07-252 - 写点啥呢请问下唐老师,文章中“boltdb API”一节的示例代码里,"defer tx.Rollback()"将事务回滚放到defer链里,如果事务正常提交了,这时候defer链再调用Rollback会是什么效果?是不是Rollback报错而我们直接忽略掉?
作者回复: 事务正常提交后,tx.db等相关字段会设置为空,执行tx.RollBack后发现tx.db为空,就直接返回了哈,相当于空操作
2021-02-101 - types是key-value数据与consistent index在同一个boltdb事务中更新 请问consistent index 在哪边更新的?
作者回复: 就是你发起一个写请求,MVCC写事物通过boltdb API执行,put写入hello的时候,它也会通过如下的boltdb API, 更新consistent index, 只是bucket名字不一样,最终这两个数据写入,都是在同一个大的boltdb事务中提交的。 如果还有疑问,可以参考下这块代码 https://github.com/etcd-io/etcd/blob/v3.4.9/mvcc/kvstore.go#L546:L556 // put the index into the underlying backend // tx has been locked in TxnBegin, so there is no need to lock it again tx.UnsafePut(metaBucketName, consistentIndexKeyName, bs) atomic.StoreUint64(&s.consistentIndex, ci)
2021-03-033 - 唐聪文中提到的bbolt是etcd社区基于boltdb fork的一个版本,etcd社区负责维护此版本,原因是boltdb作者认为boltdb已经足够成熟稳定,经过了大规模生产环境检验,新特性和优化点合入会对boltdb稳定性造成一定的影响,个人没更多时间再投入到boltdb上,因此boltdb项目变成archived状态2021-02-1017
- 黄骏“下来是两个字节描述 boltdb 的版本号 0x2” ,这里应该是4个字节的版本号吧?2022-11-25归属地:湖北1
- 登顶计划老师您好,请问bbolt工具在哪里下载呢?2022-08-07归属地:广东1
- 菜花第二行的讲解是不是 有问题。或者是哪个图有问题。 有点蒙了。请老师抽空给解答一下。真的。2024-01-19归属地:北京
- 心如水滴课后题: db文件掉电后,key-value数据落库后应该不能损坏。 通过重启etcd后,boltdb需要重新扫描数据构建meta page索引。2024-01-04归属地:北京
- 南北开篇的问题,为什么etcd适合读多写少的场景?boltdb使用b+ tree组织数据,读取数据时,访问磁盘的次数有限,内存还有可能做缓存,而写的commit需要rebalance,对磁盘又大量的写入2022-12-04归属地:上海