コンテンツにスキップ

AkkaraDB

akkaradb::AkkaraDB は高レベル API の owner オブジェクトです。engine::AkkEngine を開き、高レベルの起動モードをエンジンオプションに変換し、型付きテーブルとスキーマ登録を提供します。

#include "akkaradb/AkkaraDB.hpp"
auto db = akkaradb::AkkaraDB::open("data/app", akkaradb::StartupMode::NORMAL);

単純な組み込みデータベースでは open(path, mode) を使います。保存コンポーネントや API サーバー設定を明示的に制御したい場合は open(AkkaraDB::Options) を使います。

akkaradb::AkkaraDB::Options options;
options.dataDir = "data/app";
options.mode = akkaradb::StartupMode::DURABLE;
options.overrides.versionLogEnabled = true;
options.overrides.blobThresholdBytes = 64ULL * 1024ULL;
auto db = akkaradb::AkkaraDB::open(std::move(options));
Modeエンジンの挙動
ULTRA_FASTWAL、SST、Blob、Manifest、VersionLog を無効化し、close 時の強制 flush / sync も無効にし、大きい MemTable しきい値を使います。
FASTWAL は非同期 sync、VersionLog は無効、SST read promotion は有効、MemTable しきい値は大きめです。
NORMAL通常のコンポーネント構成と非同期 WAL 同期を使います。
DURABLEsync WAL を使い、VersionLog を有効にします。

StartupMode はプリセットとして扱います。本番で依存する挙動は、Options::overrides で明示しておく方が読みやすくなります。

テーブルはメンバポインタで開きます。

auto users = db->table<&User::id>("users");

テーブル名は物理的なキー名前空間の一部です。テーブル名の変更は見た目の変更ではなく、保存データの移行です。

高レベルラッパーは下層エンジンを隠しません。

auto& engine = db->engine();
auto stats = engine.stats();

PackedTable に型付きラッパーがない低レベル機能は db->engine() から使います。生のエンジンキーに対する getAt()history()rollbackKey()rollbackTo() などが該当します。

AkkaraDB はエンジンを所有し、デストラクタで close しますが、サービスやテストでは明示的な close が便利です。

db->close();

オブジェクトはコピー不可 / ムーブ不可です。データベースディレクトリごとに 1 つの owner を持ち、ストレージへのアクセスが必要なサービスにはテーブルや参照を渡す形にします。