1K 行 C 写了 3 年,这是我从业以来写过的最烧脑的代码!

2018 年 1 月 23 日
 begeekmyfriend
就这么一个数据结构玩意儿,B+树磁盘存储 CRUD: https://github.com/begeekmyfriend/bplustree

从 2014 年 9 月第一次提交了内存版本实现,到 2018 年 1 月的磁盘版本,总共(坚持)提交了近 200 次。。。

我已经没有力气去说明这三年都迭代了些什么,总之取得了这样的性能(视机器而定)

100W 插入——~3s
100W 删除——~3s
1KW 插入——<30s
1KW 删除——<30s
1 亿插入——<5min
1 亿删除——<5min
10 亿插入——~45min
10 亿删除——~45min

好吧,1 billion 那是我意淫的,我等不起这么多时间。。。读性能就不用列了吧,B+树你懂的

老实说 3 年前我就想写一个 DB,SQL 那种,但光一个 B+树耗了我 3 年最好的时光。我承认不是天才,3 年的迭代都是我犯过的浑与错误,一直坚持到现在。我以为与其写一个各方面都平庸的成品,不如写一个尽量做到极致的 demo,代码量基本维持在 1K 行。好歹也累积了 300+stars 了,感谢用户们的认可。

这种迭代是烧脑的,也是痛苦的。每一次对结构体的压榨,都要牵动数百行源文件的更改,有时候一个提交意味着一整个下午,我的大脑长时间处于马拉松选手泡在 20~30 公里处的感觉,相信不少同行都有过这种体验。。。

不多说了,大家认为有何改进的地方,欢迎交流~
21837 次点击
所在节点    程序员
131 条回复
begeekmyfriend
2018 年 1 月 24 日
@bigeast 那个还没有删除操作
deali
2018 年 1 月 24 日
默默点赞
caola
2018 年 1 月 24 日
程序小白 优拜
Dxer
2018 年 1 月 24 日
只能默默地为你点赞
Michaelssss
2018 年 1 月 24 日
默默点赞
jadeity
2018 年 1 月 24 日
@ZyZyZzz 现在再看看楼下
TreStone
2018 年 1 月 24 日
楼主代码风格真是漂亮,打算将楼主 B+树移植到嵌入式平台,目前有一处不是很明白,“ struct free_block ”作用是什么?烦请楼主解惑。
silianbo
2018 年 1 月 24 日
mark
begeekmyfriend
2018 年 1 月 24 日
@TreStone 那是删除后留下的空节点,可供后来者插入
lxrmido
2018 年 1 月 24 日
学习一下,膜拜
shiyouming91
2018 年 1 月 24 日
楼主厉害 这个可能也有参考价值 http://www.lmdb.tech/doc/index.html
wsb200514
2018 年 1 月 24 日
膜拜
iamnoten
2018 年 1 月 24 日
厉害
dumbass
2018 年 1 月 24 日
@daozhihun #52 团座大人
dumbass
2018 年 1 月 24 日
@daozhihun #52 啊,错了,是师座。
nuanyang
2018 年 1 月 24 日
膜拜
hasbug
2018 年 1 月 24 日
程序小白 嘟嘟
cstj0505
2018 年 1 月 24 日
佩服 lz 的坚持
zchzch1014
2018 年 1 月 24 日
楼主做的事就像自己的名字一样,敬佩
hellboys
2018 年 1 月 24 日
我感觉楼主更牛逼的是这个哈
https://github.com/begeekmyfriend/leetcode

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/425258

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX