youdb 一个操作简单的k-v数据库
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
- bolt https://github.com/boltdb/bolt
- goleveldb https://github.com/syndtr/goleveldb
- snappy https://github.com/golang/snappy
给youBBS 添加测试数据的程序 https://www.youbbs.org/t/2133 5楼
0
See Also
Nearby
- 上一篇 › acfun视频
- 下一篇 › 90秒完成youBBS安装