1

私は自分のコードを、トランザクションなしのTDB支援モデルの使用から、トランザクションありのTDB支援モデルの使用に変換しています。トランザクションがない場合、(このメーリングリストの投稿model.close()からも)トランザクションがない場合、データセットを変更した後、データセットが正しく同期され、自動的に同期されることを確認するために呼び出す必要があることを理解していdataset.sync()ます。

トランザクションを制御する方法には 、
dataset.begin()and dataset.commit()、etc
model.begin()、and model.commit()、 etcの2つのセットがあることに気づきました。

これらの2つの方法のセットの違いは何ですか?呼び出しは、自動的に処理するのと同じ方法でmodel.commit()同等のことを行いますか?dataset.commit()model.close()dataset.sync()

これが明確であることを願っています

4

1 に答える 1

0

model.commit()は、RDFデータセットがSPARQLで発明される前に、ストレージの単位がモデル化されたときに設計された古いインターフェースです。

dataset.begin読み取り/書き込みフラグを取ります。dataset.begin(ReadWrite.READ)。それが読み取りトランザクションであることを知ることにより、システムははるかに効率的に進行でき(後で潜在的な書き込みの管理者がいなくなります)、ロックの問題もありません(2つのトランザクションが他のビューへの読み取りを行ったときにそれぞれ書き込み操作を開始しようとします)。

TDBトランザクションは完全にシリアル化可能であり、データセットレベルで機能します。

TDBトランザクションを使用すると、読み取りトランザクションの開始以降にコミットした新しいライターの深さに関係なく、古い読み取りトランザクションがまだアクティブなときにライターを開始できます。トランザクションが異なれば、データベースの状態も異なり、各状態は一貫しています。ダーティリードはありません。

于 2012-07-31T17:08:10.003 に答える