2

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

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

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

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

这正常吗?

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

4

2 回答 2

2

有一个明确的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,除非您将其配置为不这样做。

于 2018-03-22T12:21:34.750 回答
1

好吧,自己想通了。

强制 RocksDB 立即创建 SST 的最简单方法是禁用 WAL(预写日志)。

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

于 2018-02-26T00:08:43.153 回答