同時に実行している複数のトランザクションが同じデータを操作するときには、矛盾した結果を生じないよう、それらの間で適切な調整が必要です。Shunsakuはそのための制御を自動的に行います。そのルールは次のようなものです。
同じXML文書に対する参照と更新の操作は同時に動作します。このとき、一方が他方を待たせることはありません。
まだ完了していないほかのトランザクションが更新しているXML文書を更新しようとするとエラーになります。
あるアプリケーションによって参照されたXML文書が、別のトランザクションによって更新されコミットされることがあります。この場合、参照を行ったアプリケーションが同じXML文書を参照しても、先程の結果と異なります。これは、参照を行ったアプリケーションがトランザクションを実行中であっても同じです。
つまり、トランザクションの実行中であるか否かにかかわらず、同じXML文書を複数回参照すると、それぞれの参照は異なるデータを見ることがあります。
1つのトランザクションの実行中に同じ検索式による検索を2回行ったとき、その間に別のトランザクションが検索式に合致するデータを追加しコミットすると、2回目の結果には1回目の結果に含まれていなかったXML文書が含まれます。
図5.1 トランザクションによるデータの整合性保証
以下の表は、同時に実行する2つのトランザクションによる同一のXML文書へのアクセスが競合するかどうかを示します。
検索 | 追加 | 削除 | 更新 | |
---|---|---|---|---|
検索 | ○ | - | ○ | ○ |
追加 | - | - | - | - |
削除 | ○ | - | × | × |
更新 | ○ | - | × | × |
○:競合しない。同時に動作する
×:競合する。あとに実行された操作がエラーになる
-:当てはまる状況はない
注意
コミット処理と検索が同時に動いた場合、コミット処理を行っているトランザクションが行った処理のうち、一部の結果がコミットされている状態を、検索することがあります。