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));StartupMode
Section titled “StartupMode”| Mode | エンジンの挙動 |
|---|---|
ULTRA_FAST | WAL、SST、Blob、Manifest、VersionLog を無効化し、close 時の強制 flush / sync も無効にし、大きい MemTable しきい値を使います。 |
FAST | WAL は非同期 sync、VersionLog は無効、SST read promotion は有効、MemTable しきい値は大きめです。 |
NORMAL | 通常のコンポーネント構成と非同期 WAL 同期を使います。 |
DURABLE | sync WAL を使い、VersionLog を有効にします。 |
StartupMode はプリセットとして扱います。本番で依存する挙動は、Options::overrides で明示しておく方が読みやすくなります。
テーブルはメンバポインタで開きます。
auto users = db->table<&User::id>("users");テーブル名は物理的なキー名前空間の一部です。テーブル名の変更は見た目の変更ではなく、保存データの移行です。
エンジンへのアクセス
Section titled “エンジンへのアクセス”高レベルラッパーは下層エンジンを隠しません。
auto& engine = db->engine();auto stats = engine.stats();PackedTable に型付きラッパーがない低レベル機能は db->engine() から使います。生のエンジンキーに対する getAt()、history()、rollbackKey()、rollbackTo() などが該当します。
ライフサイクル
Section titled “ライフサイクル”AkkaraDB はエンジンを所有し、デストラクタで close しますが、サービスやテストでは明示的な close が便利です。
db->close();オブジェクトはコピー不可 / ムーブ不可です。データベースディレクトリごとに 1 つの owner を持ち、ストレージへのアクセスが必要なサービスにはテーブルや参照を渡す形にします。