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

WiredTigerでMongoDbドキュメントに対して部分的な更新を実行すると、完全なドキュメント更新よりも利点がありますか?

    WiredTigerは Multiversion Concurrency Control(MVCC) を使用します 読者の存続期間中、データの複数のビューを維持するため。 WiredTigerのメモリ内形式はディスク上の形式とは異なります。メモリ内ではドキュメントとの差分が保存されますが、定期的なチェックポイントの一部としてデータファイルにフラッシュされると、ドキュメントのフルバージョンが作成されます。

    さまざまなMongoDBストレージエンジンがディスクへの永続的な更新を処理する方法に関係なく、可能な場合は完全な更新ではなく部分的な更新を使用することでパフォーマンス上の利点があります(特に、ドキュメント全体のサイズに比べて小さいフィールド値を設定する場合)。

    たとえば、次のことを考慮してください。

    • ドキュメント更新用のネットワークトラフィック(任意のストレージエンジン)
    • ジャーナルのエントリのサイズ(任意のストレージエンジン)
    • レプリケーションoplog のエントリのサイズ (任意のストレージエンジン)
    • メモリ内バージョンの更新のサイズ(WiredTiger)

    毎回完全なドキュメント更新を送信する場合は、変更が個別のフィールドセットに対するものである場合でも、更新がサーバーに到達する順序が重要であるシナリオも作成します。楽観的なバージョン管理などのアプリケーションロジックを追加して、フィールド値を誤って上書きしないようにすることもできますが、これにより、ユースケースによっては不要な複雑さが追加される可能性があります。




    1. systemdをinitシステム(PID 1)としてシステムを起動していません。操作できません

    2. Railsとキャッシング、memcacheとredisを簡単に切り替えることができますか?

    3. 外国のコレクションを検索して並べ替える

    4. 同期を使用したAndroidおよびMongoDB上のSQLite