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

トランザクションなしのMongoDBでの多対多の更新

    @Gareth 、これを行うには複数の正当な方法があります。したがって、重要な懸念事項は、データのクエリをどのように計画するかです(つまり、どのクエリを高速にする必要があるか

    ここにいくつかの方法があります。

    方法1:「リンク」コレクション

    コレクション間のマッピングを単純に含むコレクションを作成できます。

    長所:

    • データが失われないようにアトミック更新をサポートします

    短所:

    • コレクション間を移動しようとするときの追加のクエリ

    方法2:小さなマッピングのコピーを大きなコレクションに保存する

    例:何百万ものProductsがあります 、ただし100個のCategories 。次に、Categoriesを保存します 各Product内の配列として 。

    長所:

    • 最小のフットプリント
    • 更新が必要なのは1つだけです

    短所:

    • 「間違った方法」で行った場合の追加のクエリ

    方法3:すべてのマッピングのコピーを両方のコレクションに保存する

    (あなたが提案していること)

    長所:

    • いずれかのコレクション間を移動するための単一のクエリアクセス

    短所:

    • 潜在的に大きなインデックス
    • トランザクションが必要(?)

    「トランザクションが必要」について話しましょう。取引を行うにはいくつかの方法があり、それは実際に必要な安全の種類によって異なります。

    あなたは間違いなくこれを行うことができます。自分自身に問いかける必要があります。保存の1つだけが失敗した場合に発生する最悪の事態は何ですか?

    方法4:変更をキューに入れる

    キューを使用したことがあるかどうかはわかりませんが、余裕があれば、単純なキューを作成して、それぞれのコレクションを更新するさまざまなジョブを実行できます。

    これははるかに高度なソリューションです。私は#2または#3で行く傾向があります。



    1. Node.jsとMongooseの管理パネル

    2. リリースビルドでMongodbCxxドライバーテストがクラッシュする[デバッグで正常に動作する]

    3. MongoDBとGolangを使用したルックアップの参照で値を取得します

    4. グローバル変数で、マングースの取得コールバックを設定する方法