TerarkDB 兼容 RocksDB 的 KV 存储引擎开源项目

我要开发同款
匿名用户2021年12月17日
171阅读

技术信息

开源地址
https://github.com/bytedance/terarkdb
授权协议
Apache 2.0

作品详情

TerarkDB是字节跳动开源的 RocksDB的替代品,具有优化的尾部延迟、吞吐量和压缩等。在大多数情况下,你可以将现有的RocksDB实例迁移到TerarkDB,没有任何问题。

TerarkDB仅在Liux平台下测试和生产就绪除C/C++之外的语言绑定尚未完全测试。现有数据可以直接从RocksDB迁移到TerarkDB,但不能迁移回RocksDB。TerarkDB是从RocksDBv5.18.3分支出来的性能概览RocksDBv6.12服务器Itel(R)Xeo(R)Gold5218CPU@2.30GHz(2插槽,32核64线程)376GB动态内存NVMeTLC固态硬盘(3.5TB)工作台工具和工作负载利用 db_bech10个客户端线程,每个线程20GB请求键=24字节,值=2000字节heavy_write 意味着90%的写操作heavy_read 意味着90%的读取操作

用法基于块的表(BlockBasedTable)#iclude<cassert>#iclude"rocksdb/db.h"rocksdb::DB*db;rocksdb::Optiosoptios;//Youroptioshereoptios.create_if_missig=true;optios.wal_bytes_per_syc=32768;optios.bytes_per_syc=32768;//OpeDBautostatus=rocksdb::DB::Ope(optios,"/tmp/testdb",&db);//Operatiosstd::strigvalue;autos=db->Put(rocksdb::WriteOptios(),"key1","value1");s=db->Get(rocksdb::ReadOptios(),"key1",&value);assert(s.ok());assert("value1"==value);s=db->Delete(rocksdb::WriteOptios(),"key1");assert(s.ok());

或手动设置表格格式和表格选项:

#iclude<cassert>#iclude"rocksdb/db.h"#iclude"rocksdb/optios.h"#iclude"rocksdb/table.h"rocksdb::DB*db;rocksdb::Optiosoptios;//Yourdboptioshereoptios.create_if_missig=true;optios.wal_bytes_per_syc=32768;optios.bytes_per_syc=32768;//Mauallyspecifytargettableadtableoptiosrocksdb::BlockBasedTableOptiostable_optios;table_optios.block_cache=rocksdb::NewLRUCache(32ULL<<30,8,false);table_optios.block_size=8ULL<<10;optios.table_factory=std::shared_ptr<rocksdb::TableFactory>(NewBlockBasedTableFactory(table_optios));//OpeDBautostatus=rocksdb::DB::Ope(optios,"/tmp/testdb2",&db);//Operatiosstd::strigvalue;autos=db->Put(rocksdb::WriteOptios(),"key1","value1");s=db->Get(rocksdb::ReadOptios(),"key1",&value);assert(s.ok());assert("value1"==value);s=db->Delete(rocksdb::WriteOptios(),"key1");assert(s.ok());Terark压缩表格(TerarkZipTable)#iclude<cassert>#iclude"rocksdb/db.h"#iclude"rocksdb/optios.h"#iclude"rocksdb/table.h"#iclude"table/terark_zip_table.h"rocksdb::DB*db;rocksdb::Optiosoptios;//Yourdboptioshereoptios.create_if_missig=true;optios.wal_bytes_per_syc=32768;optios.bytes_per_syc=32768;//TerarkZipTableeeda`fallback`optiosbecauseyoucaidicatewhichLSMlevelyouwattostartusigTerarkZipTable//Forexample,bysettigtzt_optios.terarkZipMiLevel=2,TerarkDBwilluseyourfallbackTableolevel0ad1.std::shared_ptr<rocksdb::TableFactory>table_factory;rocksdb::BlockBasedTableOptiosblockbased_optios;blockbased_optios.block_size=8ULL<<10;table_factory.reset(NewBlockBasedTableFactory(blockbased_optios));rocksdb::TerarkZipTableOptiostzt_optios;//TerarkZipTablerequiresatempdirectoryotherthadatadirectory,aslowdeviceisacceptabletzt_optios.localTempDir="/tmp";tzt_optios.idexNestLevel=3;tzt_optios.sampleRatio=0.01;tzt_optios.terarkZipMiLevel=2;//StartusigTerarkZipTablefromlevel2table_factory.reset(rocksdb::NewTerarkZipTableFactory(tzt_optios,table_factory));optios.table_factory=table_factory;//OpeDBautostatus=rocksdb::DB::Ope(optios,"/tmp/testdb2",&db);//Operatiosstd::strigvalue;autos=db->Put(rocksdb::WriteOptios(),"key1","value1");s=db->Get(rocksdb::ReadOptios(),"key1",&value);assert(s.ok());assert("value1"==value);s=db->Delete(rocksdb::WriteOptios(),"key1");assert(s.ok());实际性能改进

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

磁盘写入(DiskWrite)

获取延迟(GetLatecy )

功能介绍

TerarkDB 是字节跳动开源的 RocksDB 的替代品,具有优化的尾部延迟、吞吐量和压缩等。在大多数情况下,你可以将现有的 RocksDB 实例迁移到 TerarkDB,没有任何问题。 T...

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论