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

mongodbで非同期的に複製されたデータを更新するためのベストプラクティス

    基本的に3つのオプションがあります:

    1. userIdを保存するだけです 次に、ユーザーを個別にフェッチします。このようにして、常に最新のデータに関して最適な結果を得ることができます。しかしもちろんそれは遅いです。これは基本的にリレーショナルデータベースが行うことです。 SQL DBは、外部キーを調べて、IDでデータをフェッチするだけです。

    2. 古いデータで生きる。コメント内にユーザー名の複製を保存します。このようにして、データが保存されたときとまったく同じようにデータを表すことができるため、これが望ましい動作である場合があります。つまり、Johnがコメントを作成し、後で彼のユーザー名がPaulに更新された場合でも、それはJohnとして作成されていることがわかります。 (これは、古い請求書の住所を更新したくない場合よりも、そこで人を参照して住所が変更された場合の請求書に特に役立ちます)

    3. ユーザー名が更新されたら、ユーザー名を含むすべてのものを更新します。ユーザー名は通常変更されるべきではないため、これも悪いことではありません。そのため、名前はコメント内に保存されるため、読み取りは常に高速になります。また、名前が変更された場合は、ユーザーが関与しているすべてのものを更新する必要があります。もちろんこれは遅い作業ですが、毎分発生するはずがないので、許容範囲内です。

      3.1あなたは物事を最適化することができます:ユーザー名が変更された場合、これはどこかに保存され、深夜に適用されます。このようにして、複数の名前の変更を収集し、すべてを同時に更新できます。

    ご覧のとおり、NoSQLは選択に関するものです 。データに最適なことを行うことができます。もちろん、それは常にトレードオフです。コードの記述が遅く/速くなり、コードが多く/少なくなり、保守が容易/困難になります。

    要約すると:

    1. 高速書き込み、一貫性のあるデータ、低速読み取り
    2. 高速書き込み、一貫性のないデータ、高速読み取り
    3. 高速書き込み、高速読み取り、データは更新プロセス後に一貫性があり、時間がかかる場合があります。もちろん、更新プロセスは遅いです。



    1. MapReduceのHadoopマッパークラスとは何ですか?

    2. 醸造サービス。サービスを開始できません。ブートストラップの取得に失敗しました:5:入力/出力エラー

    3. PyMongoチュートリアル:PythonアプリでのMongoDBフェイルオーバーのテスト

    4. db.test.update({name:'abc'}、{$ pull:{'child':{'age':10}}})のSpringデータMongoDBを使用してコーディングする方法