RocksDb不会为较小的表创建SST文件

时间:2018-02-16 04:37:07

标签: rocksdb

这里有一个RocksDB新手。我正在尝试将数据加载到新创建的RocksDB数据库中。我在本机Windows RocksDB库中使用RocksDB Sharp .NET包装器。

一切似乎都在起作用,但当我查看它创建的目录时,我只看到日志文件(总是000003.log)。我在里面看到了我的数据,但我认为应该创建除日志之外的其他东西。当我尝试使用FastNoSQL打开它时,它可以工作,但由于某种原因,我看到正在创建SST文件。 (这可能是正常格式。)

我正在使用WriteBatchWithIndex,我尝试设置普通表/块表选项。没有什么变化。

我尝试调整PrepareForBulkLoadSetAllowMmapWrites等等。压缩已关闭。

这是正常的吗?

编辑:我看到更大的表(超过10 Mb)确实获得了SST文件。有没有办法强制较小的“提交”日志?

2 个答案:

答案 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(预写日志)。

对于那些没有回答这个问题的有用的灵魂,但是想要评论这种方法是错误的:是的,我知道危险。在我的情况下,没关系。它是一个专门处理文件的特殊生成项目,结果将分发给另一个应用程序。