VersionLog は、AkkEngine::history()、AkkEngine::getAt()、AkkEngine::rollbackKey()、AkkEngine::rollbackTo() の裏側で使われる任意の履歴レイヤーです。
過去時点の読み取り、キー単位の変更履歴、ロールバックが必要な場合に有効化します。最新値だけを扱えばよいワークロードでは、書き込み経路を短く保つために無効のままで構いません。
| 機能 | 契約 |
|---|---|
| キー単位の履歴 | コミットされた変更を VersionEntry として確認できます。 |
| 過去時点読み取り | getAt(key, seq) は指定シーケンス以前で見える値を返します。 |
| ロールバック | rollbackKey() と rollbackTo() は新しい変更を追加して状態を戻します。古い履歴は書き換えません。 |
| 圧縮 | 任意で Zstd 圧縮できます。公開 API では展開済みバイト列を返します。 |
| セグメント化 | 履歴は .akvlog セグメントに分割でき、派生 .akvidx サイドカーを持ちます。 |
| 保持期間 | 経過時間またはシーケンス境界で閉じたセグメントを削除し、必要な境界状態は合成ベースエントリとして残せます。 |
| 並列書き込みレーン | PARALLEL 書き込み受付では、独立したレーン別セグメントに履歴を書けます。 |
| 診断 | 復旧、サイドカー、保持処理、並列キューの統計を公開します。 |
目的別に読む
Section titled “目的別に読む”| 目的 | ページ |
|---|---|
履歴を有効化し、VersionEntry を読み、ロールバック API を呼ぶ | VersionLog の使い方 |
| 書き込み経路、ファイル、サイドカー、復旧、保持、Blob との関係を理解する | VersionLog のアーキテクチャ |
| 本番運用で見る統計、保守ツール、障害時の扱いを確認する | VersionLog の運用 |
VersionLog が正本になるのは、履歴値とロールバック判断です。現在値の読み書きは、通常の MemTable、WAL、SST、Blob、任意の Cluster コンポーネントを通ります。
.akvidx サイドカーは派生ファイルです。欠損、古さ、破損があっても、有効な .akvlog データは読めなくなりません。VersionLog は正本であるセグメント走査にフォールバックし、復旧、ローテーション、正常終了、保守ツールでサイドカーの再生成を試みます。
VersionLog が有効な間、Blob GC は引き続き非対応です。古い履歴が過去の Blob 値を参照している可能性があります。VersionLog の保持処理は履歴セグメントを減らすための機能であり、それだけで Blob が未参照になったとは判断しません。