2012-03-29 3 views
3

本当に簡単です。 JSONの処理には恐ろしい量があります(合計100GB)。この100GBはファイルに分割されており、通常は1MBごとです。JSONをJavaまたはJavaScriptで処理する方がいいですか?

JSONファイルをJavascriptで解析するのが早いか、JavaのJSON jarを使ってファイルを処理するのと同じ結果が得られるのでしょうか?

ここで明らかに私はこのすべてをマルチスレッドする必要があります。

+0

Node.jsは、ジョブをフォークしてマルチスレッドを実行するのにかなり良い仕事をすることができます – ControlAltDel

+0

@user:そうですね、私は自分のコメントを削除しました:) –

+0

解析後に何をやっていますか?それは考慮すべき別のものです。 –

答えて

1

私はJavaで処理する方が簡単で、高速で、スケーラビリティが高い(ThreadPoolExecutor)と思います。 どうやってjavascriptでやる予定ですか?スタンドアローンv8?

0

ご存知の方は、Node.jsを使用します。 Javascript上に構築された環境でJSONオブジェクトを処理する方が良い

+0

どうすればよいですか? JSONは移植可能な形式を意図しています。私の経験上、Javaはそれを扱うのにかなり良い仕事をしています。 –

6

あなたが最も熟練している技術を使用すれば、大きなパフォーマンスの差異の可能性は低くなります。 V8(GoogleのJavaScriptエンジン  —はChromeブラウザで、ブラウザ以外の環境ではNodeJSでも、スタンドアロンでも実行できます)は、優れたホットスポット最適化技術を備えたSun/OracleのJVMと同様に高速で動作します。あなたが好きな場合は、JVM上でJavaScriptを使用することもできます(Rhino)。

ここで明らかに私はこのすべてをマルチスレッドにする必要があります。

全くわかりません。プロセスがI/Oにバインドされている場合(そして100MBのファイルを1000個読み込んでいる場合は、その処理に応じておそらくそうであるように思えます)、複数のスレッドを追加することは役に立ちません。

+1

ここで重要なことは、100GBはメインメモリに収まらないため、I/Oパフォーマンスがボトルネックになる可能性があるため、処理コードではなく最適化する必要があります。 –

+1

第1に、100GBは複数のファイルに分散していると言いました(それ以外の場合は並行性はまったくありません)ので、メモリに入れる必要はありません。 私はメモリマップファイル(nioパッケージの下で)のJavaのサポートを見てみると思います - 私はnode.jsに相当するものはないと思いますか? – radai

0

どちらの言語も仮想実行環境で実行されるため、実行速度は使用するVMによって大きく左右され、特に最近のハードウェアでは最近のVMが非常に高速になりました。

私の知る限り、javascriptにはスレッド化のための 'ネイティブ'サポートがありません。ロックアップを防ぐために、マルチスレッドは「タイムシェアード」実行で実装されました。しかし、これはもはや"webworkers"の場合には見えません。ファイルを独立して処理する異なるプロセス間でファイルを分割するだけで、ファイルを処理する際のボトルネックとなる多くの同時ディスクアクセスが生成されます。

だから私は、あなたが最も快適であるという言葉を使うことをお勧めします。

Btw。 jsonファイルでどのような処理を行うのかを教えてください。

並列IOを制限するためには、一度に1つのファイルをプリフェッチしてメモリに読み込んで、そのファイルを処理するワーカーをキューに入れる(処理が重い場合は)スレッドプールは確実に処理速度を向上させるでしょう)。

関連する問題