我们已经使用RocksDb很多年了。有一个(. net)进程使用RocksDbSharp生成RocskDb数据。有一个c++库可以读取它们。都是从2018年左右开始的。两者都使用Snappy压缩。c++库是在c++ 11下编译的。
我们正在尝试升级到更新的RocksDb。在单元测试中,新的c++库可以很好地创建和读取新文件。但是,在访问现有数据时,它在第一次rocksdb::DB::Open
调用时崩溃(分段错误)。更具体地说,调用堆栈转到LoadTableHandlers
。
下面是源代码,没什么特别的:
rocksdb::DB* db;
rocksdb::Options options;
options.compression = rocksdb::CompressionType::kSnappyCompression;
options.create_if_missing = false;
rocksdb::Status status = rocksdb::DB::Open(options, myValidPath, &db);
参见下面的调用堆栈。
0 x00007ffff97ad144 ZwWaitForSingleObjectWaitForSingleObjectEx 0 x00007ffff6ef306epthread_join 0 x0000000064945edc_ZNSt6thread4joinEv 0 x000000006fce0577rocksdb::VersionBuilder::Rep::LoadTableHandlers(rocksdb::InternalStats*, int, bool, bool, std::shared_ptr
我们需要调整选项吗?
在Speedb Discord中分享了您的问题,并被问到以下问题:
"1。你是否尝试过使用最新的正式版本(例如7.7.3或7.7.2)?
- 从6.2.2到今天你有复习发行说明吗?也许这里有一个提示可以帮助解释这个错误。"
您可以通过此链接加入不和谐频道
点击这个链接找到关于你的问题的帖子
找到解决方法。要求:
options.OptimizeForSmallDb();
打开前消除崩溃。
RocksDb有什么解释或分析吗?