2020年には、あなたは〜のMongoDBの最適化戦略を知っている、あります

0はじめに

すべての乾燥技術館

文章收录在我的 GitHub 仓库,欢迎Star/fork:

Javaにインタビュー - チュートリアル

https://github.com/Wasabi1234/Java-Interview-Tutorial

MongoDBは、高性能のデータであるが、プロセスの使用は、我々は時折、いくつかのパフォーマンスの問題に遭遇します。非常に多くの開発者は、例えばSQL Serverのは、MySQL、Oracleのコントラストは、比較的新しい、多くの人々がそれらに精通していないされ、MongoDBのに比べ、その他のリレーショナルデータベース、DBAは、多くの場合、性能を犠牲にして機能を実現するに焦点を当てます要件。実際には、MongoDBのとSQL Server、MySQLの、オラクルなど、データベース・オブジェクトを作成するための設計を調整し、インデックス、最適化ステートメントは、パフォーマンスに大きな影響を持つことになります。

_idキーがで_id値を禁止するためのカスタム保存、文書内のデフォルト値を使用することをお勧めします

MongoDBのドキュメントが「_id」キーを持っていますが、デフォルトではオブジェクトIDです(識別子はタイムスタンプ、マシンID、プロセスIDとカウンタを含む)オブジェクト。MongoDBは、あなたが挿入_id指定されたレートを遅くする、大きく異なり_id挿入速度を指定しないとき_id指定しました。

推奨短いフィールド名

そして、リレーショナルデータベースは、MongoDBのコレクションの必要性は、各ドキュメントのフィールド名を保存するために、フィールド名が長い多くのストレージスペースが必要になります。

インデックスは、クエリ文書、更新、削除、並べ替え操作を向上させることができます

だから、ビジネスニーズと組み合わせて、適切なインデックスを作成します

各インデックスには、いくつかのスペースを取り、資源枯渇の挿入操作につながります

このように、お薦めのセットの各インデックス番号は5以内に制御しようとします。

複数のキーを含むクエリの場合は、良い解決策であるこれらのキーが含まれている複合インデックスを作成します。キーシーケンス複合インデックスは、最も左のプレフィックス指数の原理を理解することが重要です。

解釈:{:1、B:1、C:1}テストセットでは、例えば、複合インデックスを作成します。次の7つのクエリを実行します。

  db.test.find({a:”hello”}) // 1
  db.test.find({b:”sogo”, a:”hello”}) // 2
  db.test.find({a:”hello”,b:”sogo”, c:”666”}) // 3
  db.test.find({c:”666”, a:”hello”}) // 4
  db.test.find({b:”sogo”, c:”666”}) // 5
  db.test.find({b:”sogo” }) // 6
  db.test.find({c:”666”}) // 7

インデックスがかかる場合がありますクエリは1,2,3,4である上記の
クエリは、最も左のフィールドインデックスが含まれている必要があり、インデックス作成の順序に関係なく、クエリのフィールドオーダーの、優先します。
最小指数は、ほとんどのクエリをカバーしています。

インデックスTTL(生存時間インデックスのライフサイクルを持つインデックス、)、ドキュメントの老化指数TTLタイムアウトを使用することができ、文書は高齢化の程度に達した後に削除されます

解釈:TTL date型でなければなりませんインデックスを作成します。TTLフィールドインデックスインデックスは、単一の、複合インデックスをすることはできませんです。無効なドキュメントを削除するには、すべての60代バックグラウンドスレッドTTL削除ドキュメント。これは、固定長のコレクションをサポートしていません。

あなたは、コレクション内のフィールドのインデックスを作成する必要がありますが、コレクションは、まばらなインデックスを作成することをお勧めします、このキー文書の多くが含まれていません。

デフォルトのインデックスは、集中的である手段ドキュメントインデックスフィールドがインデックスに欠けていてもすることも、対応関係があること。まばらなインデックスでは、唯一のインデックスは、ドキュメントが表示されるキーが含まれています。

あなたの代わりに1または-1の、テキストインデックスを指定するには、テキストフィールドを作成するとき。各セットには、テキストのみの指標であるが、それは、インデックスフィールドの任意の数をすることができます。

テキスト検索ははるかに速く、文書の複数フィールドコレクションに代替テキストインデックス非効率的なクエリを使用することをお勧めします。

使用findOne、データベース内のクエリに一致する複数の項目は、それが自然な順序ファイルコレクションの最初のプロジェクトを返します。あなたが複数のドキュメントを返却する必要がある場合は、findメソッドを使用します。

文書全体又は存在するかどうかを決定するために使用されるだけでキー値を返すことなく、クエリ場合、フィールドへの復帰は、投影(マッピング)を介して、メモリ使用量、ネットワークトラフィッククライアントを低減するために制限されてもよいです。

除外されるフィールドを指定:{0}キーを設けることができる明示的リターン・フィールドを指定する:{1}キーによって提供されてもよいです。

拘束はそれらを使用する必要があるのプレフィックススタイルのクエリに加えて、クエリは正規表現のインデックスを使用することはできません、実行時間は、ほとんどのセレクタよりも長くなっています。

一括挿入(batchInsert)は、データをサーバーに送信する回数を削減し、パフォーマンスを向上させることができます。しかし、提出BSONサイズバッチは、48メガバイトを超えることはできません。

整理するために多くのデータを禁止する、MongoDBは現在のソートする結果セット内32Mをサポートしています。あなたが注文に必要な場合は、結果セット内のデータの量を制限してみてください。

发布了380 篇原创文章 · 获赞 543 · 访问量 33万+

おすすめ

転載: blog.csdn.net/qq_33589510/article/details/104924211