接上
进入setup()
n.storage, err = storage.NewRocksStorage(n.config.Chain.Datadir)
if err != nil {
logging.CLog().WithFields(logrus.Fields{
"dir": n.config.Chain.Datadir,
"err": err,
}).Fatal("Failed to open disk storage.")
}
初始化一个rocksdb
进入newrocksstorage
filter := gorocksdb.NewBloomFilter(10)
bbto := gorocksdb.NewDefaultBlockBasedTableOptions()
bbto.SetFilterPolicy(filter)
cache := gorocksdb.NewLRUCache(512 <<20)
bbto.SetBlockCache(cache)
opts := gorocksdb.NewDefaultOptions()
opts.SetBlockBasedTableFactory(bbto)
opts.SetCreateIfMissing(true)
opts.SetMaxOpenFiles(500)
opts.SetWriteBufferSize(64 * opt.MiB)//Default: 4MB
opts.IncreaseParallelism(4)//flush and compaction thread
db, err := gorocksdb.OpenDb(opts, path)
if err != nil {
return nil, err
}
storage := &RocksStorage{
db: db,
cache: cache,
enableBatch:false,
batchOpts: make(map[string]*batchOpt),
ro: gorocksdb.NewDefaultReadOptions(),
wo: gorocksdb.NewDefaultWriteOptions(),
}
从以上代码看roclsdb对象存在storage.db中
以后每次操作rocksdb就使用n.storage.db.(put,del.get,add)等函数
前面几句是调用gorockdb接口初始化一个rocksdb 将一些参数存在storage中
比如说cache
batchopts顾名思义就是批量操作。string->batchopt 其中string 类型是put get del batchopt是key->value
根据string类型判断是什么操作,然后将batchopt里面的key->value插入或删除或取出
有疑问加站长微信联系(非本文作者)
本文来自:简书
感谢作者:更多精彩内容星云链开始nit小星星MySQL 5.6 Database Administrator 1Z0-883Kevin关大大Go语言蓓蓓的万能男友golang redis数据库基本操作笔记不屈真实在网页上让代码高亮的css及js(偷来的)全栈在路上
查看原文:golang rocksdb