共有

MongoDB データベースツールとユーティリティ入門

使用しているデータベースに関係なく、データベースの操作に役立つデータベースツールが利用できる可能性があります。データベースツールは、データベース管理タスクを実行する際に生活を楽にするツール、ユーティリティ、およびアシスタントの総称です。

必須ではありませんが、データベースツールとユーティリティを使用すると、時間と労力を節約できます。MongoDB には、デプロイメントで使用できる非常に役立つ、知っておくと役立つコマンドラインユーティリティのファーストパーティコレクションがあります。この記事では、インストールについて簡単に触れ、知っておくべき最も役立つユーティリティについて説明します。

MongoDB は、ツールとユーティリティをバイナリインポート/エクスポート、データインポート/エクスポート、診断ツール、GridFS の 4 つのカテゴリに分類しているため、それに応じて説明します。

MongoDB データベースツールのインストール

MongoDB バージョン 4.4 以降では、MongoDB データベースツールは MongoDB サーバーのダウンロードとは別にリリースされています。これらのツールがそれぞれの MongoDB サーバーバージョンと一緒にリリースされていた以前のインスタンスと比較して、独自のバージョン管理で保守されています。

インストール手順については説明しませんが、MongoDB 4.4 以降を使用している場合は、以下で各 OS のインストールプロセスについて説明します。

バイナリインポート/エクスポート

mongodump

mongodump は、データベースの内容のバイナリエクスポートを作成するためのユーティリティです。このユーティリティは、スタンドアロン、レプリカセット、およびシャーディングされたクラスタデプロイメントからデータをエクスポートできます。エクスポートは、mongod または mongos インスタンスのいずれかから実行できます。mongodumpmongo シェルではなく、システムコマンドラインから実行する必要があることに注意することが重要です。

mongodump は、完全なバックアップおよび復旧戦略の一部を形成するために、mongorestore (後述) と連携できます。mongodump は、コレクション、クエリ、または本番環境から開発環境への同期に基づいて、部分バックアップを生成することもできます。

小規模なデプロイメントには実行可能な戦略ですが、大規模な MongoDB デプロイメントの場合は、mongodump を別のバックアップ戦略のために脇に置く必要があります。mongodump は実行中の mongod インスタンスと対話することで動作するため、実行中のデータベースのパフォーマンスに影響を与える可能性があります。トラフィックを作成するだけでなく、このツールはデータベースにすべてのデータをメモリ経由で読み取ることを強制します。MongoDB がめったにアクセスされないデータを読み取る必要がある場合、これはより頻繁にアクセスされるデータから奪い、通常のワークロードのパフォーマンスを低下させる可能性があります。

mongodump の基本構文は、システムコマンドラインでは次のようになります。

mongodump <options> <connection-string>

mongodump はファイルを生成し、アクセスできるように dump/ ディレクトリに保存します。接続文字列構成と、公式 MongoDB ドキュメントの追加のオプションの詳細を読むことができます。

mongorestore

mongorestore は、小規模なデプロイメントに十分なバックアップ戦略を作成するための mongodump のパートナーツールです。mongorestore プログラムは、バイナリデータベースダンプ (mongodump ファイル) または標準入力から mongod または mongos インスタンスにデータをロードします。

mongodump と同様に、mongorestoremongo シェルではなく、システムコマンドラインで実行する必要があります。実行中の mongod インスタンスに対しても動作するため、小規模なデプロイメント以上の復元戦略としては非効率的です。

mongorestore の基本構文は次のようになります。

mongorestore <options> <connection-string> <directory or file to restore>

mongorestore の追加のオプションは、バックアップ戦略またはスタンドアロンインポートに必要な要件を満たすために追加できます。

bsondump

bsondump は、mongodump を使用して生成されたバイナリファイルを読み取るためのツールです。bsondump ユーティリティは、BSON ファイルを JSON を含む人間が読める形式に変換します。

bsondump はコマンドラインで実行する必要があり、BSON ファイルを検査するための診断ツールです。データインジェストやその他のアプリケーションでの使用を目的としたものではありません。

bsondump は、データをフォーマットするために拡張 JSON v2.0 (Canonical Mode) を使用します。デフォルトでは、bsondump は標準出力に書き込みます。JSON ファイルを作成するには、次の --outFile オプションを使用できます。

bsondump --outFile=file.json file.bson

--outFile は、bsondump が出力 JSON データを書き込むファイルのパスを指定します。file.bson は、変換するファイルを指定します。その他の追加オプションについては、MongoDB ドキュメントで詳しく説明されています。

bsondump は、ファイルを人間が読めるようにする必要がある mongodump デバッグタスクに特に役立ちます。たとえば、次の操作を実行してデバッグ出力を生成できます。

bsondump --type=debug file.bson

データインポート/エクスポート

mongoexport

mongoexport ツールは、MongoDB インスタンスからデータをエクスポートすることもできます。ただし、このコマンドラインツールは、mongodump のようなバイナリダンプではなく、JSON または CSV エクスポートを生成するため、操作が遅くなります。

mongoexport を使用するには、ユーザーはターゲットデータベースに対する少なくとも読み取りアクセス権が必要です。mongod または mongos インスタンスのいずれかに接続できます。mongoexport の基本構文は次のようになります。

mongoexport --collection=<coll> <options> <connection-string>

接続ニーズとユースケースに応じて組み込むことができる追加オプションが多数あります。mongoexport は JSON または CSV エクスポートを生成するため、インスタンス全体のバックアップのためにすべての豊富なBSON データ型を保持するには、拡張 JSON v2.0 (Canonical モード) を指定する必要があります。

JSON は BSON でサポートされている型の一部しか直接表現できないため、これは知っておくべき重要なオプションです。したがって、--jsonFormat オプションを追加し、canonical に設定する必要があります。例としては、次のようになります。

mongoexport --jsonFormat=canonical --collection=<coll> <connection-string>

mongodump と同様に、mongoexport には、エクスポートされたファイルを MongoDB にインポートするためにレンダリングできるパートナーインポートツールがあります。

mongoimport

mongoimport ツールは、mongoexport ツールから作成された拡張 JSON (mongoexport ファイルで BSON データ型を保持)、CSV、または TSV エクスポートからキャプチャされたデータをインポートします。適切なフォーマットを使用すると、mongoimport はサードパーティのエクスポートツールからのファイルをインポートすることもできます。

mongoimport ツールは、システムコマンドラインからのみ使用でき、mongo シェルからは使用できません。基本的な構文は次のとおりです。

mongoimport <options> <connection> <file>

mongoimport は、mongoexport で作成されたバックアップからデータベースを復元します。したがって、両方の引数のほとんどは同じです。これらのツールをバックアップ戦略のために一緒に使用する場合は、同じバージョンを使用するのが最善の方法です。

mongoimport は、UTF-8 エンコードされたデータファイルのみをサポートしています。他のエンコードでインポートしようとすると、エラーが発生します。追加のオプション構成の網羅的なリストは、公式 MongoDB ドキュメントにあります。

診断ツール

mongostat

MongoDB には、データベースインスタンスに関する洞察を収集するための便利なツールもあります。そのようなツールの 1 つが mongostat です。mongostat は、現在実行中の mongod または mongos インスタンスの状態の概要をすばやく提供する診断ツールです。UNIX/Linux に詳しい場合は、vmstat に似ていますが、MongoDB のコンテキストでは異なります。

mongostat ユーティリティは、システムコマンドラインからのみ実行でき、mongo シェルからは実行できません。mongod インスタンスに接続して mongostat ツールを使用するには、ユーザーはクラスタの serverStatus 特権アクションを持っている必要があります。MongoDB には、これを提供する clusterMonitor という組み込みロールがあります。他のロールをカスタマイズして mongostat を活用することもできます。

mongostat の基本構文は次のとおりです。

mongostat <options> <connection-string> <polling interval in seconds>

デフォルトでは、mongostat は 1 秒間の操作を反映する値を報告します。ただし、これは<sleeptime> 引数で調整できます。この期間を 1 秒より長く調整すると、統計が 1 秒あたりの平均操作数を反映するように平均化されます。

mongostat は多くのフィールドを返し、関心のあるフィールドのみを返すようにカスタマイズできます。知っておくべきもう 1 つの重要なオプションは、--rowcount=<number>, -n=<number> です。このオプションは、mongostat によって返される行数を制限します。返されるフィールドの例を次に示します。

  • inserts : 1 秒あたりにデータベースに挿入されたオブジェクトの数。
  • query : 1 秒あたりのクエリ操作の数。
  • vsize : 最後の mongostat 呼び出し時のプロセスで使用された仮想メモリの量 (メガバイト単位)。
  • repl : メンバーのレプリケーションステータス。

公式 MongoDB ドキュメントには、さらに多くのフィールドが記載されていますが、これらのいくつかの例は、システムコマンドラインからのデータベース監視に対する mongostat ユーティリティの機能を示しています。

mongotop

mongostat はデータベースレベルでの監視に役立つツールですが、mongotop はコレクションレベルごとの統計を提供するのに役立つツールです。具体的には、mongotop は、mongod インスタンスが 1 秒あたりにデータの読み取りおよび書き込みに費やす時間を追跡する方法を提供します。

mongotop はコマンドラインからのみ実行でき、基本的な構文は次のようになります。

mongotop <options> <connection-string> <polling interval in seconds>

mongotop は次のフィールドを返します。

  • mongotop.ns : これはデータベース名前空間であり、データベース名とコレクションの組み合わせです。
  • mongotop.total : mongod が名前空間で操作に費やした合計時間を提供します。
  • mongotop.read : mongod が名前空間で読み取り操作を実行するのに費やした時間を提供します。
  • mongotop.write : mongod が名前空間で書き込み操作を実行するのに費やした時間を提供します。
  • mongotop.<timestamp> : 返されたデータのタイムスタンプを提供します。

mongotop を使用すると、データベースユーザーはデータベース内のコレクションのトラフィックを監視できます。コレクションで読み取りまたは書き込み操作のスパイクまたは低迷が発生している時期を把握できます。

GridFS

GridFS は、MongoDB データベースに大きなファイルを保存するための規約です。公式の MongoDB ドライバはすべてこの規約をサポートしており、次の mongofiles プログラムも同様です。ビデオ、オーディオ、画像などの大きなファイルのストレージとリカバリの抽象化レイヤーとして機能します。

mongofiles

mongofiles ツールを使用すると、システムコマンドラインから MongoDB インスタンスに GridFS オブジェクトとして保存されているファイルを操作できます。これは、ファイルシステムに保存されているオブジェクトと GridFS の間にインターフェースを提供するため、特に役立ちます。

mongofiles の基本構文は次のとおりです。

mongofiles <options> <connection-string> <command> <filename or _id>

<command> コンポーネントは、mongofiles ユーティリティに実行させたいアクションを決定します。 コマンドの例を次に示します。

  • list <prefix> : GridFS ストア内のファイルを一覧表示します。<prefix> 部分はオプションで、返されるアイテムのリストをその文字列で始まるファイルに制限します。
  • search <string> : <string> の任意の部分に一致する名前を持つ GridFS ストア内のファイルを一覧表示します。
  • delete <filename> : 指定されたファイルを GridFS ストレージから削除します。

mongofiles は、ローカルファイルシステムと GridFS の間の相互接続性を提供し、システムコマンドラインを介して簡単にナビゲートできます。これにより、ファイル管理とファイルストレージがデータベース管理者にとってより簡単なタスクになり、データ処理が強化されます。

結論

この記事では、コマンドラインから重要なデータベースタスクを簡素化する MongoDB データベースツールとユーティリティの一部について説明しました。ツールは、日常のデータベース管理操作に不可欠な場合もあれば、アドホックに必要な場合もあります。

健全なバックアップ/復旧戦略を維持するためのデータのエクスポート/インポート、データベースまたはコレクションレベルでの診断監視、またはファイル管理のためのファイルシステム間のインターフェースの簡素化など、MongoDB はあなたをカバーします。

著者について
Alex Emerich

Alex Emerich

Alex は、典型的なバードウォッチング、ヒップホップ好きの読書家であり、データベースに関する執筆も楽しんでいます。彼は現在ベルリンに住んでおり、レオポルド・ブルームのように街を目的もなく歩いている姿が見られます。