youbbs avatar

再次比较go实现的两个嵌入式数据库boltdb与leveldb

🕜 by youbbs

以前在用 go 语言来重写 youBBS 时曾比较过这两个比较好的嵌入式数据库。现在第三次改写官网,让我放弃了boltdb,选择 leveldb。

唯一的原因: 写太慢了!!!

写9万多条数据, boltdb 用了 45分,而 leveldb 只用 1.421254603 秒,你没看错,是不到两秒。写机制不同,侧重点不同,不能怪 boltdb ,因为正在折腾数据导入测试、修改,没时间干等,刚好以前写过接口跟 youdb 相同的一个基于 leveldb 的数据库 sdb,所以通过 goland IDE 简单替换,不用5分钟就搞定,很顺利运行。如果你正在使用 youdb ,也不用担心,毕竟 boltdb 是一个很成熟的数据库,运行很稳定,占用 CPU 、内存小。

顺便记一下实际数据大小,boltdb 25MB,leveldb 有 snappy 压缩加持,只有 6MB。

因为 boltdb 支持事务,各种锁🔒限制,而在网站应用中又不能用上事务,一条一条的独立操作,很费时,以后可能对 youdb 做点改写,以适用于对事务有需求的场合。

更新: 已优化好的 youdb 也能使这个密集读写耗时少于2秒 (1.003970444s)参见 https://youbbs.org/t/3280

sdb 示例

Go: sdb 示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
db, _ := sdb.Open("testdb", nil)

db.Hset("name", []byte("k"), []byte("v"))
db.Hget("name", []byte("k"))
db.Hdel("name", []byte("k"))
db.Hincr("name", []byte("k"), 3)
db.Hscan("name", nil, 10)
db.Hrscan("name", nil, 10)

db.Zset("name", []byte("k"), 1)
db.Zget("name", []byte("k"))
db.Zdel("name", []byte("k"))
db.Zincr("name", []byte("k"), 3)
db.Zscan("name", nil, 10)
db.Zrscan("name", nil, 10)

参考

💘 相关文章

评论

共4条关于"再次比较go实现的两个嵌入式数据库boltdb与leveldb"的评论

廖少 avatar
#1 廖少 回复

嗯 我也觉得是 现在才没多少文章,读和写都明显太慢了,啥时候改一下开源哈,另外想问一下获取文章缩略图的代码是啥?我好像没有看到有,想给网站改成博客模板。。。(我是root的小号,手动滑稽🤪)

youbbs avatar
#2 youbbs 回复

@廖少 #1 小号太多。读速度差不多,平时发文,10+ms 的速度也感觉不出来,你这是后知后觉。缩略图是作者的头像👮‍♀️

我这里已当自 hi 的微博客,没人玩😅

廖少 avatar
#3 廖少 回复

@youbbs #2 嗯其实我一直想,如果把表情去掉,扒推特模板,这程序就是个微博,我觉得如果改成微博,用的人应该更多,毕竟论坛程序现在太多了。

youbbs avatar
#4 youbbs 回复

@廖少 #3 有时间倒是可以扒一下推特的配色,用的人多少已不在意,又维持不了生活。个人一直比较喜欢当前这个 bolg 主题,觉得米黄底色看着不累,护眼👀

写一条评论

Based on Golang + fastHTTP + sdb | go1.16.5 Processed in 1ms