可以在数据库打开时使用 java 库更改 RocksDB 设置吗?
Can RocksDB settings be changed with the java library while the database is open?
使用 java 库,任何配置更改是否可以在不需要重新打开数据库的情况下生效?例如 level0SlowdownWritesTrigger
.
更多上下文:我正在尝试在批量加载模式和常规模式之间切换。例如应用程序启动时禁用自动压缩,加载数据,然后启用自动压缩。在测试中,这让我的初始加载时间减少了 75%。
问题是对 Options
的更改不会生效,至少在我进行更改时是这样。我不想重新打开数据库,因为这会使现有的数据流处理变得复杂。
我试过的示例代码。在此示例中,我正在更改选项中的自动压缩设置。
import org.rocksdb.ColumnFamilyOptions
import org.rocksdb.DBOptions
import org.rocksdb.Options
import org.rocksdb.RocksDB
class ExampleRocksDbStore(
private val dataDirectory: String,
private val configureOptions: (options: Options) -> Unit = {},
) {
val db: RocksDB
val options: Options
init {
RocksDB.loadLibrary()
ColumnFamilyOptions().use { cfOpts ->
val dbOptions = DBOptions()
options = Options(dbOptions, cfOpts).apply {
setCreateIfMissing(true)
setCreateMissingColumnFamilies(true)
}
configureOptions(options)
db = RocksDB.open(options, dataDirectory)
}
}
fun enableAutoCompaction() {
options.setDisableAutoCompactions(false)
}
fun disableAutoCompaction() {
options.setDisableAutoCompactions(true)
}
}
动态可变选项是一回事,Basic Operations wiki 提到了它们:
Some options can be changed dynamically while DB is running. For example: ...
我能找到的关于这些选项的唯一记录在 options.h
here, there are multiple options tagged with "// Dynamically changeable through SetOptions() API", and disable_automatic_compactions
is one of them.
中
所以我认为您只需要更改您的 Options
对象,然后在您的 RocksDB 实例上调用 setOptions()
,除非您已经在这样做并且它不起作用?
使用 java 库,任何配置更改是否可以在不需要重新打开数据库的情况下生效?例如 level0SlowdownWritesTrigger
.
更多上下文:我正在尝试在批量加载模式和常规模式之间切换。例如应用程序启动时禁用自动压缩,加载数据,然后启用自动压缩。在测试中,这让我的初始加载时间减少了 75%。
问题是对 Options
的更改不会生效,至少在我进行更改时是这样。我不想重新打开数据库,因为这会使现有的数据流处理变得复杂。
我试过的示例代码。在此示例中,我正在更改选项中的自动压缩设置。
import org.rocksdb.ColumnFamilyOptions
import org.rocksdb.DBOptions
import org.rocksdb.Options
import org.rocksdb.RocksDB
class ExampleRocksDbStore(
private val dataDirectory: String,
private val configureOptions: (options: Options) -> Unit = {},
) {
val db: RocksDB
val options: Options
init {
RocksDB.loadLibrary()
ColumnFamilyOptions().use { cfOpts ->
val dbOptions = DBOptions()
options = Options(dbOptions, cfOpts).apply {
setCreateIfMissing(true)
setCreateMissingColumnFamilies(true)
}
configureOptions(options)
db = RocksDB.open(options, dataDirectory)
}
}
fun enableAutoCompaction() {
options.setDisableAutoCompactions(false)
}
fun disableAutoCompaction() {
options.setDisableAutoCompactions(true)
}
}
动态可变选项是一回事,Basic Operations wiki 提到了它们:
Some options can be changed dynamically while DB is running. For example: ...
我能找到的关于这些选项的唯一记录在 options.h
here, there are multiple options tagged with "// Dynamically changeable through SetOptions() API", and disable_automatic_compactions
is one of them.
所以我认为您只需要更改您的 Options
对象,然后在您的 RocksDB 实例上调用 setOptions()
,除非您已经在这样做并且它不起作用?