NoSQLでのトランザクション

Oracle NoSQL Databaseでは、トランザクションとは、データベース・アクセス操作を伴う論理的な小さな作業単位です。Oracle NoSQL Databaseでは、すべてのデータ操作はシステムによって管理される単一のトランザクションで実行されます。一部の操作では複数の行を単一の操作に含めることができますが、ユーザーは複数の操作を単一のトランザクションにグループ化することはできません。

トランザクション・セマンティクスは、多くの場合、ACIDプロパティによって記述されます。

ACIDプロパティ:

  • 原子性とは、トランザクション全体が完了または失敗することを意味します。その間の状態はありません。トランザクションの部分的な完了はありません。
  • 一貫性とは、トランザクションがデータベースを有効な状態のままにすることを意味します。
  • 分離とは、2つのトランザクションが互いに混在しないまたは干渉しないことを意味します。2つのトランザクションが順番に実行されても、パラレルに実行されても、同じ結果になります。
  • 永続性とは、トランザクションの変更が保存され、変更があらゆるタイプの障害(ネットワーク、ディスク、CPUまたは電源障害)後も存続することを意味します。

Oracle NoSQL Databaseトランザクションでは、これらすべてのプロパティが保持されます。Oracle NoSQL Databaseでは、ユーザーがトランザクションのプロパティをある程度制御できます。トランザクションに、同じシャード・キーを共有する行に対する多数の書込み操作が含まれる場合、すべての書込み操作を単一の小さな単位として実行できます。そのため、すべての操作が正常に実行されるか、何も実行されません。

トランザクション内の書込み操作の順序は分離して実行されます。つまり、一連の書込み操作を実行するスレッドがある場合、その順序で使用されているデータに、別のスレッドが割り込めないということです。最初に実行されている順序が完了するまで、順序で行われた変更を2番目のスレッドが確認することはできません。

原子性および分離は構成できませんが、Oracle NoSQL Databaseでは、これらのプロパティのニーズが異なるアプリケーションのパフォーマンスをトレードオフするために、一貫性および永続性ポリシーをユーザーが制御できます。

一貫性

Oracle NoSQL Databaseでは様々な一貫性ポリシーが提供されます。広範な一貫性ポリシーの一端では、アプリケーションが絶対的な一貫性を指定できます。これは、すべての読取りが指定キーの一番新しく書き込まれた値を返すことを保証します。広範な一貫性ポリシーのもう一端では、一貫性の低いデータを許容できるアプリケーションが、低い一貫性を指定できます。値が全体的に最新状態になっていない場合でもデータベースが効率的に値を返すことができます。対極にあるこれら2つの間で、アプリケーションは、レコードの古さを制約する時間ベースの一貫性や、read-modify-write操作の原子性と、最低でも指定バージョン以上の読取りの両方をサポートするバージョンベースの一貫を指定できます。

次の図に、Oracle NoSQL Databaseを利用するアプリケーションで使用される一貫性ポリシーの範囲を示します。

一貫性ポリシー

柔軟性の高い一貫性ポリシーのおかげで、開発者は、データ保証を提供する一方で、アプリケーションの待ち時間とスケーラビリティの要件を満たすビジネス・ソリューションを容易に作成できます。