ホームページ  >  記事  >  データベース  >  MongoDB ストレージ エンジンの詳細な分析 (概略図付き)

MongoDB ストレージ エンジンの詳細な分析 (概略図付き)

藏色散人
藏色散人転載
2022-12-06 17:00:182954ブラウズ

この記事では、mongodb に関する関連知識と MongoDB のストレージ エンジンについて紹介します。

簡単なレビュー

前回は、マスター/スレーブ クラスターとシャード クラスターに分割される mongodb クラスターについて説明しました。シャード クラスター内のシャードについては、必要なものは次のとおりです。次の点に注意してください。一緒に確認しましょう。

  • ホット データの場合

特定の シャード キー (シャード シャード キーは、コレクション内の各ドキュメントに存在するインデックス フィールドまたは複合インデックス フィールドです) により、すべての 読み取りまたは書き込みリクエスト が単一のデータ ブロックまたはシャード上で動作します。負荷が重すぎると、自己増加するシャード キーによって書き込みの問題が発生しやすくなります [推奨事項: MongoDB ビデオ チュートリアル ]

  • For 分割できないデータ ブロック

粗粒度のシャーディング キーの場合、 により同じシャーディング キーを使用する多くのドキュメントが作成される可能性があります

この場合、これらのドキュメントは複数のデータ ブロックに分割することはできません。これにより、データを均等に分散する mongodb の機能が制限されます

  • Forクエリ障害

シャーディング キーとクエリに相関がない クエリのパフォーマンスが低下する

上記の点については注意が必要ですが、実際の業務で同様の問題が発生した場合は、対処方法を学ぶことができます。それら

今日は、mongodb のストレージ エンジンとは何ですか

ストレージ エンジン

Mongodb のストレージ エンジンについて簡単に説明します。 mongodb、それが mongodb 3.0 にあることを知っておく必要があります。当時、プラガブル ストレージ エンジン の概念が導入されました。

現在、主に次のエンジンがあります:

  • WiredTiger ストレージ エンジン
  • inMemory ストレージ エンジン
##ストレージ エンジンが最初に登場したとき、デフォルトでは MMAPV1 ストレージ エンジンを使用することでした。

MMAPV1 エンジンは、おそらく名前を見ればわかると思います。彼は mmap を使用して実行し、Linux メモリ マッピングの原理を使用しています。

MMAPV1 エンジンは使用されていません

WiredTiger ストレージ エンジンの方が優れているためです

。たとえば、WiredTiger と比較すると、次の利点があります。

WiredTiger
    読み取りおよび書き込み操作のパフォーマンスが向上
  • WiredTiger はマルチコア システムの処理能力をより有効に活用できます

    WiredTiger
  • ロックの粒度はより小さくなります

    # MMAPV1 エンジンはテーブル レベルのロックを使用します。単一のテーブルで同時操作がある場合、スループットは影響を受けます。制限事項

    WiredTiger はドキュメント レベルのロックを使用するため、同時実行性とスループットが向上します

WiredTiger

優れた圧縮
  • WiredTiger はプレフィックス圧縮を使用するため、MMPV1 と比較してメモリ スペースの消費量が節約されます
WiredTiger も

圧縮アルゴリズムを提供します

これにより、ハードディスクへの影響を大幅に軽減できます。リソース消費

WiredTiger エンジンの作成原理

次のことができます。上の図から、WiredTiger の MongoDB ストレージ エンジンの詳細な分析 (概略図付き)ディスクへの書き込み原理も非常に単純であることがわかります。

アプリケーション リクエストが mongodb に届き、mongodb がそれを処理し、結果をキャッシュに保存します。

    キャッシュが
  • 2 G
  • に達するか、
  • 60 s タイマーが期限切れになると、キャッシュ内のデータがディスクにフラッシュされます。ご存知のとおり、今がちょうど 59 秒で、1 G を超えている場合、キャッシュ内のデータはまだディスクに同期されておらず、mongodb は異常にハングアップします。
    私たちは皆、mongodb の設計者がどのようにしてこの状況を許容できたのか、次のように解決策があるはずです を指で考えることができます。

##上の図に示すように、追加の ジャーナリング バッファ

ジャーナル ファイル

MongoDB ストレージ エンジンの詳細な分析 (概略図付き)

ジャーナリングがあります。バッファ mongodbの追加、削除、変更命令を格納するバッファ

  • ジャーナルファイル

トランザクションと同様リレーショナル データベースにログインする
  • ジャーナリングを導入する目的は次のとおりです:
ジャーナリングにより、予期せぬ障害の後に mongodb データベースを迅速に回復できるようになります

ジャーナリングログ関数

ジャーナリングのログ関数は、redis の aof 永続性と少し似ています。似ているとしか言えません

mongodb 2.4 では、ジャーナリング ログ関数はデフォルトで有効になっています

、mongod インスタンスを開始すると、サービスはデータを復元する必要があるかどうかをチェックします

そのため、上記の mongodb データ損失は発生しません

さらに、ここで知っておく必要があるのは、ジャーナリングのロギング関数は、mongodb が書き込み操作を実行する必要があるとき、つまり追加、削除、または変更を行うときに、パフォーマンスに影響するログを書き込むことです。

ただし、mongodb は読み取り操作をキャッシュに記録しません したがって、ジャーナリング ログには記録されないため、読み取り操作は影響しません

つまり今日はこれで終わります。私が学んだこと、逸脱がある場合は修正してください

以上がMongoDB ストレージ エンジンの詳細な分析 (概略図付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。