public RocksDbContext(string path = "ChainLachain") { _dbpath = path; _writeOptions = new WriteOptions(); _writeOptions.DisableWal(0); _writeOptions.SetSync(true); var options = new DbOptions().SetCreateIfMissing(); _rocksDb = RocksDb.Open(options, _dbpath); }
/// <summary> /// Create rocksdb config and open rocksdb database. /// </summary> /// <param name="context"></param> protected void OpenDatabase(ProcessorContext context) { DbOptions dbOptions = new DbOptions(); ColumnFamilyOptions columnFamilyOptions = new ColumnFamilyOptions(); writeOptions = new WriteOptions(); BlockBasedTableOptions tableConfig = new BlockBasedTableOptions(); RocksDbOptions rocksDbOptions = new RocksDbOptions(dbOptions, columnFamilyOptions); tableConfig.SetBlockCache(RocksDbSharp.Cache.CreateLru(BLOCK_CACHE_SIZE)); tableConfig.SetBlockSize(BLOCK_SIZE); tableConfig.SetFilterPolicy(BloomFilterPolicy.Create()); rocksDbOptions.SetOptimizeFiltersForHits(1); rocksDbOptions.SetBlockBasedTableFactory(tableConfig); rocksDbOptions.SetCompression(COMPRESSION_TYPE); rocksDbOptions.SetWriteBufferSize(WRITE_BUFFER_SIZE); rocksDbOptions.SetCompactionStyle(COMPACTION_STYLE); rocksDbOptions.SetMaxWriteBufferNumber(MAX_WRITE_BUFFERS); rocksDbOptions.SetCreateIfMissing(true); rocksDbOptions.SetErrorIfExists(false); rocksDbOptions.SetInfoLogLevel(RocksLogLevel.ERROR); // this is the recommended way to increase parallelism in RocksDb // note that the current implementation of setIncreaseParallelism affects the number // of compaction threads but not flush threads (the latter remains one). Also // the parallelism value needs to be at least two because of the code in // https://github.com/facebook/rocksdb/blob/62ad0a9b19f0be4cefa70b6b32876e764b7f3c11/util/options.cc#L580 // subtracts one from the value passed to determine the number of compaction threads // (this could be a bug in the RocksDB code and their devs have been contacted). rocksDbOptions.IncreaseParallelism(Math.Max(Environment.ProcessorCount, 2)); // TODO : wrap writeOptions in rocksDbOptions too writeOptions.DisableWal(1); context.Configuration.RocksDbConfigHandler?.Invoke(Name, rocksDbOptions); rocksDbOptions.SetMinWriteBufferNumberToMerge(2); DbDir = new DirectoryInfo(Path.Combine(context.StateDir, parentDir, Name)); Directory.CreateDirectory(DbDir.FullName); OpenRocksDb(dbOptions, columnFamilyOptions); IsOpen = true; }