目次
WiredTiegelとは何ですか、そしてそれが重要な理由
WiredTigerの保存方法データ:Bツリーとチェックポイント
インメモリとディスク上の構造
チェックポイントが説明されています
並行性と分離:MVCCが動作します
ストレージ効率:圧縮とインデックス
データ圧縮オプション
インデックス動作
WiredTigerキャッシュ:メモリ使用量の管理
ロギングと耐久性:書き込み録音ログ(WAL)
代替案をいつ検討しますか?
最終的な考え
ホームページ データベース モンゴDB MongoDBストレージエンジンの理解:WiredTiger Deep Dive

MongoDBストレージエンジンの理解:WiredTiger Deep Dive

Aug 04, 2025 am 05:49 AM
mongodb

WiredTigerは、バージョン3.2以来、MongoDBのデフォルトストレージエンジンであり、高性能、スケーラビリティ、および最新の機能を提供します。 1.ドキュメントレベルのロックとMVCCを使用して、高い並行性を使用して、読み取りと書き込みを互いにブロックせずに進めることができます。 2。データはBツリーを使用して保存され、定期的なチェックポイント(デフォルトで60秒ごと)中にメモリ内の変更がディスクに洗い流され、チェックポイント後のログのみを再生することでクラッシュ回復が高速になります。 3.MVCCは一貫したスナップショットを保証するため、長期にわたるクエリは書き込みによってブロックされておらず、その逆も同様です。 4.内蔵圧縮(Snappy、Zlib、ZSTD)は、コレクションとインデックスの両方のストレージとI/Oを減らし、キャッシュ効率を改善します。 5。WiredTigerは、データ、インデックス、メタデータを保存する独自のキャッシュ(デフォルト:RAMから1GBの50%)を管理します。 6.書き込みログ(WAL)は、100msごとにFSYNC間隔を使用する前に記録することにより耐久性を保証します。 J:Trueは安全性のためにジャーナルの同期を保証しますが、J:False Tradyは耐久性を速度で取引します。 7.低メモリシステム(

MongoDBストレージエンジンの理解:WiredTiger Deep Dive

MongoDBのパフォーマンスとスケーラビリティは、そのストレージエンジンに大きく依存しており、 WiredTigerはMongoDB 3.2以来のデフォルトです。 MongoDBの最新バージョンを使用している場合、WiredTigerをすでに使用している可能性があります。そのため、フードの下でどのように機能するかを理解することで、パフォーマンスの最適化、リソースの管理、問題のトラブルシューティングを支援できます。

MongoDBストレージエンジンの理解:WiredTiger Deep Dive

WiredTigerを強力にしている理由と、舞台裏のデータをどのように処理するかを分解しましょう。


WiredTiegelとは何ですか、そしてそれが重要な理由

WiredTigerは、高い並行性と大きなデータセットを備えたワークロード用に設計された高性能でスケーラブルなストレージエンジンです。古いMMAPV1エンジンとは異なり、WiredTigerはドキュメントレベルの並行性制御圧縮クラッシュセーフの記述などの最新のデータベース機能をもたらします。

MongoDBストレージエンジンの理解:WiredTiger Deep Dive

重要な利点:

  • ドキュメントレベルのロック(vs. mmapv1のコレクションレベル)→より高い並行性
  • スナップショットとMVCC(マルチバージョン並行性コントロール) →ブロックなしの一貫した読み取り
  • 構成可能な圧縮→ストレージフットプリントの削減
  • 書き込み式ロギング(WAL) →耐久性とクラッシュ回復

最新のハードウェア、特に複数のコアとSSDを備えたシステムに効率的にスケーリングするように構築されています。

MongoDBストレージエンジンの理解:WiredTiger Deep Dive

WiredTigerの保存方法データ:Bツリーとチェックポイント

そのコアでは、WiredTigerはBツリー(バランスの取れたツリー)構造を使用して、ディスクとメモリのデータを整理します。

インメモリとディスク上の構造

  • ドキュメントを挿入または更新すると、最初にメモリ内のBツリーに入ります。
  • 耐久性のために、 WiredTigerログ(WAL)で変更が追跡されます。
  • 定期的に、WiredTigerはチェックポイントを作成します。これは、ディスクに書き込まれたデータの一貫したスナップショットです。

これはつまり:

  • 読み取りは、メモリ内のツリー(高速)または最後のチェックポイント(ディスク上)にアクセスできます。
  • WRITESは、MVCCとチェックポイントのおかげで非ブロッキングです。

チェックポイントが説明されています

チェックポイントは、回復とパフォーマンスのために重要です。

  • デフォルトで60秒ごとに発生します(設定可能)。
  • チェックポイント中に、ダーティページ(メモリで変更)は、一貫した状態でディスクにフラッシュされます。
  • クラッシュ後、MongoDBは最後のチェックポイントの後にログエントリのみを再現します。

これにより、OPLOGまたはジャーナル全体を再生するのと比較して、回復時間が大幅に短縮されます。


並行性と分離:MVCCが動作します

WiredTigerは、MVCC(マルチバージョンの並行性制御)を使用して、ロックをブロックせずに同時読み取りと書き込みを可能にします。

これがどのように機能しますか:

  • 各操作は、時点でデータベースのスナップショットで実行されます。
  • 読者は、たとえ書き込みが起こっていても、一貫した見解を見ます。
  • 作家は読者をブロックしません。その逆もまた同様です(同じドキュメントを変更していない限り)。

例えば:

  • 着信インサートによって、長期にわたる分析クエリはブロックされません。
  • 異なるドキュメントの2つの更新は、並行して進行できます。

これは、高いスループットと低レイテンシを必要とするアプリケーションにとって大きな勝利です。


ストレージ効率:圧縮とインデックス

WiredTigerの傑出した機能の1つは、ディスクスペースを節約してI/Oを減らす組み込み圧縮です。

データ圧縮オプション

WiredTigerサポート:

  • Snappy (デフォルト):高速で中程度の圧縮
  • Zlib :圧縮が高く、遅い
  • ZSTD (MongoDB 4.2から):バランスの取れた速度と比率

圧縮が適用されます。

  • コレクション(データ)
  • インデックス

コレクションごとに圧縮を構成できます。

 db.createcollection( "logs"、{
  StorageEngine:{
    WiredTiger:{
      configstring: "block_compressor = zstd"
    }
  }
})

インデックス動作

  • すべてのインデックスは同じストレージエンジンを使用します。
  • インデックスキーも圧縮されています。
  • セカンダリインデックスは段階的に更新され、同じ並行性モデルの恩恵を受けます。

?ヒント:圧縮されたインデックスは、 WiredTigerキャッシュのメモリ圧力を軽減し、より熱いデータがRAMにとどまることができます。


WiredTigerキャッシュ:メモリ使用量の管理

WiredTigerは、ファイルシステムキャッシュとは別の独自のメモリキャッシュを管理しています。

デフォルト:

  • キャッシュサイズは、RAMから1 GBの50%で、1 TBでキャップされています。
  • それは保持します:
    • ごく最近使用したデータ(ワーキングセット)
    • インデックス
    • 内部メタデータ

mongod.confで調整できます。

ストレージ:
  WiredTiger:
    Engineconfig:
      configstring:「cache_size = 4g」

⚠⚠§警告:高すぎないでください。 OSファイルシステムキャッシュおよびその他のプロセスのスペースを残します。

作業セットがキャッシュサイズを超えると、より多くのディスクI/Oと遅いクエリが表示されます。


ロギングと耐久性:書き込み録音ログ(WAL)

WiredTigerは、書き込みログ(WAL)を使用して耐久性を確保します。

  • すべての書き込みは最初にログに書き込まれます。
  • ログは、デフォルトで100msごとにファインドされますcommit_timestamp_frequency )。
  • これにより、MongoDBがクラッシュしても、コミットされたデータが失われないことが保証されます。

ログは、 journal/の下にdbPathに保存されます。

チェックポイントは定期的にデータをディスクに書き込みますが、Walはチェックポイント間の粒状の耐久性を保証します。

耐久性とパフォーマンスを調整できます:

  • SET j: true
  • または、より高いスループットにj: falseを使用します(ただし、クラッシュ時のマイナーなデータ損失のリスク)。

代替案をいつ検討しますか?

WiredTigerはほとんどのユースケースに優れていますが、必ずしも最適ではありません。

次の場合は避けたり、再検討したりします。

  • あなたは非常に低いメモリシステム(
  • 古いMongoDBバージョンで安静時に暗号化する必要があります:エンタープライズのみがネイティブ暗号化を提供します(ただし、ファイルシステムレベルの暗号化は機能します)。
  • MMAPV1から移行しており、特定のパフォーマンスの期待があります(最初にベンチマーク)。

また、メモリ内のストレージエンジン(Enterpriseのみ)があります。これは、キャッシュまたはリアルタイムの分析に合った非常に低いレイテンシのために、すべてのデータを超低レイテンシのために保持します。


最終的な考え

WiredTigerは、今日のほとんどのMongoDB展開を強化する堅牢で最新のストレージエンジンです。同時性、圧縮、およびクラッシュの安全性の組み合わせにより、小さなアプリから大規模な分散システムまで、あらゆるものに最適です。

それを最大限に活用するために:

  • キャッシュの使用量を監視する( db.serverStatus().wiredTiger.cache
  • I/O対CPUのトレードオフに基づいて、チューン圧縮
  • 災害復旧のチェックポイントとジャーナルの行動を理解します
  • キャッシュとシステムのニーズに合わせてRAMを適切にサイズします

それは魔法ではありませんが、正しい理解では、MongoDBツールキットの強力なツールです。

基本的に、3.2以降MongoDBを使用している場合、Wiredtigerの恩恵を受けている可能性があります。今、あなたはその方法を知っています。

以上がMongoDBストレージエンジンの理解:WiredTiger Deep Diveの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Mongodbコレクションのドキュメントを更新するさまざまな方法 Mongodbコレクションのドキュメントを更新するさまざまな方法 Jun 04, 2025 pm 10:30 PM

MongoDBでドキュメントを更新する方法には、次のものが含まれます。1。updateoneおよびupdatemanyメソッドを使用して、基本的な更新を実行します。 2。$ set、$ inc、$ pushなどのオペレーターを使用して、高度な更新を実行します。これらのメソッドと演算子を使用すると、MongoDBのデータを効率的に管理および更新できます。

MongoDBのすべてのデータベースを表示する方法 MongoDBのすべてのデータベースを表示する方法 Jun 04, 2025 pm 10:42 PM

MongoDBのすべてのデータベースを表示する方法は、コマンド「showdbs」を入力することです。 1.このコマンドは、空でないデータベースのみを表示します。 2。データベースを「使用」コマンドを介して切り替えて、データを挿入して表示できます。 3.「ローカル」や「構成」などの内部データベースに注意してください。 4。ドライバーを使用する場合、詳細情報を取得するには、「listDatabase()」メソッドを使用する必要があります。 5。「db.stats()」コマンドは、詳細なデータベース統計を表示できます。

Mongodbでコレクションを作成するためのコマンドとパラメーター設定 Mongodbでコレクションを作成するためのコマンドとパラメーター設定 May 15, 2025 pm 11:12 PM

Mongodbでコレクションを作成するコマンドは、DB.CreateCollection(名前、オプション)です。特定の手順には次のものが含まれます。1。基本コマンドdb.createcollection( "myCollection")を使用してコレクションを作成します。 2.キャップ、サイズ、Max、StorageEngine、Validator、ValidationLevel、Db.CreateCollectionなどの検証などのオプションパラメーターを設定します( "myCappedCollection

Mongodbコレクションのドキュメントをソートするための操作コマンド Mongodbコレクションのドキュメントをソートするための操作コマンド Jun 04, 2025 pm 10:27 PM

Mongodbでは、sort()メソッドを使用してコレクション内のドキュメントをソートできます。 1。基本的な使用法:db.products.find()。sort({price:1})など、フィールドを指定して並べ替え(1は上昇し、-1は下降します)。 2。高度な使用法:db.products.find()。sort({category:1、price:-1})などの複数のフィールドに従ってソートできます。 3.パフォーマンスの最適化:インデックスの使用、オーバーソートの回避、ページングのソートは、db.products.createindex({price:1})やdb.products.fなどの効率を向上させることができます。

gridfとは何ですか?また、Mongodbに大きなバイナリファイルを保存するためにいつ使用する必要がありますか? gridfとは何ですか?また、Mongodbに大きなバイナリファイルを保存するためにいつ使用する必要がありますか? Jun 06, 2025 am 10:50 AM

GRIDFSは、16MBBSONを超えるサイズ制限のファイルを保存および取得するためのMongoDBのツールです。 1.ファイルを255kbブロックに分割し、fs.chunksコレクションに保存し、fs.filesコレクションにメタデータを保存します。 2。適切な状況には、16MBを超えるファイル、ファイルとメタデータを均一に管理する必要性、ファイルの特定の部分へのアクセス、および外部ストレージシステムを導入せずにMongoDBを使用することが含まれます。 3。GRIDFSは、アップロード時にチャンクに自動的に保存され、読み取り時にファイルを再編成し、カスタムメタデータとマルチバージョンストレージをサポートします。 4.代替ソリューションには、ファイルパスをmongodbに保存し、実際にファイルシステムに保存することが含まれます。

MongoDBでデータベースを作成するためのコマンドと予防措置 MongoDBでデータベースを作成するためのコマンドと予防措置 Jun 04, 2025 pm 10:39 PM

Mongodbには明示的な「createdAtabase」コマンドはありません。データベースは、データが最初に挿入されたときに作成されます。 1.「usemydb」を使用してデータベースに切り替えます。 2。「db.users.insertone({name: 'johndoe'、age:30})などのドキュメントを挿入します。注:データベースとコレクションは、データが最初に挿入されたときに作成され、名前に厳密な制限があり、許可管理、データの一貫性、パフォーマンスの最適化、バックアップ回復を考慮する必要があります。

MongoDBコレクションの名前を変更する操作コマンド MongoDBコレクションの名前を変更する操作コマンド Jun 04, 2025 pm 10:36 PM

MongoDBでコレクションを名前を変更する理由には、RenameCollectionコマンドを使用して、コードのリファクタリングとパフォーマンスの最適化が含まれます。メモには次のものが含まれます。1。データベースのロック、2。インデックスの自動的な名前の変更、3。関連する参照を更新します。ベストプラクティスの提案:1。低いピーク操作を選択、2。バックアップデータ、3。テスト環境で最初に確認します。コレクションの名前を変更するには、システムのパフォーマンスと安定性を確保するために慎重な取り扱いが必要です。

MongoDBコレクションのドキュメントをクエリするための実装方法 MongoDBコレクションのドキュメントをクエリするための実装方法 May 15, 2025 pm 11:00 PM

Mongodbでは、Skip()およびLimit()メソッドを使用してページネーションクエリを実装できます。 1.スキップ(n)を使用して最初のnドキュメントをスキップし、Mドキュメントを返すために制限(m)を制限します。 2。最適化中に、skip()の代わりに範囲クエリを使用でき、結果をキャッシュしてパフォーマンスを改善できます。

See all articles