这里有一个RocksDB新手。我正在尝试将数据加载到新创建的RocksDB数据库中。我在本机Windows RocksDB库中使用RocksDB Sharp .NET包装器。
一切似乎都在起作用,但当我查看它创建的目录时,我只看到日志文件(总是000003.log
)。我在里面看到了我的数据,但我认为应该创建除日志之外的其他东西。当我尝试使用FastNoSQL打开它时,它可以工作,但由于某种原因,我看到正在创建SST文件。 (这可能是正常格式。)
我正在使用WriteBatchWithIndex
,我尝试设置普通表/块表选项。没有什么变化。
我尝试调整PrepareForBulkLoad
,SetAllowMmapWrites
等等。压缩已关闭。
这是正常的吗?
编辑:我看到更大的表(超过10 Mb)确实获得了SST文件。有没有办法强制较小的“提交”日志?答案 0 :(得分:1)
Flush
rocksdb::DB
来电
// Flush all mem-table data.
virtual Status Flush(const FlushOptions& options,
ColumnFamilyHandle* column_family) = 0;
virtual Status Flush(const FlushOptions& options) {
return Flush(options, DefaultColumnFamily());
}
关闭WAL也意味着牺牲崩溃安全性(对于只写入记事本的记录),这可能对你的用例没问题,但总的来说我不推荐它。无论如何,RocksDb将退休并相对积极地清理持久的WAL,除非你不配置它。
答案 1 :(得分:0)
好的,自己想通了。
迫使RocksDB立即创建SST的最简单方法是禁用WAL(预写日志)。
对于那些没有回答这个问题的有用的灵魂,但是想要评论这种方法是错误的:是的,我知道危险。在我的情况下,没关系。它是一个专门处理文件的特殊生成项目,结果将分发给另一个应用程序。