github.com/turingchain2020/turingchain@v1.1.21/common/db/README.md (about) 1 # 数据库配置选项说明 2 3 目前支持 [leveldb](https://github.com/syndtr/goleveldb) 和 [badger](https://github.com/dgraph-io/badger)(测试阶段) 4 两种可选数据库做为KV数据存储,默认为leveldb 5 参考性能测试:https://github.com/suyanlong/dbcompare 总结出: 6 - 优点: 7 - badger在机械硬盘环境下,读写速度和leveldb相差不大,但在SSD固态硬盘环境下,读写速度都快于leveldb 8 - badger的KV分离存储,所以相同数据情况下LSM会更小,可以全部加载到RAM,提高读写速度 9 - 缺点: 10 - badger的value是存储在valuelog中的,默认超过1KB的value才会压缩存储,会导致valuelog有很多冗余信息(可通过DB.RunValueLogGC()进行回收),占用磁盘空间会比leveldb多 11 12 ## leveldb 13 选用 [leveldb](https://github.com/syndtr/goleveldb) 做为KV数据存储 14 修改turingchain.toml文件中,[blockchain]、[store]、[wallet] 标签中driver的值为leveldb 15 16 ```toml 17 { 18 "driver": "leveldb" 19 } 20 ``` 21 22 ## badger 23 选用 [badger](https://github.com/dgraph-io/badger) 做为KV数据存储 24 修改turingchain.toml文件中,[blockchain]、[store]、[wallet] 标签中driver的值为gobadgerdb 25 ```toml 26 { 27 "driver": "gobadgerdb" 28 } 29 ``` 30 - 已知bugs: 31 - 在windows环境下,系统重启后会因LOCK文件已存在,不能启动,需要手动删除 32 通过修改 vendor/github.com/dgraph-io/badger/dir_windows.go 72行暂时解决 33 - 在0xff的情况下,边界测试有问题,详见db_test.go 34 35 # 实现自定义数据库接口说明 36 37 ```go 38 type DB interface { 39 Get([]byte) []byte) // 读 40 Set([]byte, []byte) // 写 41 SetSync([]byte, []byte) // 同步写 42 Delete([]byte) // 同步删除 43 DeleteSync([]byte) // 同步删除 44 Close() // 关闭数据库 45 NewBatch(sync bool) Batch // 批量操作 46 //迭代prefix 范围的所有key value, 支持正反顺序迭代 47 Iterator(prefix []byte, key []byte, count int32, reserver bool) Iterator 48 // For debugging 49 Print() // 调试打印 50 Stats() map[string]string // 数据库状态 51 } 52 53 type Batch interface { 54 Set(key, value []byte) // 写 55 Delete(key []byte) // 删除 56 Write() // 事务提交 57 } 58 ```