MongoDB
MongoDBデータベースツール&ユーティリティの紹介
MongoDBデータベースツール&ユーティリティの紹介
どのデータベースを使用しているかにかかわらず、データベースを操作するのに役立つデータベースツールがおそらく利用できるでしょう。データベースツールとは、データベース管理タスクを実行する際に作業を容易にするツール、ユーティリティ、アシスタントの総称です。
必須ではありませんが、データベースツールとユーティリティは時間と労力を節約できます。MongoDBには、デプロイメントで使用できる非常に役立つ、知っておくべきコマンドラインユーティリティの公式コレクションがあります。この記事では、インストールについて簡単に触れた後、最も便利なユーティリティについて説明します。
MongoDBはそのツールとユーティリティを、バイナリインポート/エクスポート、データインポート/エクスポート、診断ツール、GridFSの4つのカテゴリに分けているので、それに応じて説明します。
MongoDBデータベースツールのインストール
MongoDBバージョン4.4以降、MongoDBデータベースツールはMongoDBサーバーのダウンロードとは別にリリースされています。また、これらのツールがそれぞれのMongoDBサーバーバージョンと同時にリリースされていた以前のインスタンスと比較して、独自のバージョン管理で保守されています。
インストール手順については触れませんが、MongoDB 4.4以降を使用している場合は、以下の記事で各OSのインストールプロセスを説明しています。
MongoDBを使用している場合は、PrismaのMongoDBコネクタをぜひお試しください!Prisma Clientを使用して、本番環境のMongoDBデータベースを安心して管理できます。
MongoDBとPrismaを使い始めるには、ゼロから始めるガイドまたは既存のプロジェクトに追加する方法をご覧ください。
バイナリのインポート/エクスポート
mongodump
mongodump
は、データベースの内容のバイナリ形式でのエクスポートを作成するためのユーティリティです。このユーティリティは、スタンドアロン、レプリカセット、およびシャードクラスターのデプロイメントからデータをエクスポートできます。エクスポートはmongod
またはmongos
インスタンスのいずれからでも実行できます。mongodump
はmongo
シェルではなく、システムコマンドラインから実行する必要があることに注意することが重要です。
mongodump
は、完全なバックアップおよびリカバリ戦略の一部を形成するために、mongorestore
(今後さらに説明)と連携することができます。mongodump
は、コレクション、クエリ、または本番環境から開発環境への同期に基づいて部分的なバックアップを生成することもできます。
小規模なデプロイメントには有効な戦略ですが、大規模なMongoDBデプロイメントの場合、mongodump
は別のバックアップ戦略のために脇に置いておくべきです。mongodump
は実行中のmongod
インスタンスと対話することで動作するため、実行中のデータベースのパフォーマンスに影響を与える可能性があります。トラフィックを生成するだけでなく、このツールはデータベースがすべてのデータをメモリを通して読み取ることを強制します。MongoDBがめったにアクセスされないデータを読み取る必要がある場合、これはより頻繁にアクセスされるデータからリソースを奪い、通常のワークロードのパフォーマンスを低下させる可能性があります。
mongodump
の基本的な構文は、システムコマンドラインで次のようになります。
mongodump <options> <connection-string>
mongodump
はファイルを生成し、アクセスできるようにdump/
ディレクトリに保存します。公式MongoDBドキュメントで、接続文字列の設定とその他のオプションについて詳しく読むことができます。
mongorestore
mongorestore
は、小規模なデプロイメントの十分なバックアップ戦略を作成するためのmongodump
のパートナーツールです。mongorestore
プログラムは、バイナリデータベースダンプ(mongodump
ファイル)または標準入力からデータをmongod
またはmongos
インスタンスにロードします。
mongodump
と同様に、mongorestore
はmongo
シェルではなく、システムコマンドラインで実行する必要があります。これも実行中のmongod
インスタンスに対して動作するため、小規模なデプロイメント以上の復元戦略としては非効率です。
mongorestore
の基本的な構文は次のようになります。
mongorestore <options> <connection-string> <directory or file to restore>
mongorestore
の追加オプションは、バックアップ戦略やスタンドアロンインポートに必要な要件に合わせて追加できます。
bsondump
bsondump
は、mongodump
を使用して生成されたバイナリファイルを読み取るためのツールです。bsondump
ユーティリティは、BSONファイルをJSONを含む人間が読める形式に変換します。
bsondump
はコマンドラインで実行する必要があり、BSONファイルを検査するための診断ツールです。データ取り込みやその他のアプリケーション用途に使用することを意図していません。
bsondump
は、データをフォーマットするためにExtended 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データ型を保持するには、Extended JSON v2.0 (Canonical mode)を指定する必要があります。
JSONはBSONでサポートされている型の一部しか直接表現できないため、これは知っておくべき重要なオプションです。したがって、--jsonFormat
オプションを追加し、canonical
に設定する必要があります。例は次のようになります。
mongoexport --jsonFormat=canonical --collection=<coll> <connection-string>
mongodump
と同様に、mongoexport
には、エクスポートされたファイルをMongoDBにインポートできるようにレンダリングするパートナーインポートツールがあります。
mongoimport
mongoimport
ツールは、mongoexport
ツールで作成されたExtended JSON(BSONデータ型を保持するmongoexport
ファイル)、CSV、またはTSV形式のエクスポートからキャプチャされたデータをインポートします。正しい形式であれば、mongoimport
はサードパーティのエクスポートツールからのファイルもインポートできます。
mongoimport
ツールは、mongo
シェルではなく、システムコマンドラインからのみ使用できます。その基本的な構文は次のとおりです。
mongoimport <options> <connection> <file>
mongoimport
は、mongoexport
で取得したバックアップからデータベースを復元します。したがって、両方の引数のほとんどは同じです。バックアップ戦略のためにこれらのツールを一緒に使用する場合は、同じバージョンを使用するのが最善です。
mongoimport
は、UTF-8エンコードされたデータファイルのみをサポートしています。他のエンコードでインポートしようとすると、エラーが発生します。追加オプションの完全なリストは、公式MongoDBドキュメントに記載されています。
診断ツール
mongostat
MongoDBには、データベースインスタンスに関する洞察を収集するための便利なツールもあります。その1つがmongostat
です。mongostat
は、現在実行中のmongod
またはmongos
インスタンスのステータスを迅速に概要する診断ツールです。UNIX/Linuxに詳しい方なら、MongoDBのコンテキストにおけるvmstat
に似ていると感じるでしょう。
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>
: GridFSストア内のファイルで、<string>
のいずれかの部分に名前が一致するものを一覧表示します。delete <filename>
: 指定されたファイルをGridFSストレージから削除します。
mongofiles
は、ローカルファイルシステムとGridFS間の相互接続性を提供し、システムコマンドライン経由で便利に操作できます。これにより、データベース管理者にとってファイル管理とファイルストレージがより簡単なタスクになり、データ処理が強化されます。
結論
この記事では、コマンドライン経由で重要なデータベースタスクを簡素化するMongoDBデータベースツールおよびユーティリティの一部について説明しました。ツールは、日常のデータベース管理操作に不可欠な場合もあれば、アドホックにのみ必要とされる場合もあります。
健全なバックアップ/リカバリ戦略を維持するためのデータのエクスポート/インポート、データベースまたはコレクションレベルでの診断監視、ファイル管理のためのファイルシステム間のインターフェースの簡素化など、MongoDBがカバーしています。
MongoDBを使用している場合は、PrismaのMongoDBコネクタをぜひお試しください!Prisma Clientを使用して、本番環境のMongoDBデータベースを安心して管理できます。
MongoDBとPrismaを使い始めるには、ゼロから始めるガイドまたは既存のプロジェクトに追加する方法をご覧ください。