youdb 一个操作简单的k-v数据库

By ego008 at 2017-11-11 22:12 • 841次点击
ego008

youdb 是为youBBS 量身定做,在给youBBS golang 版配数据库时,目标是嵌入式k-v 数据库,leveldb 和 boltdb 被选中。

boltdb 被认为是在现代key/value存储中最好的,还支持完全可序列化的ACID事务,读性能稍好,数据保存在一个单独的内存映射的文件里。
leveldb 是google 开发的,没的说,写性能非常棒,读性能稍逊,数据“分层”保存在多个文件里。

这两个都是低层数据库,其结构、api 都很简单,优点是可以按key 排序,充分利用这个特性可以满足youBBS 所需的数据结构。但还有个欠缺,要是还能够按照value 排序就好。

于是就在boltdb 上做一层封装,支持hash、zset 两种数据结构,也让操作更简单。

为什么选boltdb?boltdb 是单文件、扫描方便;leveldb 分层储存,自带snappy 压缩,数据量大后性能可能不稳定。虽然boltdb 是个人项目,但已完善,有Shopify、 Heroku 等大厂在用,生产环境上 1TB 的数据高负载下表现依然很稳。给youBBS 添加了10万用户、1万分类,100万帖子数据,在128MB 小鸡上访问响应飞快。但空间占用较大,如果想用CPU 换空间,可对大的数据使用snappy 压缩。

接口简单示例:

db.Hset("bucket", []byte("k"), []byte("v"))
db.Hget("bucket", []byte("k"))
db.Hdel("bucket", []byte("k"))

db.Zset("bucket", []byte("k"), 1000)
db.Zget("bucket", []byte("k"))
db.Zdel("bucket", []byte("k"))

相关项目地址:
youdb https://github.com/ego008/youdb 47
bolt https://github.com/boltdb/bolt 24
goleveldb https://github.com/syndtr/goleveldb 7
snappy https://github.com/golang/snappy 2

给youBBS 添加测试数据的程序 https://www.youbbs.org/t/2133 22 5楼


youdb, 数据库


目前尚无回复
登录 后发表评论