SQL ステートメントを使用して MongoDB にトランザクション処理を実装するにはどうすればよいですか?

PHPz
リリース: 2023-12-17 10:40:13
オリジナル
607 人が閲覧しました

SQL ステートメントを使用して MongoDB にトランザクション処理を実装するにはどうすればよいですか?

SQL ステートメントを使用して MongoDB にトランザクション処理を実装するにはどうすればよいですか?

要約: 非リレーショナル データベースとして、MongoDB はその高いパフォーマンスとスケーラビリティで常に知られています。ただし、トランザクション処理を必要とするアプリケーションの場合、MongoDB は以前のバージョンではトランザクション機能をサポートしていませんでした。ただし、MongoDB バージョン 4.0 からは、SQL ステートメントを使用してトランザクション処理を実装できる、マルチドキュメント ACID トランザクションと呼ばれる機能が導入されました。この記事では、MongoDB で SQL ステートメントによるトランザクション処理を実装する方法を詳しく紹介し、具体的なコード例を示します。

  1. MongoDB での SQL ステートメントの使用の概要
    MongoDB では、MongoDB の公式ドライバーまたはサードパーティ ツールを使用して SQL ステートメントを実行できます。ほとんどの SQL ステートメントは MongoDB で有効ですが、MongoDB は非リレーショナル データベースであり、従来のリレーショナル データベースとは多少異なるため、一部の SQL ステートメントは MongoDB で直接実行できません。
  2. SQL ステートメントを使用して MongoDB でトランザクション処理を実装する方法
    トランザクションとは、論理単位として扱われる一連の操作を指し、すべてが正常に実行されるか、まったく実行されないかのいずれかです。 。 MongoDB では、SQL ステートメントを使用してトランザクション処理を実装できます。具体的な手順は次のとおりです:

2.1 トランザクションの作成
トランザクションを開始する前に、まずセッション (セッション) を作成する必要があります。 ). このセッションは、後続のトランザクション操作に使用されます。セッションを作成するコード例は次のとおりです。

var session = db.getMongo().startSession();
ログイン後にコピー

2.2 トランザクションの開始
セッションを作成した後、BEGIN TRANSACTION ステートメントを実行して新しいトランザクションを開始できます。コード例は次のとおりです。

session.startTransaction();
ログイン後にコピー

2.3 トランザクション操作の実行
トランザクションでは、複数の SQL ステートメントを実行してビジネス ロジックを実装できます。たとえば、トランザクションに 2 つのレコードを挿入する必要がある場合のコード例は次のとおりです。

session.getDatabase('test').users.insert({name: '张三', age: 25});
session.getDatabase('test').users.insert({name: '李四', age: 30});
ログイン後にコピー

2.4 トランザクションを送信またはロールバックする
すべてのトランザクション操作が実行された後、コミットまたはロールバックを選択できます。トランザクションをロールバックします。すべてのトランザクション操作が正常に実行された場合は、COMMIT ステートメントを使用してトランザクションをコミットできます。コード例は次のとおりです。

session.commitTransaction();
ログイン後にコピー

トランザクションの実行中にエラーまたは例外が発生した場合、ROLLBACK ステートメントを使用してトランザクションをロールバックできます。コード例は次のとおりです。

session.abortTransaction();
ログイン後にコピー

2.5 トランザクションとセッションの終了
トランザクションをコミットまたはロールバックした後、END TRANSACTION ステートメントを使用してトランザクションを終了できます。同時にセッションも終了する必要があります。コード例は次のとおりです。

session.endSession();
ログイン後にコピー
  1. 例: MongoDB に転送のトランザクション処理を実装する
    次は、SQL ステートメントを使用して MongoDB に転送のトランザクション処理を実装する方法を示す簡単な例です。 。
var session = db.getMongo().startSession();
session.startTransaction();

try {
  var fromAccount = session.getDatabase('bank').accounts.findOne({accountNumber: '123456'});
  var toAccount = session.getDatabase('bank').accounts.findOne({accountNumber: '654321'});

  var amount = 100;

  if (fromAccount.balance >= amount) {
    session.getDatabase('bank').accounts.updateOne({accountNumber: '123456'}, {$inc: {balance: -amount}});
    session.getDatabase('bank').accounts.updateOne({accountNumber: '654321'}, {$inc: {balance: amount}});
  } else {
    throw new Error('Insufficient balance');
  }

  session.commitTransaction();
} catch (error) {
  session.abortTransaction();
  print('Transaction failed: ' + error);
} finally {
  session.endSession();
}
ログイン後にコピー

上の例では、最初にセッションを作成してから、新しいトランザクションを開始します。その後、送金元口座と送金先口座に基づいて口座情報が取得されます。ソース口座の残高が十分な場合、転送操作が実行され、口座残高が更新されます。最後に、トランザクションを送信することで、転送プロセス全体が完了します。

概要: SQL ステートメントを使用して MongoDB にトランザクション処理を実装すると、ドキュメント間の操作がより便利になります。 MongoDB は非リレーショナルデータベースですが、Multi-Document ACID Transactions 機能を導入することで、SQL ステートメントを使用してトランザクション処理を実装できます。コード例では、MongoDB の公式ドライバーを使用して SQL ステートメントを実行していますが、他のサードパーティ ツールを使用してこれを実現することもできます。

以上がSQL ステートメントを使用して MongoDB にトランザクション処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート