コンテンツにスキップ

低レベル API の設定オプション

akkaradb::engine::AkkEngineOptions は、AkkEngine::open() の前にエンジン構成を決めるための設定構造体です。エンジンを開いた後は、多くの構成要素を実行中に切り替える前提ではありません。

通常の組み込み用途では、まず paths.dataDir と永続化方針だけ決めれば十分です。それ以外の項目は、ストレージ調整、API サーバー、クラスタ実行時設定、ベンチマーク分離のために使います。

akkaradb::engine::AkkEngineOptions opts;
opts.paths.dataDir = "data/akkaradb";
opts.wal.syncMode = akkaradb::engine::wal::WalSyncMode::ASYNC;
opts.runtime.sstPromoteReads = true;
auto db = akkaradb::engine::AkkEngine::open(std::move(opts));

paths.dataDir を設定すると、空のままの各パスはそこから自動的に導出されます。

フィールド導出される値
paths.walDir<dataDir>/wal
paths.blobDir<dataDir>/blobs
paths.sstDir<dataDir>/sstable
paths.manifestPath<dataDir>/manifest.akmf
paths.versionLogPath<dataDir>/history.akvlog
paths.clusterConfigPath<dataDir>/cluster.akcc
paths.nodeIdPath<dataDir>/node.id
フィールドデフォルト意味
components.walEnabledtrue復旧と永続化のための先行書き込みログを有効化します。
components.blobEnabledtrue大きな値を Blob ストレージへ逃がせるようにします。
components.manifestEnabledtrueSST のライフサイクルとチェックポイントを記録します。
components.sstEnabledtrue永続化されたソート済みテーブルを有効化します。
components.versionLogEnabledfalse履歴、過去時点読取、ロールバックを有効化します。
components.clusterEnabledfalseクラスタルーティングとレプリケーション実行時処理を有効化します。
components.apiEnabledfalse設定済みの API 通信層を起動します。

メモリ上だけの軽いテストでは、WAL、Blob、Manifest、SST を無効化できます。実データを扱う組み込み用途では、明確な理由がない限りデフォルトを維持してください。

akkaradb::engine::AkkEngineOptions opts;
opts.components.walEnabled = false;
opts.components.blobEnabled = false;
opts.components.manifestEnabled = false;
opts.components.sstEnabled = false;
フィールドデフォルト意味
runtime.writerThreads0書き込み並列度用の予約項目です。0 はエンジン側の既定挙動です。
runtime.recoverWaltrue起動時に WAL を再生します。
runtime.recoverSsttrue起動時に SST メタデータとファイルを復旧します。
runtime.pruneWalOnFlushtrueフラッシュ済みチェックポイント以前の WAL を削除対象にします。
runtime.forceFlushOnClosetrueclose() 時に未フラッシュの MemTable をフラッシュします。
runtime.forceSyncOnClosetrueclose() 時に永続化対象を物理同期します。
runtime.sstPromoteReadsfalseSST でヒットした値を MemTable 側へ昇格し、繰り返し読取を速くします。

sstPromoteReads は読み取り中心の組み込み用途に向いています。ストレージエンジンの読取経路を厳密に検証したいテストでは、無効のままにすると挙動を追いやすくなります。

フィールドデフォルト意味
memtable.shardCount0明示的なシャード数です。0 ではエンジンが選択します。
memtable.expectedConcurrentWriters0自動シャード数を決めるための並行書き込み数ヒントです。
memtable.autoShardCountCap128自動シャード数の上限です。
memtable.thresholdBytesPerShard64 MiBシャードごとの概算フラッシュ閾値です。
memtable.backendFactorynullptrカスタム MemTable 実装を差し込むためのファクトリです。
memtable.onFlushnullptr内部用のフラッシュコールバックです。通常の利用者は設定しません。

書き込みが多い場合は thresholdBytesPerShard を上げるとフラッシュ頻度を下げられます。メモリ制約が強い場合は下げて、stats.memtable.approxBytes を監視します。

フィールドデフォルト意味
wal.walDir自動導出WAL セグメントのディレクトリです。
wal.syncModeSYNC永続化モードです。SYNCASYNCOFF があります。
wal.shardCount0WAL シャード数です。0 はハードウェアスレッド数ベースの自動選択です。
wal.groupN128非同期フラッシュでまとめる最大エントリ数です。
wal.groupMicros100非同期フラッシュで待つ最大時間です。
wal.groupBytes4 MiB非同期フラッシュでまとめる最大バイト数です。
wal.asyncMaxPendingBytes64 MiB非同期 WAL の未同期データ上限です。

書き込みごとに fsync 境界を越えたい場合は SYNC を使います。短い耐久性ウィンドウを許容してスループットを上げたい場合は ASYNC を使います。OFF は一時データや制御されたベンチマークに限定してください。

フィールドデフォルト意味
sst.sstDir自動導出SST ファイルのディレクトリです。
sst.maxLevels7LSM の最大レベル数です。
sst.maxL0Files4L0 ファイル数の目安です。増えると圧縮処理の圧力が高まります。
sst.l1MaxBytes64 MiBLevel 1 のサイズ予算です。
sst.levelSizeMultiplier10.0レベルごとのサイズ拡大倍率です。
sst.targetFileSizeエンジン既定値生成される SST ファイルの目標サイズです。
sst.blockSizeエンジン既定値SST 内部のブロックサイズです。
sst.bloomBitsPerKeyエンジン既定値Bloom filter の密度です。
sst.blockCacheBytes64 MiBSST ブロックキャッシュの容量です。
sst.compactThreads2バックグラウンド圧縮スレッド数です。
sst.codecZSTDSST の圧縮形式です。

stats.sst.l0Stalls が増える場合は、圧縮処理が書き込みに追いついていない可能性があります。読取時のキャッシュ効率を上げたい場合は blockCacheBytes を見直します。

フィールドデフォルト意味
blob.blobDir自動導出Blob ファイルのディレクトリです。
blob.thresholdBytesエンジン既定値このサイズ以上の値を Blob として保存します。
blob.codecNONEBlob の圧縮形式です。
blob.gcOnFlushfalseフラッシュ時に Blob GC を走らせます。
blob.gcOnClosefalseクローズ時に Blob GC を走らせます。

Blob は大きな値を MemTable や SST 本体から分離するための仕組みです。バージョン履歴と組み合わせる場合、古い履歴が Blob を参照していないことを確認するまで GC の扱いは慎重にしてください。

フィールドデフォルト意味
vlog.logPath自動導出バージョン履歴ログのパスです。
vlog.syncModeASYNC履歴ログの同期モードです。SYNCASYNCBATCHED_SYNC があります。
vlog.groupN128まとめてフラッシュする最大エントリ数です。
vlog.groupMicros500まとめてフラッシュする最大待ち時間です。
vlog.groupBytes1 MiBまとめてフラッシュする最大バイト数です。
vlog.asyncMaxPendingBytes64 MiB未同期の履歴ログデータ上限です。

history()getAt()rollbackKey()rollbackTo() を使う場合は、エンジンを開く前に components.versionLogEnabled を有効化します。

フィールドデフォルト意味
manifest.fastModefalseManifest の永続化処理をバックグラウンドでまとめます。
cluster.config永続化されたクラスタ構成です。
cluster.runtimeBackendPath動的なランタイムプロバイダのパスです。
cluster.runtime既定値レプリケーション通信の実行時設定です。

クラスタ設定はローカル組み込み用途とは分けて考えます。ノード ID、メンバーシップ、通信方式、ACK ポリシーが明確になるまでは components.clusterEnabled は無効のままにしてください。

components.apiEnabled を有効にすると、api.backends で指定した通信層が起動します。

グループ主なフィールド
バックエンド選択api.backends, api.serverBackendPath, api.httpBackendPath, api.tcpBackendPath, api.grpcBackendPath, api.transportBackendPath
HTTPapi.bindHost, api.httpPort, api.httpMaxBatchItems, api.httpMaxScanItems, api.httpMaxHistoryEntries, api.httpMaxContentLength
TCPapi.tcpPort, api.tcpIoBackend, api.tcpWorkerThreads, api.tcpAcceptQueueLimit, api.tcpListenBacklog, api.tcpReadTimeoutMs, api.tcpWriteTimeoutMs, api.tcpNoDelay, api.tcpKeepAlive
gRPCapi.grpcPort, api.grpcWorkerThreads, api.grpcCompletionQueues, api.grpcMinPollers, api.grpcMaxPollers, api.grpcMaxConcurrentStreams, api.grpcResourceQuotaBytes
TLSapi.transportMode, api.tls.certPath, api.tls.keyPath, api.tls.caPath, api.tls.psk, api.tls.pskIdentity, api.tls.verifyPeer

API サーバーは、AkkEngine をプロセス境界や組み込みサービスとして公開したい場合に使います。ライブラリとして直接 AkkEngine を呼ぶだけなら無効のままで問題ありません。

用途重要な設定
単体テストWAL、Blob、Manifest、SST を無効化します。
永続化ありの組み込み DBpaths.dataDir を設定し、WAL、Manifest、SST を有効のままにします。
書き込みスループット重視wal.syncMode = ASYNC、WAL グループ設定、未同期バイト数を調整します。
読み取り中心runtime.sstPromoteReads を有効化し、SST ブロックキャッシュを調整します。
履歴・過去時点読取components.versionLogEnabled を有効化し、vlog.syncMode を明示します。
外部公開components.apiEnabled を有効化し、各通信層の上限値と TLS を設定します。