MongoDB mongoexportツールの使い方入門
01 基本的な紹介
mongoexport はデータエクスポートツールで、mysql の select into outfile 構文と同じようにデータベースから json や csv 形式でデータをエクスポートするために使われます。
mongosに直接接続するか、mongodに接続することでデータをエクスポートすることができます。クラスタがシャード化されている場合、mongos に接続するとすべてのシャードでこのコレクションに関連するデータがエクスポートされます。
02 共通パラメータ
-h:データベースホストのIPを指定します。
-u:データベースのユーザー名を指定します。
-p:データベースのパスワードを指定します。
-d:データベースの名前を指定します。
-c:コレクションの名前を指定します。
-f:インポートする列を指定します。
--type: デフォルトは json 型、csv 型をエクスポート可能
-o: エクスポート先のファイル名を指定します。指定しない場合は、標準出力にエクスポートされます。
-q: クエリフィルタをjsonで入力し、クエリの結果をエクスポートします。
上記の共通引数には、対応する長引数のオプションもあります。例えば、-hは、代わりに--hostと入力することもできます。パラメータの詳細は mongoexport --help で見ることができます。
03コマンド
1. 以下のコマンドで、データベース new の下にあるテストコレクションの番号フィールドをエクスポートします。
mongoexport --port=27016 -u "yeyz" --authenticationDatabase "admin" -p "123456" -d new -c test --fields=number -o /data/test.json
2021-02-23T22:09:52.481+0800 connected to: localhost:27016
2021-02-23T22:09:52.512+0800 exported 2000 records
エクスポートの結果を見てみましょう。
{"_id":{"$oid":"6006c46993a711b384cc8c92"},"number":1000.0}
{"_id":{"$oid":"6006c46993a711b384cc8c93"},"number":1001.0}
{"_id":{"$oid":"6006c46993a711b384cc8c94"},"number":1002.0}
{"_id":{"$oid":"6006c46993a711b384cc8c95"},"number":1003.0}
{"_id":{"$oid":"6006c46993a711b384cc8c96"},"number":1004.0}
{"_id":{"$oid":"6006c46993a711b384cc8c97"},"number":1005.0}
{"_id":{"$oid":"6006c46993a711b384cc8c98"},"number":1006.0}
{"_id":{"$oid":"6006c46993a711b384cc8c99"},"number":1007.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9a"},"number":1008.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9b"},"number":1009.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9c"},"number":1010.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9d"},"number":1011.0}
{"_id":{"$oid":"6006c46993a711b384cc8c9e"},"number":1012.0}
numberフィールドだけを指定しても、_idフィールドが自動的にエクスポートされていることがわかります。このことから、エクスポートされる形式がjsonタイプであれば、_idフィールドはデフォルトでエクスポートされるという結論に達します。
デフォルトのエクスポートタイプはjsonです。もし、csvをエクスポートしたい場合は、--type=csvパラメータを追加します。このパラメータを追加した後、結果は以下のようになります。
number
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
ご覧の通り、_idフィールドは自動的に出力されません。これも論点になりそうです。csv型では_idフィールドが出力されず、json型では_idフィールドが出力されるのは、ツールの小さなバグかもしれませんね。
2. 特定のクエリの結果、例えば number=10 の行の結果をエクスポートします。
[root@VM-0-14-centos ~]# mongoexport --port=27016 -u "yeyz" --authenticationDatabase "admin" -p "123456" -d new -c test --type=csv -q {"number":10} --fields=number -o /data/test.json
2021-02-23T22:38:18.319+0800 connected to: localhost:27016
2021-02-23T22:38:18.321+0800 exported 1 record
qパラメータの後に直接クエリ条件を指定することができます。
04 経験値
今日の作業はスライスのクラスタに対して行われ、合計7スライス、3億以上のデータをエクスポートしました。1スライスで約5000wのデータ、エクスポートされたデータ1個につき2フィールド、各スライスのエクスポート時間は約2時間でした。
マシンのハードウェア構成
- SATAハードディスク 4TB
- コモンメモリ 128G
- intel Xeon E5-4シリーズ
もちろん、この値はあくまで経験値なので、エクスポートされるフィールドの数が多かったり、フィールドが長かったりすると、この値はあまり参考にならないかもしれません。
実際にデータのエクスポートを行ってみると、エクスポートを行うmongodbサーバーの負荷が多少上がり、メモリ使用量も多少増えましたが、特に目立ったパフォーマンスの乱れはなく、全体の処理でデータベースをロックすることもないので、やはり比較的安全な方法でした。
オンライン業務、特に機密性の高い業務を行う場合、業務への影響を最小限に抑えるため、mongosでデータエクスポートを行う場合は、まずこのmongosが業務から見えないようにし、エクスポートを行った後、サービスを外部から再プロビジョニングすることをお勧めします。mongodでデータエクスポートを行う場合は、オンライン業務への影響を避けるため、セカンダリーノードを選択するとよいでしょう。
05 逆インポート
mongodbにはmongoimportというツールもあり、mongoexportでエクスポートしたデータをmongodbのデータベースにインポートすることができます。以下はmongoimportのコマンドです。
[root@VM-0-14-centos ~]# mongoimport --port=27016 -u "yeyz" --authenticationDatabase "admin" -p "123456" -d new -c test1 --type=csv --fields=number --file=/data/test.csv
2021-02-23T22:44:21.930+0800 connected to: localhost:27016
2021-02-23T22:44:22.146+0800 imported 2001 documents
mongoimport の操作全体は insert と似ており、パラメータも mongoexport とほぼ同じです。より重要なパラメータは writeconcern の値のみです。
writeconcernの詳細な説明は公式ドキュメントをご覧ください。
本日は以上です。
以上、MongoDB mongoexportツールの使用について詳しく紹介しました。MongoDB mongoexportツールの使用についての詳しい情報は、スクリプトハウスの他の関連記事にも注目してください
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン