3

我在运行服务一段时间后使用 RocksDBJava,我可以看到“打开的文件太多”异常。挖掘了门户网站上提到的上一个问题,我发现这是因为系统限制打开最大文件数。当我检查 RocksDB 正在使用的目录时,我注意到有超过 100K 大小为 1KB 的 sst 文件,这可能是给定错误的原因。我想知道有什么方法可以配置rocksDB生成大尺寸的SST文件,这样创建的文件总数最少,我们可以避免这个错误。

同样在我当前的项目中,有许多读取线程和一个写入线程,我在读取或写入 RocksDB 之前打开和关闭连接(使用RocksDB.open()and )。RocksDB.close()

4

2 回答 2

3

您可以使用这两个选项来创建更大的 SST 文件:target_file_size_basetarget_file_size_multiplier. 有关详细信息,请参阅文档

此外,您可以使用该max_open_files选项来限制 RocksDB 可以打开的文件数量。但是,为了获得良好的性能,我建议您增加系统对最大打开文件数的限制,并将其配置max_open_files-1.

于 2017-08-06T08:26:06.457 回答
-1

默认情况下,当您调用RocksDB.open()RocksDB 读取所有 WAL 以恢复 memtable 时,然后flush()将 memtable 写入 SST 文件。这就是为什么你有这么多小 SST 文件的原因。

为了避免这种行为avoid_flush_during_recovery,在打开数据库时将选项设置为 true。Java 版本名为avoidFlushDuringRecovery(). 此外,切勿在代码中调用 flush 或隐式刷新(例如 createCheckpoint 等)。

请参阅此处的代码。

于 2018-07-26T03:02:12.570 回答