TerarkDB,ByteDance的RocksDB替代品

2020-12-23 21:27:01

TerarkDB是RocksDB的替代品,具有优化的尾部延迟,吞吐量和压缩等功能。在大多数情况下,您可以将现有的RocksDB实例迁移到TerarkDB,而不会出现任何回退。

可以将现有数据从RocksDB直接迁移到TerarkDB,但不能迁移回RocksDB。

如果这是您第一次使用TerarkDB,建议通过在build.sh中将-DWITH_TERARK_ZIP更改为OFF来不使用TerarkZipTable。

WITH_JEMALLOC:ON是否使用Jemalloc(如果使用其他malloc库,则更改为OFF)

默认情况下,TerarkDB是使用zstd,lz4,snappy,zlib,gtest,boost构建的,如果需要这些库,可以将其从更高级别的应用程序中删除。

我们尚未将所有静态库归档在一起,因此您必须将所有库打包到目标中:

#include< cassert>#include" rocksdb / db.h" rocksdb :: DB * db; rocksdb :: Options选项; //这里的选项options.create_if_missing = true; options.wal_bytes_per_sync = 32768; options.bytes_per_sync = 32768; //打开数据库自动状态= rockdb :: DB :: Open(options," / tmp / testdb&#34 ;,& db); // Operationsstd :: string值;自动s = db-> Put(rocksdb :: WriteOptions()," key1&#34 ;," value1"); s = db-> Get(rocksdb :: ReadOptions()," key1&#34 ;,& value);断言(s.ok()); assert(" value1" == value); s = db-> Delete(rocksdb :: WriteOptions()," key1");断言(s.ok());

#包括< cassert>#包括" rocksdb / db.h"#包括" rocksdb / options.h"#包括" rocksdb / table.h&# 34; rocksdb :: DB * db; rocksdb :: Options选项; //您的数据库选项此处options.create_if_missing = true; options.wal_bytes_per_sync = 32768; options.bytes_per_sync = 32768; //手动指定目标表和表选项rocksdb :: BlockBasedTableOptions table_options; table_options.block_cache = rockdb :: NewLRUCache(32ULL<< Put(rocksdb :: WriteOptions()," key1&#34 ;," value1"); s = db-> Get(rocksdb :: ReadOptions()," key1&#34 ;,& value);断言(s.ok()); assert(" value1" == value); s = db-> Delete(rocksdb :: WriteOptions()," key1");断言(s.ok());

#包括< cassert>#包括" rocksdb / db.h"#包括" rocksdb / options.h"#包括" rocksdb / table.h&# 34;#include" table / terark_zip_table.h" rocksdb :: DB * db; rocksdb :: Options选项; //您的数据库选项此处options.create_if_missing = true; options.wal_bytes_per_sync = 32768; options.bytes_per_sync = 32768; // TerarkZipTable需要一个“ fallback”选项,因为您可以使用TerarkZipTable指示要开始使用哪个LSM级别//例如,通过设置tzt_options.terarkZipMinLevel = 2,TerarkDB将在级别0和1.std上使用fallback Table: shared_ptr< rocksdb :: TableFactory> table_factory; rocksdb :: BlockBasedTableOptions blockbased_options; blockbased_options.block_size = 8ULL<< 10; table_factory.reset(NewBlockBasedTableFactory(blockbased_options)); rocksdb :: TerarkZipTableOptions tzt_options; // TerarkZipTable需要一个临时目录而不是数据目录,可以接受慢速设备tzt_options.localTempDir =" / tmp&#34 ;; tzt_options.indexNestLevel = 3; tzt_options.sampleRatio = 0.01; tzt_options.terarkZipMinLevel = 2; //从级别2table_factory.reset(rocksdb :: NewTerarkZipTableFactory(tzt_options,table_factory)); options.table_factory = table_factory;开始使用TerarkZipTable //打开数据库自动状态= rockdb :: DB :: Open(options," / tmp / testdb2&#34 ;,& db); // Operationsstd :: string值;自动s = db-> Put(rocksdb :: WriteOptions()," key1&#34 ;," value1"); s = db-> Get(rocksdb :: ReadOptions()," key1&#34 ;,& value);断言(s.ok()); assert(" value1" == value); s = db-> Delete(rocksdb :: WriteOptions()," key1");断言(s.ok());

TerarkDB已在Bytedance中部署到许多应用程序中,在大多数情况下,TerarkDB可以帮助减少延迟峰值并极大地提高吞吐量。