![]() | 1 wangmm 2018-01-23 15:13:21 +08:00 ![]() 厉害 程序小白摩拜! |
![]() | 2 hahasong 2018-01-23 15:14:49 +08:00 via iPhone ![]() 程序小白 OFO |
![]() | 3 Applenice 2018-01-23 15:17:52 +08:00 ![]() 程序小白 小蓝 |
![]() | 4 allen6699 2018-01-23 15:19:43 +08:00 程序小白 滴滴 |
5 xjr1022 2018-01-23 15:20:37 +08:00 程序小白 滴滴 |
6 Ethous 2018-01-23 15:22:29 +08:00 via Android 一件事,能坚持做三年。这种毅力值得点赞! |
7 stoldog 2018-01-23 15:23:27 +08:00 ![]() 程序小白 HelloBike |
![]() | 8 zorui 2018-01-23 15:26:00 +08:00 ![]() 程序小白 小鸣 |
![]() | 9 xntop 2018-01-23 15:36:14 +08:00 关键是视机器而定,哈哈 |
10 jzds001 2018-01-23 15:37:27 +08:00 赞坐 |
![]() | 11 owenliang 2018-01-23 15:46:18 +08:00 红黑书与 B 树是我从来没试图写过的数据结构,虽然后面 K/V 时代出现了更多牛逼的树,但都很难! |
![]() | 13 ynyounuo 2018-01-23 15:52:20 +08:00 ![]() 恭喜你,你的心里有了 B 树 |
![]() | 14 jadec0der 2018-01-23 15:52:41 +08:00 lz 牛逼啊,这么有耐心,佩服佩服 |
![]() | 15 Applenice 2018-01-23 15:55:12 +08:00 去点了 star~~~ |
![]() | 16 wowo243 2018-01-23 15:56:39 +08:00 via Android 我是来看回复的。。。 |
17 luckychenhaha 2018-01-23 16:01:23 +08:00 666,先 star 为敬 |
![]() | 18 jecshcier 2018-01-23 16:08:20 +08:00 via iPhone 看回复来的。。。 |
![]() | 19 codexu 2018-01-23 16:12:36 +08:00 给大佬递 star |
![]() | 20 soli 2018-01-23 16:13:11 +08:00 不来个横向对比么? 比如和 Redis、MySQL 等对比一下性能? |
21 linxl 2018-01-23 16:13:32 +08:00 不知道你在说什么, 但是我也会摩拜 |
22 kaiser1992 2018-01-23 16:15:30 +08:00 有必要把 benchmark 测试结果贴出来 |
![]() | 23 supercaizehua 2018-01-23 16:16:59 +08:00 via Android 程序小白 哈罗 |
![]() | 24 scriptB0y 2018-01-23 16:24:25 +08:00 程序小白 捷达 |
![]() | 25 begeekmyfriend OP @kaiser1992 IO 的东西跟机器相关,做不到很公正吧 |
![]() | 26 begeekmyfriend OP @soli Redis 和 MySQL 两者之间对比都是不公正的 |
![]() | 27 loading 2018-01-23 16:30:59 +08:00 滴 幼儿票 |
28 zxybird 2018-01-23 16:36:20 +08:00 点个 star,予以支持 |
29 dobug 2018-01-23 16:43:08 +08:00 点赞 |
![]() | 30 YouXia 2018-01-23 16:46:06 +08:00 赞! |
![]() | 31 Andiry 2018-01-23 16:47:24 +08:00 初看了一下有问题啊,node_flush()里只有 pwrite 没有 fsync,如何能保证数据落到磁盘呢?支持 failure recovery 吗? |
![]() | 32 begeekmyfriend OP @Andiry 还没做到这一步 |
![]() | 33 cnwtex 2018-01-23 16:54:51 +08:00 没有一个 issue, 这种东西有人在用吗? |
![]() | 34 Andiry 2018-01-23 16:55:28 +08:00 @begeekmyfriend 那样的话这个性能测试没啥意义了,因为本质还是内存版本。 |
![]() | 35 begeekmyfriend OP @Andiry 因为我还没想好怎么加,最笨的方法,你直接在 write 后面 sync 再测一下呗,慢不了的 |
![]() | 36 begeekmyfriend OP @cnwtex 我关闭了,另外,老外都 email 了 |
![]() | 37 cnwtex 2018-01-23 17:02:15 +08:00 @begeekmyfriend 不好意思, 没做过开源项目. 都 email 的话, 是你的客户吧? 我搂了一眼, 暂时用不上, 加油! |
![]() | 38 begeekmyfriend OP ![]() @cnwtex 据我所知,star 的好多都是前端的,估计不想用数据库。。。 |
![]() | 39 anubiskong 2018-01-23 17:06:09 +08:00 现在时代这么浮躁,难得有你这么坚持做一件事的人,加油 |
40 JanKinAn 2018-01-23 17:10:50 +08:00 via Android 我默默的删掉了我的 gayhub 库 |
![]() | 41 duesicilie 2018-01-23 17:36:25 +08:00 滴!发生了什么?这不是个上班时间灌水用的地儿吗 |
![]() | 42 exch4nge 2018-01-23 17:44:37 +08:00 div class="sep5"> 在精神上支持 LZ。不过不知道什么场景下会用 LZ 这种库,生产环境下 leveldb 是更好的一种选择吧。 |
![]() | 43 begeekmyfriend OP @exch4nge 本来是想写个 database 的,但按照进度估计写不动了,做到这地步,交接给有缘人吧 |
![]() | 44 zpf124 2018-01-23 17:50:35 +08:00 只能称赞一句,但我技术差太多而且没有什么毅力估计没法模仿大佬的历程。 |
![]() | 45 zouqiang 2018-01-23 17:55:24 +08:00 膜拜 |
![]() | 46 fcten 2018-01-23 18:01:37 +08:00 file: bplustree.c line: 1079 _max_order = (block_size - sizeof(node)) / (sizeof(key_t) + sizeof(off_t)); 有符号数与无符号数一起运算,导致 block_size < sizeof(node) 时返回非预期的结果 |
![]() | 47 begeekmyfriend OP @fcten 你给 block_size 设置了一个多大的数? |
![]() | 48 fcten 2018-01-23 18:06:37 +08:00 ![]() @begeekmyfriend -- B+tree setting... Set data index file name (e.g. /tmp/data.index): Set index file block size (bytes, power of 2, e.g. 4096): 4 config node order:1431655762 and leaf entries:1431655762 Please input command (Type 'h' for help): i 1 Segmentation fault (core dumped) |
![]() | 49 skadi 2018-01-23 18:20:52 +08:00 如果只是数据结构的话,大学的时候 b 树以及几个变种自己都手动实现过.并不觉得... |
50 chenweidong 2018-01-23 18:24:21 +08:00 吊就一个字,我只说一次。 |
![]() | 51 begeekmyfriend OP |
52 daozhihun 2018-01-23 18:29:50 +08:00 via Android 歪个楼,楼主的头像我第一眼看以为是刑舅舅 |
![]() | 53 begeekmyfriend OP @skadi 半分钟内插入 1KW 个 key 再说,不然就是假的 B 树 |
![]() | 54 acros 2018-01-23 18:45:45 +08:00 捂着脸说一句:我看不懂(其实也压根没看,B+树磁盘存储 CRUD 几个关键字好像离我很远)。 能搭配开发博客看就好了,或者随便写写开发心得啊。 比如 rapidjson 的这个做法,博客比代码容易引流嘛: https://github.com/Tencent/rapidjson https://zhuanlan.zhihu.com/p/20029820 |
![]() | 55 hsuan 2018-01-23 19:08:34 +08:00 via Android 挺好的,不过想不到有啥用 |
56 stabc 2018-01-23 19:11:11 +08:00 既然说了“视机器而定”,为什么不把你的性能测试的机器硬件贴出来呢? |
57 closedevice 2018-01-23 19:16:33 +08:00 不错,加油 |
![]() | 58 0915240 2018-01-23 19:20:19 +08:00 给大佬端茶倒水 |
![]() | 59 jeffciu 2018-01-23 19:22:43 +08:00 via iPhone 没仔细研究过 B+树,但还是佩服楼主的成果 |
![]() | 60 likuku 2018-01-23 19:24:10 +08:00 1K 行能写这种底层硬功能,也真是了不起! |
![]() | 61 feng32 2018-01-23 19:31:48 +08:00 via Android 赞一个 因为业务关系,我现在只记得 k-d 树的写法了 |
![]() | 62 begeekmyfriend OP @feng32 KD 树我也有,要不要 PK 一下: https://github.com/begeekmyfriend/kdtree |
![]() | 63 begeekmyfriend OP @stabc 懒得贴了,thinkpad t440,后面没字母 |
![]() | 64 unique 2018-01-23 19:37:09 +08:00 via iPhone 为楼主的坚持点赞 |
![]() | 65 rashawn 2018-01-23 20:37:48 +08:00 via iPhone 为啥 trending 上有个一样名字的项目 但不是楼主写的 好奇怪 |
![]() | 66 rashawn 2018-01-23 20:39:04 +08:00 via iPhone |
![]() | 67 rashawn 2018-01-23 20:41:01 +08:00 via iPhone 感觉你们两个是有缘人 |
![]() | 69 begeekmyfriend OP @rashawn 你看他 issue,没实现删除,骗 star 来着~ |
![]() | 70 begeekmyfriend OP @acros 人家那是正式发布到很多版本后才写博客的,我连个 database 都没力气写了 |
71 letianqiu 2018-01-23 21:56:03 +08:00 正好在看 B 树,有个问题没有懂,想请教。B 树究竟如何减少磁盘 I/O ?如果 B 树节点里有记录储存在硬盘里的实际地址,那么这个地址是怎么得到的?在写文件之前应该是拿不到实际地址的?如果写完才能拿到,那么是不是再将地址写入? |
![]() | 72 begeekmyfriend OP @letianqiu 我写的是 B+树。 如果要减少磁盘 I/O 那么尽量一个节点容纳多个索引,索引节点越少,读操作 I/O 次数越少,查询越快,但也不能太多,否则插入删除就需要相关子节点全部更新,这就是为什么 B 树的写效率偏低。 我是基于 POSIX 实现的,不是裸机,所以存储的是文件,实际地址自然是文件字节偏移,后面该如何处理你应该明白 |
![]() | 73 HaoyangWei 2018-01-23 22:19:28 +08:00 滋瓷~ 佩服楼主的毅力 |
74 szhaoliang 2018-01-23 22:38:45 +08:00 via Android 都坚持三年了再坚持一下,当初我就是打算做一下别的放松放松再回来,结果现在就只能给大佬倒茶水了...... |
![]() | 75 waterlaw 2018-01-23 23:10:45 +08:00 楼主 Linux 下报如下错误: ``` /home/zjp/Projects/bplustree/tests/bplustree_demo.c: In function ‘ bplus_tree_setting ’: /home/zjp/Projects/bplustree/tests/bplustree_demo.c:29:25: error: this statement may fall through [-Werror=implicit-fallthrough=] printf("\n"); ^~~~~~~~~~~~ /home/zjp/Projects/bplustree/tests/bplustree_demo.c:30:17: note: here case 'q': ^~~~ /home/zjp/Projects/bplustree/tests/bplustree_demo.c:54:25: error: this statement may fall through [-Werror=implicit-fallthrough=] printf("\n"); ^~~~~~~~~~~~ /home/zjp/Projects/bplustree/tests/bplustree_demo.c:55:17: note: here case 'q': ``` |
![]() | 76 wujunze 2018-01-23 23:22:27 +08:00 大神 厉害了 观摩一下代码 |
![]() | 77 begeekmyfriend OP @waterlaw 你这是 clang 吧,还是 demo 测试里的,我没有在 switch-case 里用 break,有意为之,编译选项过于严格了。 |
![]() | 78 Rorysky 2018-01-23 23:37:19 +08:00 有毅力,观摩学习下代码~ |
79 crayhuang 2018-01-23 23:50:23 +08:00 膜拜~ |
![]() | 80 bigeast 2018-01-24 00:01:21 +08:00 |
![]() | 81 begeekmyfriend OP @bigeast 那个还没有删除操作 |
![]() | 82 deali 2018-01-24 00:32:57 +08:00 via Android 默默点赞 |
![]() | 83 caola 2018-01-24 02:28:26 +08:00 程序小白 优拜 |
![]() | 84 Dxer 2018-01-24 07:34:25 +08:00 via Android 只能默默地为你点赞 |
85 Michaelssss 2018-01-24 07:47:05 +08:00 默默点赞 |
87 TreStone 2018-01-24 08:37:04 +08:00 楼主代码风格真是漂亮,打算将楼主 B+树移植到嵌入式平台,目前有一处不是很明白,“ struct free_block ”作用是什么?烦请楼主解惑。 |
![]() | 88 silianbo 2018-01-24 08:41:48 +08:00 mark |
![]() | 89 begeekmyfriend OP @TreStone 那是删除后留下的空节点,可供后来者插入 |
![]() | 90 lxrmido 2018-01-24 08:57:18 +08:00 学习一下,膜拜 |
91 shiyouming91 2018-01-24 09:00:25 +08:00 via iPhone 楼主厉害 这个可能也有参考价值 http://www.lmdb.tech/doc/index.html |
![]() | 92 wsb200514 2018-01-24 09:16:03 +08:00 膜拜 |
93 iamnoten 2018-01-24 09:27:30 +08:00 厉害 |
96 nuanyang 2018-01-24 09:45:10 +08:00 via iPhone 膜拜 |
![]() | 97 hasbug 2018-01-24 09:48:03 +08:00 程序小白 嘟嘟 |
98 cstj0505 2018-01-24 09:48:26 +08:00 佩服 lz 的坚持 |
![]() | 99 zchzch1014 2018-01-24 09:57:45 +08:00 via iPhone 楼主做的事就像自己的名字一样,敬佩 |
100 hellboys 2018-01-24 10:01:36 +08:00 我感觉楼主更牛逼的是这个哈 https://github.com/begeekmyfriend/leetcode |