ACIDセマンティクスの確認
リレーショナル・データベースである場合、TimesTenはACIDに準拠しています。
-
原子性: すべてのTimesTenトランザクションは原子性であり、1つのトランザクションのすべてのデータベース操作が実行されるか、1つも実行されないかのいずれかです。
-
一貫性: トランザクションは一貫性を保持したままデータベースの状態を変更できます。
-
独立性: トランザクションは分離されています。TimesTenにはコミット読取りとシリアライズ可能の2つの独立性レベルがあり、これらと行レベルロックを合わせてマルチユーザー並行性制御が提供されます。
-
永続性: トランザクションを一度コミットすると、コミットされた状態が保たれます。
次の項では、TimesTenがトランザクションのACIDセマンティクスを確認する方法について説明します。
トランザクションのアトミック性、一貫性および分離
ロックおよびトランザクション・ログは、トランザクションによってデータベース内のデータが変更されるときに、ACIDセマンティクスを保証するために使用されます。
-
ロック: TimesTenでは、トランザクションで書込みを行うデータ項目と、トランザクション分離レベルに応じて、読取りを行うデータ項目に対してロックを取得します。「分離およびロックによる並行性制御」を参照してください。
-
トランザクションのロギング: すべてのTimesTenトランザクションはアトミックです。トランザクションの結果は、データベースに完全に適用されるか、完全に適用されないかのいずれかになります。データベースへの変更はトランザクション・ログに記録されます。原子性は、トランザクションがロールバックされた場合、トランザクション・ログを使用してその結果を元に戻すことで実現されます。ロールバックは、アプリケーションが明示的に実行したり、障害が発生した時点でトランザクションがコミットされていなかったために、データベースのリカバリ中に実行される場合もあります。「トランザクションのロギング」を参照してください。
次の表に、TimesTenでのロックおよびトランザクション・ログの使用方法を示します。
条件 | 結果 |
---|---|
トランザクションが正常に終了した(コミット済)。 |
|
トランザクションがロールバックされた。 |
|
システムで障害が発生した(データは未コミット)。 |
|
アプリケーションでエラーが発生した |
|
トランザクションの一貫性と永続性
TimesTenは、チェックポイント処理およびトランザクション・ロギングの組合せによる一貫性と永続性を備えています。
-
チェックポイント処理では、現在のインメモリー・データベース・イメージがファイル・システムのチェックポイント・ファイルに書き込まれます。
-
TimesTen Classicでは、チェックポイント処理が正常に行われると、チェックポイント処理時点でコミットされているすべてのトランザクションが一貫性を備え、永続的になります。
-
TimesTen Scaleoutでは、データベース内のデータは複数の要素に分散されます。各要素は、独自のチェックポイントおよびトランザクション・ログ・ファイルを保持します。その結果、各要素に格納されたデータは独立して永続します。
グリッド内の各データ・インスタンスはデータベースの1つの要素を管理します。障害が発生した場合は、1つのデータ・インスタンスでチェックポイント・ファイルおよびトランザクション・ログ・ファイルから、その要素に格納されているデータを自動的にリカバリでき、残りのデータ・インスタンスでアプリケーションの提供を続行します。K-safety値が2以上の場合は、障害が発生した要素をレプリカ・セット内の別の要素からリカバリできます。
-
-
すべてのトランザクションは、インメモリー・トランザクション・ログ・バッファに記録されます。これは、永続トランザクションまたは非永続トランザクションのいずれかを使用してファイル・システムに書き込まれます。「永続性オプション」を参照してください。
ノート:
チェックポイント処理およびロギングの詳細は、「チェックポイント処理」および「トランザクションのロギング」を参照してください。