163

現在、GoogleAppEngineはPythonとJavaの両方をサポートしています。Javaサポートは成熟していません。ただし、Javaにはライブラリのリストが長く、特にJavaバイトコードの記述に使用されている言語に関係なくサポートされているようです。どの言語がより良いパフォーマンスとより多くのパワーを与えるでしょうか?お知らせ下さい。ありがとうございました!

編集: http: //groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli = 1

編集: 「パワー」とは、より優れた拡張性と、フレームワーク外で利用可能なライブラリを含めることを意味します。ただし、Pythonでは純粋なPythonライブラリのみが許可されます。

4

15 に答える 15

124

私は偏見があります (Python の専門家ですが、Java にはかなり慣れていません) が、GAE の Python ランタイムは現在、Java ランタイムよりも高度で、よりよく開発されていると思います。 .

もちろん、物事が今後どのように進むかを予測するのは困難です。Java 側での需要はおそらくより強いでしょう (特に、Java だけでなく、JVM の上にある他の言語についても同様であるため、PHP などを実行する方法として最適です)。または App Engine 上の Ruby コード); ただし、Python App Engine チームには、Python の発明者であり、驚くほど強力なエンジニアである Guido van Rossum が参加しているという利点があります。

柔軟性の点では、Java エンジンは、すでに述べたように、Java だけでなく、さまざまな言語で作成された JVM バイトコードを実行する可能性を提供します。逆に、Javascript は嫌いだが、ユーザーのブラウザーでコードを実行する必要がある場合、Java の GWT (Java レベルのコーディングから Javascript を生成する) は、Python 側の代替手段よりもはるかにリッチで高度です (実際には、選択した場合Python の場合、この目的のために自分で JS を作成することになりますが、Java を選択した場合、JS を作成するのが嫌いな場合は GWT が使用可能な代替手段になります)。

ライブラリに関して言えば、それはほとんどウォッシュです。JVM は十分に制限されており (スレッド、カスタム クラス ローダー、JNI、リレーショナル DB はありません)、既存の Java ライブラリの単純な再利用を既存の Python と同じかそれ以上に妨げています。ライブラリも同様に、Python ランタイムの同様の制限によって妨げられています。

パフォーマンスに関しては、私はそれがウォッシュだと思いますが、独自のタスクをベンチマークする必要があります。高度に最適化された JIT ベースの JVM 実装のパフォーマンスに依存しないでください。起動時間とメモリ フットプリントが大きいためです。環境は非常に異なります (アプリのインスタンスが起動、停止、別のホストに移動されるなど、起動コストは頻繁に支払われます。これらはすべて透過的に発生します。このようなイベントは通常、JVM よりも Python ランタイム環境の方がはるかに安価です)。

XPath/XSLT の状況 (婉曲的に言えば...) は、どちらの側でも完全ではありません。 、注意してください)。タイトルに XPath と XSLT を含むAppengine Issuesページの問題を開く価値があると思います。現在、特定のライブラリを要求する問題のみがあり、それは近視眼的です。優れた XPath/XSLT がどのように実装されているかはあまり気にしません。私がそれを使用できる限り、Pythonおよび/またはJava用。(特定のライブラリは既存のコードの移行を容易にするかもしれませんが、それは、何らかの方法で「XSLT 変換を迅速に適用する」などのタスクを実行できることほど重要ではありません!-)。よく表現されていれば(特に言語に依存しない方法で)、そのような問題にスターを付けたいと思います。

最後になりましたが、アプリの異なるバージョンを (同じデータストアを使用して) 持つことができることを覚えておいてください。その一部は Python ランタイムで実装され、一部は Java ランタイムで実装され、「デフォルト/アクティブ」とは異なるバージョンにアクセスできます。 " 明示的な URL を持つもの。そのため、PythonコードJava コードの両方 (アプリの異なるバージョン) で同じデータ ストアを使用および変更することができ、柔軟性がさらに高まります (ただし、foobar.appspot.com などの「適切な」URL を持つのは 1 つだけです --これはおそらく、ブラウザ上でインタラクティブなユーザーがアクセスする場合にのみ重要だと思います;-)。

于 2009-07-06T16:17:10.750 に答える
72

Python と Java のパフォーマンスの変化については、このアプリをご覧ください。

http://gaejava.appspot.com/ (編集: 申し訳ありませんが、リンクは現在壊れています。しかし、最後に実行されているのを見たとき、次のパラグラフはまだ適用されていました)

現在、この単純なテストでは、Python と Java で低レベル API を使用する方が、Java で JDO を使用するよりも高速です。少なくとも、基盤となるエンジンが変更された場合、そのアプリはパフォーマンスの変更を反映する必要があります。

于 2009-09-23T07:45:21.033 に答える
18

これらの VM を他のプラットフォームで実行した経験に基づくと、おそらく Python よりも Java の方が生のパフォーマンスが得られると思います。ただし、Python のセールス ポイントを過小評価しないでください。Python 言語は、コード行数の点ではるかに生産的です。一般的な合意として、Python は同等の Java プログラムの 3 分の 1 のコードを必要とする一方で、同等以上の可読性を維持します。この利点は、明示的なコンパイル手順なしでコードをすぐに実行できることで倍増します。

利用可能なライブラリに関しては、大規模な Python ランタイム ライブラリの多くがそのままで動作することがわかります (Java の場合と同様)。一般的な Django Web フレームワーク ( http://www.djangoproject.com/ ) も AppEngine でサポートされています。

「パワー」に関しては、あなたが何を意味しているのかを理解するのは難しいですが、Python は多くの異なるドメイン、特に Web で使用されています。YouTube は Python で作成されており、Sourceforge も (先週の時点で) 使用されています。

于 2009-07-06T09:48:32.673 に答える
9

PythonとJavaのどちらを使用するかを決定する際に考慮すべき重要な質問は、各言語でデータストアをどのように使用するかです(元の質問に対する他のほとんどの角度は、このトピックですでに十分に説明されています)。

Javaの場合、標準的な方法はJDOまたはJPAを使用することです。これらは移植性には優れていますが、データストアにはあまり適していません。

低レベルのAPIが利用可能ですが、これは日常的に使用するには低レベルです。サードパーティのライブラリを構築するのに適しています。

Pythonの場合、データストアへの簡単で強力なアクセスをアプリケーションに提供するために特別に設計されたAPIがあります。持ち運びができないことを除けば素晴らしいので、GAEに閉じ込められます。

幸いなことに、両方の言語にリストされている弱点に対して開発されているソリューションがあります。

Javaの場合、低レベルAPIを使用して、JDO / JPA(IMO)よりもデータストアにはるかに適した永続性ライブラリを開発しています。例としては、SienaプロジェクトObjectifyなどがあります。

私は最近Objectifyを使い始めましたが、非常に使いやすく、データストアに適していることがわかりました。その人気の高まりは、優れたサポートにつながっています。たとえば、ObjectifyはGoogleの新しいクラウドエンドポイントサービスによって公式にサポートされています。一方、Objectifyはデータストアでのみ機能しますが、Sienaはデータストアに「触発」されていますが、さまざまなSQLデータベースとNoSQLデータストアの両方で機能するように設計されています。

Pythonの場合、GAEからPythonGAEデータストアAPIを使用できるようにするための取り組みが行われています。一例として、GoogleがSDKで使用するためにリリースしたSQLiteバックエンドがありますが、これが本番環境に対応したものに成長することを意図しているとは思えません。TyphoonAEプロジェクトにはおそらくもっと可能性がありますが、まだ本番環境に対応しているとは思いません(間違っている場合は訂正してください)。

誰かがこれらの選択肢のいずれかを経験したことがあるか、他の人を知っている場合は、コメントにそれらを追加してください。個人的には、GAEデータストアが本当に気に入っています。AWSSimpleDBに比べてかなり改善されていると思います。そのため、GAEデータストアを使用する際の問題のいくつかを軽減するために、これらの取り組みが成功することを願っています。

于 2010-04-14T15:44:29.923 に答える
7

私はGAEにJavaを強くお勧めしますが、その理由は次のとおりです。

  1. パフォーマンス:JavaはPythonよりも潜在的に高速です。
  2. Pythonの開発は、サードパーティのライブラリが不足しているというプレッシャーにさらされています。たとえば、Python/GAE用のXSLTはまったくありません。ほとんどすべてのPythonライブラリはCバインディングです(そしてそれらはGAEによってサポートされていません)。
  3. Memcache API:JavaSDKにはPythonSDKよりも興味深い機能があります。
  4. データストアAPI:JDOは非常に低速ですが、ネイティブJavaデータストアAPIは非常に高速で簡単です。

現在、開発にJava/GAEを使用しています。

于 2009-07-07T15:50:45.997 に答える
6

ご存知のとおり、JVMを使用しても、Java言語の使用に制限されることはありません。JVM言語とリンクのリストはここにあります。ただし、Google App Engineは、通常のJava SEセットから使用できるクラスのセットを制限しているため、これらの実装のいずれかをアプリエンジンで使用できるかどうかを調査する必要があります。

編集:あなたはそのようなリストを見つけたと思います

Pythonのパフォーマンスについてコメントすることはできません。ただし、JVMは、実行時にコードを動的にコンパイルおよび最適化する機能を備えているため、パフォーマンス面で非常に強力なプラットフォームです。

最終的にパフォーマンスは、アプリケーションの機能とコーディング方法によって異なります。それ以上の情報がないので、私はこの分野でこれ以上の指針を与えることは不可能だと思います。

于 2009-07-06T08:13:08.903 に答える
6

私は、Python/Django SDK がいかにクリーンでわかりやすく、問題のないものであるかに驚いています。しかし、JavaScript をもっと使い始める必要がある状況に直面し始め、GWT やその他の Java ユーティリティを活用したいと思うようになりました。私は GAE Java チュートリアルの途中までしか進んでいませんでしたが、次から次へと問題が発生しました。Eclipse の構成の問題、JRE のバージョンの問題、Java の気が遠くなるような複雑さ、そして混乱し、壊れている可能性のあるチュートリアルです。このサイトとここからリンクされている他のサイトをチェックすると、私はそれを決めました. Python に戻り、JavaScript の課題を解決するために Pajamas を調べます。

于 2010-08-03T04:37:36.410 に答える
3

Python ユーザーと比較して、Java ユーザーが AppEngine に不満を持っていることをどれだけ聞いたかに基づいて、Python は使用するストレスがはるかに少ないと言えます。

于 2010-06-05T04:24:36.453 に答える
3

良い質問です。回答の多くは、フェンスの両側の長所と短所について良い見解を示していると思います。Python と JVM ベースの AppEngine の両方を試しました (私の場合、AppEngine 用に構築された Groovy アプリケーション フレームワークであるGaelykを使用していました)。プラットフォームでのパフォーマンスに関して言えば、実際に直面するまで考慮していなかったことが 1 つあります。それは、フェンスの Java 側で発生する「ロード要求」の影響です。Groovy を使用する場合、これらの読み込み要求はキラーです。

このトピックに関する投稿をまとめました ( http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ )。この問題を回避する方法を見つけたいと思っていますが、そうでない場合は、Java リクエストのコールド スタートによる影響が少なくなるまで、Python + Django の組み合わせに戻ると思います。

于 2010-04-21T03:54:05.113 に答える
2

今日のPythonの美しさは、他の言語との通信がいかに優れているかです。たとえば、Jythonを使用して同じテーブルにPythonとJavaの両方を含めることができます。もちろん、jythonはJavaライブラリを完全にサポートしていますが、Pythonライブラリを完全にはサポートしていません。しかし、Javaライブラリをいじりたい場合は理想的なソリューションです。それはあなたが余分なコーディングなしでそれをJavaコードと混ぜることさえ可能にします。

しかし、Python自体でさえ、いくつかの手順に注意を払っています。たとえば、ctypesを参照してください。たとえば、C速度に近い場合、Pythonコーディングの快適さを損なうことなく、これらすべてをCライブラリに直接アクセスできます。Cythonはさらに一歩進んで、cコードとPythonコードを簡単に組み合わせることができます。または、cやc ++をいじりたくない場合でも、Pythonでコーディングできますが、静的型変数を使用して、PythonプログラムをCアプリと同じくらい高速にします。 。ちなみに、Cythonはグーグルによって使用されサポートされています。

昨日、PythonがCやアセンブリ(CorePyを参照)をインライン化するためのツールを見つけましたが、それ以上の強力なツールはありません。

Pythonは確かに非常に成熟した言語であり、それ自体に立っているだけでなく、他の言語と簡単に連携することができます。それが、非常に高度で要求の厳しいシナリオでもPythonを理想的なソリューションにしている理由だと思います。

Pythonを使用すると、C / C ++、Java、.NET、およびその他の多くのライブラリにアクセスでき、追加のコーディングはほとんどありません。コーディングを最小限に抑え、簡素化し、美化する言語も提供します。その非常に魅力的な言語。

于 2010-04-14T09:14:37.360 に答える
2

Unladen Swallowというプロジェクトもあります。これは、Google が所有していなくても、Google が資金を提供しているようです。彼らは、Python 2.6.1 バイトコード用の LLVM ベースのバックエンドを実装しようとしているので、JIT とさまざまな優れたネイティブ コード/GC/マルチコア最適化を使用できます。(良い引用: 「私たちは独自の作業を行うことを熱望しており、その代わりに過去 30 年間の研究を可能な限り多く使用しています。」) 彼らは CPython の 5 倍のスピードアップを求めています。

もちろん、これはあなたの差し迫った質問には答えませんが、将来の「ギャップの解消」(もしあれば) を示しています (うまくいけば)。

于 2009-08-26T21:36:11.780 に答える
1

考慮すべきことの 1 つは、使用するフレームワークです。Java 側のすべてのフレームワークが App Engine で実行されるアプリケーションに適しているわけではありません。これは、従来の Java アプリケーション サーバーとは多少異なります。

考慮すべきことの 1 つは、アプリケーションの起動時間です。従来の Java Web アプリケーションでは、これについて考える必要はありません。アプリケーションが起動し、実行されます。起動に 5 秒かかるか数分かかるかは問題ではありません。App Engine を使用すると、リクエストが届いたときにのみアプリケーションが開始されるという状況に陥る可能性があります。これは、アプリケーションの起動中にユーザーが待機していることを意味します。ここでは予約インスタンスなどの新しい GAE 機能が役立ちますが、最初に確認してください。

もう 1 つのことは、Java でのさまざまな制限 GAE psoes です。すべてのフレームワークが、使用できるクラスの制限や、スレッドが許可されていない、またはローカル ファイルシステムにアクセスできないという事実に満足しているわけではありません。これらの問題は、GAE の互換性についてグーグルで検索するだけで、おそらく簡単に見つけることができます。

また、最新の UI フレームワーク (Wicket など) でのセッション サイズの問題について不平を言う人もいます。一般に、これらのフレームワークは、開発を楽しく、迅速かつ簡単にするために、特定のトレードオフを行う傾向があります。これにより、App Engine の制限と競合する場合があります。

最初は Java で GAE を使って開発を始めましたが、これらの理由から Python に切り替えました。私の個人的な感覚では、App Engine の開発には Python の方が適していると思います。Java は、たとえば Amazon の Elastic Beanstalk のように、より「家庭的」だと思います。

しかし、App Engine では状況が急速に変化しています。GAE 自体が変化しており、人気が高まるにつれて、フレームワークもその制限を回避するために変化しています。

于 2011-02-23T20:51:34.113 に答える
1

GWT は私が開発している種類のアプリに完全に一致するように見えますが、Python を使用しなくなりました。JPA は GAE でかなり混乱しています (たとえば、@Embeddable やその他の文書化されていないあいまいな制限はありません)。1 週間過ごしてみて、現時点で Java が GAE に適していないと判断できます。

于 2009-09-18T04:40:43.213 に答える