MongoDB のデータ出力ツール mongoexportとmongodumpの比較

こんにちは、菊池です。

MongoDBのデータを出力するツールとして、mongoexportとmongodumpがあります。どちらもmongodb-toolsのパッケージに含まれるツールです。この2つのツールの違いを比較してみました。

mongoexportとmongodump

結論から言うと、mongoexportはCSVまたはJSONのテキストデータ、mongodumpはBSON形式というバイナリデータで出力します。

使い方も、データフォーマットの指定以外にはほぼ、同じように利用することができます。

mongoexport mongodump
データフォーマット CSV/JSON BSON
インデックスなどのメタデータ なし あり
データ項目(key)の指定:-f 可能 可能
対象データベースの指定:-d 可能 可能
対象コレクションの指定:-c 可能 可能
インポートツール mongoimport mongorestore
主な用途 他のツールへのデータ連携 バックアップ/リストア

mongodumpでは、インデックスなどを含め、データベースの情報が完全に含まれるため、バックアップとしての活用が可能です。一方で、mongoexportはテキストでの出力となり、ことなるツールとのデータのやりとりに向いています。

mongoexport実行例

$ mongoexport -h mongo0:27017 -d test -c members --out members.json
2017-07-31T22:59:03.059+0900   	connected to: mongo0:27017
2017-07-31T22:59:03.059+0900   	exported 2 records

出力データはこのようになります。

$ cat members.json
{"_id":"jane","joined":{"$date":"2011-03-02T00:00:00.000Z"},"likes":["golf","racquetball"]}
{"_id":"joe","joined":{"$date":"2012-07-02T00:00:00.000Z"},"likes":["tennis","golf","swimming"]}

mongodump実行例

$ mongodump -h mongo0 --port 27017 -d test --out all
2017-07-31T23:02:51.759+0900   	writing test.contacts to
2017-07-31T23:02:51.760+0900   	writing test.members to
2017-07-31T23:02:51.760+0900   	writing test.user to
2017-07-31T23:02:51.760+0900   	done dumping test.contacts (3 documents)
2017-07-31T23:02:51.760+0900   	done dumping test.members (2 documents)
2017-07-31T23:02:51.760+0900   	done dumping test.user (1 document)

出力データを確認します。

$ ls -l all/test/
合計 28
-rw-rw-r-- 1 ec2-user ec2-user 220  7月 31 23:02 contacts.bson
-rw-rw-r-- 1 ec2-user ec2-user 214  7月 31 23:02 contacts.metadata.json
-rw-rw-r-- 1 ec2-user ec2-user 166  7月 31 23:02 members.bson
-rw-rw-r-- 1 ec2-user ec2-user  84  7月 31 23:02 members.metadata.json
-rw-rw-r-- 1 ec2-user ec2-user 133  7月 31 23:02 membersView_1.metadata.json
-rw-rw-r-- 1 ec2-user ec2-user  37  7月 31 23:02 user.bson
-rw-rw-r-- 1 ec2-user ec2-user  81  7月 31 23:02 user.metadata.json

データ本体のバイナリbsonと、コレクションごとのメタデータのJSONが含まれます。メタデータには、以下のようにインデックス情報などが含まれています。

$ cat all/test/members.metadata.json
{"options":{},"indexes":[{"v":2,"key":{"_id":1},"name":"_id_","ns":"test.members"}]}

まとめ

以上です。

MongoDBのデータ出力ツールを比較しました。用途にあった適切なツールを活用しましょう。