簡體   English   中英

可以在數據庫打開時使用 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)
    }
}

動態可變的選項是一回事,基本操作 wiki提到了它們:

某些選項可以在 DB 運行時動態更改。 例如: ...

我能找到這些選項的唯一記錄是options.h 這里,有多個選項標記為“//通過 SetOptions() API 動態更改” ,而disable_automatic_compactions 就是其中之一

所以我認為您只需要更改您的Options object,然后在您的 RocksDB 實例上調用setOptions() ,除非您已經這樣做並且它不起作用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM