接上
進(jìn)入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.")
}
初始化一個(gè)rocksdb
進(jìn)入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對(duì)象存在storage.db中
以后每次操作rocksdb就使用n.storage.db.(put,del.get,add)等函數(shù)
前面幾句是調(diào)用gorockdb接口初始化一個(gè)rocksdb 將一些參數(shù)存在storage中
比如說(shuō)cache
batchopts顧名思義就是批量操作。string->batchopt 其中string 類型是put get del batchopt是key->value
根據(jù)string類型判斷是什么操作,然后將batchopt里面的key->value插入或刪除或取出