sql >> データベース >  >> NoSQL >> MongoDB

MongoDBのマルチコレクション、マルチドキュメントの「トランザクション」

    一般的な応答として、MongoDBでのマルチドキュメントコミットは、2フェーズコミットとして実行できます。これは、マニュアルである程度詳細に文書化されています(http://docs.mongodb.org/manual/tutorial/perform-two-phase-を参照)。 commits /)。

    マニュアルで提案されているパターンは、簡単に次のとおりです。

    • 個別のtransactionsを設定します ターゲットドキュメントを含むコレクション 、ソースドキュメント および状態 (トランザクションの)
    • initialを使用して新しいトランザクションオブジェクトを作成します stateとして
    • トランザクションの作成を開始し、stateを更新します pending
    • トランザクションを両方のドキュメント(ターゲット、ソース)に適用します
    • トランザクションの状態をcommittedに更新します
    • findを使用して、ドキュメントがトランザクションの状態を反映しているかどうかを判断します。問題がない場合は、トランザクションの状態をdoneに更新します。

    さらに:

    • 障害シナリオを手動で処理する必要があります(以下で説明するように何かが発生しませんでした)
    • 基本的にstateという名前を導入して、手動でロールバックを実装する必要があります 値canceling

    実装に関するいくつかの具体的な注意事項:

    • lock_statusのようなフィールドを追加することはお勧めしません 、data_olddata_new ソース/ターゲットドキュメントに。これらは、ドキュメント自体ではなく、トランザクションのプロパティである必要があります。
    • ターゲット/ソースドキュメントの概念を一般化するには、DBrefを使用できると思います。 s:http://www.mongodb.org/display/DOCS/Database+References
    • トランザクションドキュメントが完了したら削除するというアイデアは好きではありません。状態をdoneに設定しています これにより、後でデバッグして、実行されたトランザクションの種類を確認できるため、より良いアイデアのように思われます。ディスクスペースが不足することはないと確信しています(このための解決策もあります)。
    • モデルで、すべてが期待どおりに変更されたことをどのように保証しますか?どういうわけか変更を調べますか?


    1. Redis Sorted Setのポップメンバーをサポートする良い方法はありますか?

    2. MongoDB-CR認証に失敗しました

    3. PythonとMongoDB:NoSQLデータベースへの接続

    4. AdminBro、express、mongoDB、mongooseを使用して5分で管理エリアを作成する