golang rocksdb

接上

进入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插入或删除或取出

你可能感兴趣的:(golang rocksdb)