2011-07-01 16 views
10

MongoDBに一括読み込みを行いたい。私はロードしようとするJSONオブジェクトを含む約200GBのファイルを持っていますが、オブジェクトにオブジェクトが含まれているため(つまり、-jsonArray aaramを使用する必要があります)、4MBに制限されているためmongoimportツールを使用できません。私は、スクリプトを書いて、文書を挿入するPOSTリクエストを送信するためのcURLを使用することができCouchDBの中のバルクロードAPIがあり多数のオブジェクトを含むJSONファイルからMongoDBを一括読み込み

、無サイズ制限...

はMongoDBの中にこのようなものはありますか?私は眠いが知っているが、これはJSONの入れ子配列の挿入に対処することができますか?

ありがとうございます!

+3

お気に入りの言語で小さなスクリプトを作成してみませんか? –

+0

+1なぜdownvoteがわからないのですか?私も知っていることに興味があります。 ( "いいえ、そのようなものはありません"というのは、正解であれば良い答えでしょう) – JasonSmith

+1

2日後、これは良いスタックオーバーフローの質問のままです。それは正しい質問が1つあります。私は答えがそれ自身を示すことを望む。その目的のために、私は自分の評判のポイントを最初のMongoユーザーに提供して、明確で正確な答えを出す。 (回答者は** no **ですが、私は専門家にそれを任せています) – JasonSmith

答えて

2

私は自分のツールをJavaやRubyのようなものに書いて(meh effort)オブジェクトを渡さない限り、基本的に本当の良い答えはないと思われます...しかし、それは本当に痛みです。代わりに単純に分割することに決めましたファイルを4MBのチャンクにまで分割しました。スプリットを使って簡単なシェルスクリプトを書いただけです(制限のために複数のファイルを分割しなければならなかったことに注意してください)。 splitコマンドを-l(行番号)と一緒に使用して、各ファイルにx行の行があるようにしました。私の場合、各Jsonオブジェクトは約4kbでしたので、私はちょうどラインサイズを推測しました。

splitは676個のファイル(26 * 26)しか作成できないことを覚えている人は、ファイルの半分が失われないように各ファイルに十分な行があることを確認する必要があります。いずれにしても、これを良い古いbashスクリプトに入れ、mongo importを使用して、一晩実行させてください。最も簡単なソリューションIMOで、Ruby/Javaまたはw.e.でファイルを切り取り、マッシュしてJSONを解析する必要はありません。 else。

スクリプトは少し慣れていますが、誰かがコメントや嫌な投稿を残しておきたい場合は、

+0

ハハ、 "meh effort" - このような共通の評価の簡潔な表現。 – JasonSmith

2

あなたのデータ構造について何も知らずに、mongoimportを使用できない場合、あなたは運が悪いと言います。任意のJSONデータを解釈するために微調整可能な標準ユーティリティはありません。

あなたのデータが、インポートユーティリティが期待するものと1:1で合わないときは、RubyやPythonのような言語で一度だけのインポートスクリプトを書くのが最も簡単です。バッチインサートはインポートを大幅に高速化しますが、大きすぎるバッチを実行しないと、エラーが発生します(インサートの最大サイズは16MBです)。 Rubyドライバでは、ハッシュの配列を単一のハッシュの代わりにinsertメソッドに渡すだけで、バッチ挿入を行うことができます。

データの例を質問に追加すると、さらにお手伝いできる場合があります。

関連する問題