コンテンツにスキップ

VersionLog

VersionLog は、AkkEngine::history()AkkEngine::getAt()AkkEngine::rollbackKey()AkkEngine::rollbackTo() の裏側で使われる任意の履歴レイヤーです。

過去時点の読み取り、キー単位の変更履歴、ロールバックが必要な場合に有効化します。最新値だけを扱えばよいワークロードでは、書き込み経路を短く保つために無効のままで構いません。

機能契約
キー単位の履歴コミットされた変更を VersionEntry として確認できます。
過去時点読み取りgetAt(key, seq) は指定シーケンス以前で見える値を返します。
ロールバックrollbackKey()rollbackTo() は新しい変更を追加して状態を戻します。古い履歴は書き換えません。
圧縮任意で Zstd 圧縮できます。公開 API では展開済みバイト列を返します。
セグメント化履歴は .akvlog セグメントに分割でき、派生 .akvidx サイドカーを持ちます。
保持期間経過時間またはシーケンス境界で閉じたセグメントを削除し、必要な境界状態は合成ベースエントリとして残せます。
並列書き込みレーンPARALLEL 書き込み受付では、独立したレーン別セグメントに履歴を書けます。
診断復旧、サイドカー、保持処理、並列キューの統計を公開します。
目的ページ
履歴を有効化し、VersionEntry を読み、ロールバック API を呼ぶVersionLog の使い方
書き込み経路、ファイル、サイドカー、復旧、保持、Blob との関係を理解するVersionLog のアーキテクチャ
本番運用で見る統計、保守ツール、障害時の扱いを確認するVersionLog の運用

VersionLog が正本になるのは、履歴値とロールバック判断です。現在値の読み書きは、通常の MemTable、WAL、SST、Blob、任意の Cluster コンポーネントを通ります。

.akvidx サイドカーは派生ファイルです。欠損、古さ、破損があっても、有効な .akvlog データは読めなくなりません。VersionLog は正本であるセグメント走査にフォールバックし、復旧、ローテーション、正常終了、保守ツールでサイドカーの再生成を試みます。

VersionLog が有効な間、Blob GC は引き続き非対応です。古い履歴が過去の Blob 値を参照している可能性があります。VersionLog の保持処理は履歴セグメントを減らすための機能であり、それだけで Blob が未参照になったとは判断しません。