トランザクション ID
- レコードを作成したトランザクションの ID
- レコードを削除したトランザクションの ID (削除されていない場合は 0)
システムはレコードを更新する際、元のレコードを削除し、新しいレコードを挿入して、rowid は保持します。
ディスク上におけるレコードの場所を更新するわけではないので、データの完全性が保持され (ライト・ワンス)、ロールバックおよびリカバリー処理を簡単かつ高速に実行することができます。
照会 (またはバックアップ処理) を実行すると、システムは照会に対し、そのトランザクションの開始前に作成されたレコードへのアクセスを許可しますが、削除されたレコードへのアクセスは許可しません。 xid 値はシーケンシャルなので、システムは作成 xid 値と削除 xid 値を比較して、これを実現します。
例外はトランザクションの開始時で、システムは他のアクティブなトランザクション (これは自分より小さな xid 値を持っています) の不可視リストを生成します。 トランザクションは、作成 xid 値が一致するレコードを無視し、削除 xid 値が一致するレコードを含めます。
xid は 8 バイトの integer 値で、そのうち 48 ビットが有効数字です。 インストール直後には、xid の初期値は 1,024 となります。 利用可能な次の xid 値は、/nz/data/xid ファイルに保存されています。
xid のサイズは 100 兆個以上のトランザクション ID が持てるほどで、1 ミリ秒ごとに 1 トランザクションという頻度で使用していっても 4000 年以上は持つ計算になります。 実際の運用では、トランザクションIDの生成速度は遅くなる可能性が高く、使い切るまでに時間がかかる。