web-dev-qa-db-ja.com

C ++がJavaよりも一般的に高速である場合、ほとんどのデータ分析/ ETLツールがJavaで開発されるのはなぜですか?

私は多くのフォーラムで読んだことがありますが、多くのユーザーはC++がJavaよりも高速であることが重要です)に同意しています。 Javaで開発されたマイニングソフトウェアまたはソフトウェアツール?C++を使用することで、より大きな利点が得られるべきではありませんか?

2
Isaac Rodriguez

一般的なパフォーマンスの違いが真であると仮定すると...

  • Javaには、より成熟したデータ操作ライブラリがあります。
  • Javaの文字列操作は穏やかです。
  • Javaはより広いユーザーベースを持っています。
  • 通常、Javaは正しく速く記述されます。
  • ETLプロセスはディスクにバインドされるため、ランタイムの速度は重要ではありません。

...そして、プロセスに数時間かかる場合、ここかそこに数分保存しても、誰も本当に気にしません。

24
Telastyn

ETLのワークフローは通常、CPUバウンドではなくI/Oバウンドであるというだけではありません。それは正当な理由です。

ここでの本当の問題は開発コストです。

同等の機能を持つC++アプリケーションは、Javaのものよりもビルドが遅く、維持が困難です。

これには多くの理由があります。貧弱なC++パッケージ管理、低レベルのメモリ管理、比較的貧弱なツールのサポートなど.

プロジェクトを開始するとき、問題は次のようになります。

低レベルのコード(C、ASM、C++など)を使用することで得られるパフォーマンス上の利点は、そのテクノロジを使用して構築するための追加コストに見合う価値があるのでしょうか。

答えが「いいえ」の場合、それらを使用して構築するビジネスケースはありません。

これは、機械学習とpythonを使用した同等のハイブリッドモデルで発生します。Pythonを使用してtensorflowを完全に構築する必要がありますか?答えはノーです、それは遅すぎて役に立たないでしょう。したがって、C++を使用して構築され、GPUコンピューティングで裏打ちされており、使いやすさのためにpythonapiを使用しています。

ただし、ETL製品の場合、ワークフローがCPUにバインドされることは珍しいため、C++で実装するために意味のあるケースはありません。そのため、多くのpython ETLフレームワークも表示されます。

15
Doug

注:ここで「Java」について言及する場合、それはたまたまそれが質問で言及されたものだからです。他のほとんどすべてのツールを置き換えても、残りのほとんどの答えはほぼ同じままです。

このような質問については2つの考え方があります。彼のコメントの中で、@ Docbrownは1つの考え方の流れを非常に簡潔に要約しているが、本当の価値はほとんど失われていないと思う。

さあ、このトピックは打ちのめされました。「なぜYの方が速いのにXを使うのですか?」常に「速度はソフトウェアの唯一の品質基準ではなく、多くの場合最も重要な基準ではないため」であり、「Yは常にまたは一般にXよりも速いわけではないため」です。

これをもう少し一般的に見ると、議論は基本的に次のとおりです。目前のタスクの技術要件を注意深く検討すると、Xがタスクの優れたツールであることがわかるため、プログラマーはYよりXを選択しました。

つまり、意思決定を行う人々は既存のバイアスの影響を受けず、確認バイアスの影響を受けず、一般に、当面のタスクに適用される技術的な考慮事項のみに基づいて完全に合理的に意思決定を行うと想定されます。

これは思想の集まりであり、思想の集まりには名前を付ける必要があるので、これを「非常に非現実的な」思想の集まりと名付けます。

2番目の考え方は、技術的な要因を正確に無視するのではなく、人的要因も考慮しようとします。それはそのような決定をすることに関与している人々が実際の...人々であることを前提としています。彼らは既存のバイアスを持っています。それらは確認バイアスの影響を受けます。

これは、彼らが必ずしも悪い決定を下すこと、またはそれらの決定を下す理由がそれほど有効ではないことを意味するわけではありませんが、現実的な試みを行うと、技術的要因がそのような決定を行うための唯一の基準であることはまれであることがすぐにわかります-実際には、たいていの場合、技術的な要因がそのような決定においてかなりマイナーな役割を果たす可能性があります。

ネットワークの影響下では、(たとえば)企業がJavaを支持する企業(IBMやOracleなど)のデータベースを使用している場合、Javaを使用するように促す多くのアドバイスを見つける可能性が高いと考えています。一方、Microsoft SQLサーバーなどを使用している場合は、TLタスクに.NETに基づいたものを使用する可能性が非常に高くなります。 (いわば)既存のソフトウェアスタックへの取り組みがほとんどない、またはまったくない小規模なスタートアップを検討している場合、Pythonのようなものを使用する可能性はかなり高いでしょう。 =とPandas(そして、彼らはそれを「ETL」のような「品格のある」ものと呼ばない可能性が高いです-それらは単にそれを「データスクレーパー」またはその順序の何かと呼びます)。

既存の担当者を見ると、2つのまったく異なる考慮事項がありますが、同じ方向に働く傾向があります。 1つは、既存のバイアスと確認バイアスの問題です。 Java(多くの大企業がそうであるように))を書く人でいっぱいのIT部門がある場合、少なくとも一部の人が実際にJavaを使用する推奨である可能性があります。 Javaがmuchが他の選択肢よりも悪いことは明らかであり、彼らはそれを最初の選択肢と見なす可能性が高いです。確認バイアスはその役割を果たします。たとえば、彼らの視点から見ると、彼らが見つけたほぼすべての記事はJavaが本当に最良の選択であることを示す証拠と見なされます。1

2番目の考慮事項は防御がはるかに簡単です。Javaを知っている人でいっぱいのIT部門がある場合、この新しいタスクを処理するためにJavaを知っている人をさらに数人追加する方がはるかに良いです。 (他の状況下で)他のツールが本当に仕事に適している場合でも、他のツールがこの特定のタスクに優れている場合でも、特定のタスクの節約は新しいツールを導入するオーバーヘッドを正当化しないことがよくあります、現在の担当者が実際に十分に評価できない人を雇ったり、新しい手順を実行したりするなど。

検討する価値があるさらに別のポイントがあります。多くの場合、人気のあるものに対するあなたの見方は、あなたの背景によって大きく形作られます。上記と同じ(そしてそれ以上の)要素の多くは、この見方を強化するのに役立ちます。上記に記載されていないが、私にとって明らかに関連があるように見えるのは、単に用語です。 「データベースETL」のようなものをGoogleで検索すると、結果はOracleに関連する結果とJava(おそらく、SASのような他の「エンタープライズ」指向のベンダーのいくつか)によって支配されます)。代わりに、「データベーススクレイパー」などを検索すると、OracleとJavaが基本的に存在しない世界観が表示されます。


1.はい、記事に「Javaこのタスクに明らかに劣っていることがわかりました)」のように非常に明確に記載されている場合でも、確認バイアスは証拠が人々の心を変えることはめったにないことを意味します。反対は本当です:誰かが彼らの既存の信念に反する証拠を提示されたとき、それは彼らの主を変更することに失敗するだけでなく、実際には彼らが(何らかの方法で)結局それを確認として考えることになる彼らがすでに信じていたものなので、彼らは結局その信念さえもmore強く保持することになります。

4
Jerry Coffin

余談ですが、データマイニングアプリケーションの多くはPythonで記述されているため、データの表示にJavaが使用されることもあります。

ただし、考慮すべき次の点がpythonとJavaの両方に適用されます。

  1. 両方Java&Pythonは、さまざまなマシンで一度記述して変更せずに実行できるため、Windowsマシンで開発およびテストしてから使用できます。必要に応じてスーパーコンピュータで。
  2. どちらにも、データ表示、データ収集(Webスクレイピングなど)、データベースとのやり取りなどのための非常に多くの成熟したライブラリがあります。
  3. ほとんどの場合、これらのライブラリは無料で、ほとんどまたはまったく費用をかけずに利用でき、ソースコードも利用できます。
  4. ライブラリは、ほとんど/すべてのプラットフォームでも利用できます。
  5. どちらの場合も、ツールチェーン全体を自由に使用できます。
  6. どちらもデータサイズに関して適切にスケーリングされます。

これを、ツールチェーンのコストがかかるC++と比較してください。次に、データベースと通信する必要がある場合、コネクタライブラリを購入または作成する必要があり、そのライブラリは特定のプラットフォームでのみ機能し、単一のインストールに制限される場合があります。

1
Steve Barnes