OrientDB-トランザクション

RDBMSと同様に、OrientDBはトランザクションACIDプロパティをサポートします。Atransactionデータベース管理システム内で実行される作業単位で構成されます。データベース環境でトランザクションを維持する主な理由は2つあります。

  • 障害からの同時回復を可能にし、システム障害が発生した場合でもデータベースの一貫性を維持するため。

  • データベースに同時にアクセスするプログラム間の分離を提供するため。

デフォルトでは、データベーストランザクションは、Atomic、Consistent、Isolated、DurableプロパティなどのACIDプロパティに従う必要があります。ただし、OrientDBはACID準拠のデータベースです。つまり、ACIDの概念と矛盾したり否定したりすることはありませんが、NoSQLデータベースの処理中に認識が変わります。ACIDプロパティがNoSQLデータベースとどのように連携するかを見てみましょう。

Atomic −データベースを変更するために何かを行うと、変更は全体として機能するか失敗するはずです。

Consistent −データベースは一貫性を保つ必要があります。

Isolated −他のトランザクション実行が同時に実行されている場合、ユーザーは同時実行のレコードを表示できません。

Durable −システムがクラッシュした場合(ハードウェアまたはソフトウェア)、データベース自体がバックアップを取ることができるはずです。

データベーストランザクションは、CommitコマンドとRollbackコマンドを使用して実行できます。

コミット

コミットとは、データベースへのすべての変更を保存してトランザクションを閉じることを意味します。ロールバックとは、トランザクションを開いた時点までデータベースの状態を回復することを意味します。

次のステートメントは、COMMITデータベースコマンドの基本的な構文です。

COMMIT

Note −このコマンドは、特定のデータベースに接続した後、トランザクションを開始した後にのみ使用できます。

この例では、このチュートリアルの前の章で作成した「demo」という名前の同じデータベースを使用します。コミットトランザクションの操作を確認し、トランザクションを使用してレコードを保存します。

最初に、次のBEGINコマンドを使用してトランザクションを開始する必要があります。

orientdb {db = demo}> BEGIN

次のコマンドを使用して、値id = 12およびname = satish.Pのレコードをemployeeテーブルに挿入します。

orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')

次のコマンドを使用して、トランザクションをコミットできます。

orientdb> commit

このトランザクションが正常にコミットされると、次の出力が得られます。

Transaction 2 has been committed in 4ms

ロールバック

ロールバックとは、トランザクションを開いた時点までデータベースの状態を回復することを意味します。

次のステートメントは、ROLLBACKデータベースコマンドの基本的な構文です。

ROLLBACK

Note −このコマンドは、特定のデータベースに接続した後、トランザクションを開始した後にのみ使用できます。

この例では、チュートリアルの前の章で作成した「demo」という名前の同じデータベースを使用します。ロールバックトランザクションの動作を確認し、トランザクションを使用してレコードを保存します。

最初に、次のBEGINコマンドを使用してトランザクションを開始する必要があります。

orientdb {db = demo}> BEGIN

次のコマンドを使用して、値id = 12およびname = satish.Pのレコードをemployeeテーブルに挿入します。

orientdb> INSERT INTO employee (id, name) VALUES (12, 'satish.P')

次のコマンドを使用して、テーブルemployeeのレコードを取得できます。

orientdb> SELECT FROM employee WHERE name LIKE '%.P'

このコマンドが正常に実行されると、次の出力が得られます。

---+-------+-------------------- 
 # | ID   | name 
---+-------+-------------------- 
 0 | 12   | satish.P 
---+-------+-------------------- 
1 item(s) found. Query executed in 0.076 sec(s).

次のコマンドを使用して、このトランザクションをロールバックできます。

orientdb> ROLLBACK

selectクエリをもう一度チェックして、Employeeテーブルから同じレコードを取得します。

orientdb> SELECT FROM employee WHERE name LIKE '%.P'

ロールバックが正常に実行されると、出力に0レコードが見つかります。

0 item(s) found. Query executed in 0.037 sec(s).