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

2018-01-23 15:11:01 +08:00
 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 公里处的感觉,相信不少同行都有过这种体验。。。

不多说了,大家认为有何改进的地方,欢迎交流~
19303 次点击
所在节点    程序员
131 条回复
linxl
2018-01-23 16:13:32 +08:00
不知道你在说什么, 但是我也会摩拜
kaiser1992
2018-01-23 16:15:30 +08:00
有必要把 benchmark 测试结果贴出来
supercaizehua
2018-01-23 16:16:59 +08:00
程序小白 哈罗
scriptB0y
2018-01-23 16:24:25 +08:00
程序小白 捷达
begeekmyfriend
2018-01-23 16:28:06 +08:00
@kaiser1992 IO 的东西跟机器相关,做不到很公正吧
begeekmyfriend
2018-01-23 16:29:14 +08:00
@soli Redis 和 MySQL 两者之间对比都是不公正的
loading
2018-01-23 16:30:59 +08:00
滴 幼儿票
zxybird
2018-01-23 16:36:20 +08:00
点个 star,予以支持
dobug
2018-01-23 16:43:08 +08:00
点赞
YouXia
2018-01-23 16:46:06 +08:00
赞!
Andiry
2018-01-23 16:47:24 +08:00
初看了一下有问题啊,node_flush()里只有 pwrite 没有 fsync,如何能保证数据落到磁盘呢?支持 failure recovery 吗?
begeekmyfriend
2018-01-23 16:51:53 +08:00
@Andiry 还没做到这一步
cnwtex
2018-01-23 16:54:51 +08:00
没有一个 issue, 这种东西有人在用吗?
Andiry
2018-01-23 16:55:28 +08:00
@begeekmyfriend 那样的话这个性能测试没啥意义了,因为本质还是内存版本。
begeekmyfriend
2018-01-23 16:57:01 +08:00
@Andiry 因为我还没想好怎么加,最笨的方法,你直接在 write 后面 sync 再测一下呗,慢不了的
begeekmyfriend
2018-01-23 16:58:26 +08:00
@cnwtex 我关闭了,另外,老外都 email 了
cnwtex
2018-01-23 17:02:15 +08:00
@begeekmyfriend 不好意思, 没做过开源项目. 都 email 的话, 是你的客户吧?
我搂了一眼, 暂时用不上, 加油!
begeekmyfriend
2018-01-23 17:05:03 +08:00
@cnwtex 据我所知,star 的好多都是前端的,估计不想用数据库。。。
anubiskong
2018-01-23 17:06:09 +08:00
现在时代这么浮躁,难得有你这么坚持做一件事的人,加油
JanKinAn
2018-01-23 17:10:50 +08:00
我默默的删掉了我的 gayhub 库

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

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

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

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

© 2021 V2EX