内容:
- MongoDBのストレージエンジン
- MongoDBのインデックス
- プロパティのインデックス
- MongoDBのクエリの最適化
MongoDBのストレージエンジン:
現在のストレージエンジンの3種類に分けMongoDBの:
1、WiredTigerストレージエンジン。
、並行処理(同時レベル):WiredTigerサポートドキュメントレベルの並行処理は、文書を変更、同時に複数のクライアントをサポートしています。
B、スナップショットおよびチェックポイント(スナップショットおよびチェックポイント):WiredTigerは60秒ごとにチェックポイントを作成このモンゴやサーバのダウンタイムがデータを失うことになるとの間で、(スナップショットデータがディスクに書き込まれています)。
C、ジャーナル(中間チェックポイント・ログは):チェックポイントの最適化のために、データは最初のジャーナルに堆積する前に、チェックポイントでディスクに永続化。
ログ領域は、場合128Bよりも小さい圧縮されていない、高圧縮アルゴリズム有効になっている(使用しててきぱきアルゴリズム圧縮されたデータを)。セット圧縮アルゴリズム:storage.wiredTiger.engineConfig.journalCompressor
D、圧縮(圧縮アルゴリズム):メモリ空間の消費量を削減するためにCPUリソースの消費。デフォルトブロック圧縮アルゴリズム、圧縮セットデータの、スナッピーアルゴリズム(接頭辞)圧縮率。
セット圧縮アルゴリズムの設定:storage.wiredTiger.collectionConfig.blockCompressorを。
設定されたインデックスの圧縮アルゴリズム:storage.wiredTiger.indexConfig.prefixCompression。
E、メモリ使用(メモリ使用量):
モンゴの使用などの大容量メモリのデフォルトその間、モンゴWiredTigerエンジンの* 0.5,256M - 2つのメモリ、(1ギガバイトRAM)があります。
ユニットGBのセットMongoDBの使用可能なメモリサイズ:storage.wiredTiger.engineConfig.cacheSizeGB
2、MMAPv1ストレージエンジン。
、ジャーナル:同WiredTiger。
B、レコードのストレージ(データ記憶装置):ディスクに保存された連続データ、文書はデータの移動を伴うだろう、ともインデックスを更新するために、だけでなく、ディスクの断片化につながる多くのスペースを必要とするとき。
C、メモリ使用:すべてのメモリ空間を使用します
図3に示すように、インメモリストレージエンジン。
、同時実行:同WiredTiger。
B、メモリ使用:RAM * 0.5〜1ギガバイト
MongoDBのインデックス:
MongoDBのインデックスは4種類に分かれています。
1、キーインデックス:で特定の属性のインデックス。
構文:db.collectionName.createIndex({ '名称': - 1}) -1 =降順、昇順1 =
ユニークキーインデックスの設立に関するMongoDBのID、フィールド上の完全一致、ソートし、このインデックスを使用します範囲を見つけます。
2、複合インデックス:複数の特定の性質に索引付けの。
语法:db.collectionName.createIndex({ '名称': - 1、年齢:1})
正確なソート、フィールドに一致すると範囲は、このインデックスを使用します見つけるが、該当するためのインデックス。
パフォーマンス上の理由から、あなたは同じキーボンド・インデックスがある最初のものを削除する必要があります。
以下のような:名前と年齢に基づいてクエリを見つける必要
インデックス名、状況はより効率的なクエリにつながると同じ名前のみを減らす場合、あなたは言うかもしれないが、ル・インデックスの年齢を構築するためにはMongoクエリはだけなので、このように、一つのインデックスを使用することができますので、もちろんのではない、としていません状況は、クエリの効率を向上させるために複合インデックスを確立する必要があります。
それが最初のキーのキーインデックスと同じであり、なぜ、それが唯一のインデックスを使用することができ、クエリの上に来て、複合インデックスではなく、単一の名インデックスの接頭辞クエリを使用することができ、そのインデックスは、単一の名前であることを削除するには廃棄物。
3、マルチキーインデックス:配列のインデックスを作成します。
语法:db.collectionName.createIndex({ 'address.city':1})
4、ハッシュインデックス:
语法:db.collectionName.createIndex({ '名称': 'ハッシュ'})
入口にハッシュインデックスを均一に、有用なスライスセットを分布されます。
インデックス属性:
インデックスを作成します。
db.collectionName.createIndex( { '名称':1 }、 { '背景':真、 'ユニーク':真、 '名称': 'INDEXNAME' 、 '疎':真 } )
インデックスを削除します。
1は、指定した名前を削除します。db.collectionName.dropIndexを( 'INDEXNAME')
図2に示すように、セットに削除インデックス(_id削減することができない):db.collectionName.dropIndexs()
)(db.collectionName.reIndex:3、セットにインデックスを再構築
図4に示すように、クエリのインデックスセットは:db.collectionName.getIndexs()
MongoDBのクエリの最適化:
配置1、遅いクエリ
オープンスロークエリ:db.setProfilingLevel(N、{M})
nが3つの値があります。
- 0(デフォルト値)が記録されていません。
- 1;レコードスロークエリーログは、クエリー時間閾値である1 M、単位MSとして指定されなければなりません。
- 2、すべてのスロークエリログを記録します。
スロークエリMongoDBのオープン後、ログはに保存されますsystem.profileコレクション、その最大の割り当ての128Kスペース。
次のようなソート$ nartualスロークエリログに使用することができるdb.system.profile.find()ソート({ 'ナチュラル$': - 1。})..リミット(5。)
2、スロークエリ分析
クエリプランによって分析することができることなど、スロークエリ、説明db.collectionName.findを({ '年齢':{ '$ LT':50}})。( 'executionStats')を説明
オプションのパラメータを説明します。
-
queryPlanner;デフォルトでは、唯一の意味は、実行計画の情報を表示します。
-
executionStats、情報選択された実行計画の実施を紹介する実行計画を示す情報を表します。
-
allPlansExecution、実行計画を示す情報、および選択された実行計画の実装に存在する情報を表し、情報の実装はまた、別の実行計画を示しています。
3、お薦めのインデックスを使って
指標の確立を要求するためによると、それは有用であろうが、コスト、そこにあるないに一度、多くの少ないインデックスを読み取り、書き込み人には。
クエリの各段階であることを確実にしてくださいIXSCAN、の追求文書(totalDocsExaminedを)スキャンの数は=(nReturned)文書の数を返します。
唯一のインデックスとクエリでのMongoDB、場合多基準クエリが複合インデックスを利用します。
データの量をインデックス化することはそうしようとすると、非常に時間がかかり、より多くの資源である時間内に内蔵されたデータのインデックスを少量入れました。