RocksDb 不会为较小的表创建 SST 文件
RocksDb does not create SST files for smaller tables
这里是 RocksDB 新手。我正在尝试将数据加载到新创建的 RocksDB 数据库中。我在本机 Windows RocksDB 库周围使用 RocksDB Sharp .NET 包装器。
一切似乎都在工作,但是当我查看它创建的目录时,我只看到日志文件(总是 000003.log
)。我在里面看到了我的数据,但我认为它应该创建日志以外的东西。当我尝试使用 FastNoSQL 打开它时,它起作用了,但由于某种原因,我看到正在创建 SST 文件。 (这可能是正常格式。)
我正在使用 WriteBatchWithIndex
并尝试设置普通 table / 块 table 选项。没有什么改变。
我尝试调整 PrepareForBulkLoad
、SetAllowMmapWrites
等等。压缩关闭。
这正常吗?
编辑:我看到更大的 tables(超过 10 Mb)确实获得了 SST 文件。有没有办法强制较小的 "commit" 日志?
好的,我自己想出来了。
强制 RocksDB 立即创建 SST 的最简单方法是禁用 WAL(Write-Ahead 日志)。
致那些不愿回答问题但想评论该方法错误的乐于助人的人:是的,我知道其中的危险。在我的情况下,没关系。这是一个专门处理文件的特殊 generation-only 项目,结果将分发给另一个应用程序。
在 rocksdb::DB
上有明确的 Flush
调用
// 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 也意味着牺牲 crash-safety(对于只写入 memtables 的记录),这对您的 use-case 可能没问题,但总的来说我不会推荐它。无论如何,RocksDb 都会退出并相对积极地清理持久化的 WAL,除非您将其配置为不这样做。
这里是 RocksDB 新手。我正在尝试将数据加载到新创建的 RocksDB 数据库中。我在本机 Windows RocksDB 库周围使用 RocksDB Sharp .NET 包装器。
一切似乎都在工作,但是当我查看它创建的目录时,我只看到日志文件(总是 000003.log
)。我在里面看到了我的数据,但我认为它应该创建日志以外的东西。当我尝试使用 FastNoSQL 打开它时,它起作用了,但由于某种原因,我看到正在创建 SST 文件。 (这可能是正常格式。)
我正在使用 WriteBatchWithIndex
并尝试设置普通 table / 块 table 选项。没有什么改变。
我尝试调整 PrepareForBulkLoad
、SetAllowMmapWrites
等等。压缩关闭。
这正常吗?
编辑:我看到更大的 tables(超过 10 Mb)确实获得了 SST 文件。有没有办法强制较小的 "commit" 日志?
好的,我自己想出来了。
强制 RocksDB 立即创建 SST 的最简单方法是禁用 WAL(Write-Ahead 日志)。
致那些不愿回答问题但想评论该方法错误的乐于助人的人:是的,我知道其中的危险。在我的情况下,没关系。这是一个专门处理文件的特殊 generation-only 项目,结果将分发给另一个应用程序。
在 rocksdb::DB
Flush
调用
// 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 也意味着牺牲 crash-safety(对于只写入 memtables 的记录),这对您的 use-case 可能没问题,但总的来说我不会推荐它。无论如何,RocksDb 都会退出并相对积极地清理持久化的 WAL,除非您将其配置为不这样做。