1
wangmm 2018-01-23 15:13:21 +08:00 1
厉害 程序小白摩拜!
|
2
hahasong 2018-01-23 15:14:49 +08:00 via iPhone 1
程序小白 OFO
|
3
Applenice 2018-01-23 15:17:52 +08:00 1
程序小白 小蓝
|
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 1
程序小白 HelloBike
|
8
zorui 2018-01-23 15:26:00 +08:00 1
程序小白 小鸣
|
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 33
恭喜你,你的心里有了 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
在精神上支持 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 1
@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
厉害
|
94
bojackhorseman 2018-01-24 09:29:45 +08:00
@daozhihun #52 团座大人
|
95
bojackhorseman 2018-01-24 09:31:57 +08:00
@daozhihun #52 啊,错了,是师座。
|
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 |