質問

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

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

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

役に立ちましたか?

解決

私は偏見を持っていますが (Python の専門家ですが、Java にはかなり慣れています)、GAE の Python ランタイムは現在、Java ランタイムよりも高度で、よりよく開発されていると思います。結局のところ、前者は開発と成熟にさらに 1 年かかりました。 。

もちろん、今後どのように物事が進むのかを予測するのは困難です。おそらく Java 側の需要がより強いでしょう (特に、これは Java だけでなく、JVM の上に位置する他の言語も対象となるため、それが実行するための最良の方法です。App Engine 上の PHP または 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 なし)、既存の Python と同等かそれ以上に、既存の Java ライブラリの単純な再利用が妨げられています。ライブラリも、Python ランタイムに対する同様の制限によって同様に妨げられます。

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

XPath/XSLT の状況 (婉曲的ですが...) は、どちらの面でも完全とは言えません (ため息) が、JVM ではもう少し悪くならないかもしれないと思います (どうやら、Saxon のかなりのサブセットを実行できるようです)。 、多少の注意が必要です)。について問題を提起する価値があると思います Appengine の問題 タイトルに XPath と XSLT が含まれるページ -- 現時点では、特定のライブラリを要求する問題のみがあり、それは近視眼的です。Python や Java については、それを使用できる限り、優れた XPath/XSLT がどのように実装されているかはあまり気にしません。(特定のライブラリを使用すると、既存のコードの移行が容易になる場合がありますが、「XSLT 変換を迅速に適用する」などのタスクを何らかの方法で実行できることほど重要ではありません!-)。(特に言語に依存しない方法で) うまく表現されていれば、そのような問題にスターを付けることはわかっています。

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

他のヒント

PythonとJavaのパフォーマンスの変化を、このアプリをご覧ます:

http://gaejava.appspot.com/する (編集:謝罪は、リンクが壊れているしかし、私はそれが最後に実行しているを見たとき、次のパラはまだ適用。)

現在、PythonとJavaでの低レベルAPIを使用したが、この簡単なテストのために、Javaの上JDOよりも速いのです。少なくとも下地エンジンが変更された場合、そのアプリは、パフォーマンスの変化を反映している必要があります。

他のプラットフォーム上でこれらのVMを実行しているとの経験に基づいて、私はあなたがおそらくのPythonよりもJavaの外の多くの生のパフォーマンスを得るだろうと言うと思います。しかし、Pythonのセールスポイントを過小評価してはいけない:Python言語がはるかに生産コードの行の面である - 一般的な合意は、残りのまたはより読みながらPythonは、同等のJavaプログラムのコードの3分の1を必要とすることです。この利点は、明示的なコンパイルステップせずにすぐにコードを実行する能力によって乗算されます。

使用可能なライブラリに関しては、あなたは(Javaのは、同じように)大規模なPythonのランタイムライブラリの多くは、箱から出して動作することを見つけることができます。人気のDjangoのWebフレームワークは( http://www.djangoproject.com/する)もAppEngineの上でサポートされています。

(先週のような)Sourceforgeのであるとして、YouTubeのはPythonで書かれている。「パワー」とに関しては、それはあなたが何を意味するか知っていることは困難だが、Pythonは、多くの異なるドメイン、特にWebで使用されています。 >

2013年6月: このビデオは Google エンジニアによる非常に優れた回答です。

http://www.youtube.com/watch?v=tLriM2krw2E

TLDR;は:

  • あなたとあなたのチームが最も生産性を発揮できる言語を選択してください
  • 実稼働用に何かを構築したい場合は、次のようにします。Java または Python (Go ではない)
  • 大規模なチームと複雑なコードベースがある場合:Java (静的コード分析とリファクタリングのため)
  • 迅速に反復する小規模チーム:Python(Javaでも大丈夫ですが)

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

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

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

パイソンの場合 アプリケーションにデータストアへの簡単かつ強力なアクセスを提供するために特別に設計された API があります。移植性がないので GAE に閉じ込められてしまうことを除けば、これは素晴らしいことです。

幸いなことに、両方の言語でリストされている弱点に対する解決策が開発されています。

Javaの場合, 、低レベル API は、JDO/JPA (IMO) よりもデータストアにはるかに適した永続化ライブラリの開発に使用されています。例としては、 シエナプロジェクト, 、 そして 客観化する.

最近 Objectify を使い始めましたが、非常に使いやすく、データストアによく適していることがわかりました。人気の高まりがサポートの充実につながっています。たとえば、Objectify は、Google の新しい Cloud Endpoints サービスで正式にサポートされています。一方、Objectify はデータストアでのみ動作しますが、Siena はデータストアから「インスピレーションを受け」ていますが、さまざまな SQL データベースと NoSQL データストアの両方で動作するように設計されています。

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

これらの代替案のいずれかを使用した経験がある人、または他の代替案を知っている人がいたら、コメントに追加してください。個人的に、私は GAE データストアがとても気に入っています。AWS SimpleDB よりも大幅に改善されていることがわかりました。そのため、使用時の問題のいくつかを軽減するためのこれらの取り組みが成功することを願っています。

私は GAE には Java を強く推奨します。その理由は次のとおりです。

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

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

私はどのようにきれいな、単純明快で驚かせてきた、との問題は、Python / DjangoのSDKは無料。しかし、私はより多くのJavaScriptをやって起動するのに必要な状況に実行して開始し、私はGWTと他のJavaのユーティリティを利用したいかもしれないと思いました。私は、GAEのJavaチュートリアルをちょうど半分の方法を得ている、と次々に問題があった:構成の問題、JREのversionitis、ジャワの退屈でつまらない複雑さ、混乱と多分壊れチュートリアルEclipseの。このサイトをチェックアウトし、ここからリンクされている他の人が私のためにそれを締めつけました。私は戻ってPythonのつもりだ、と私は私のJavaScriptの挑戦を支援するためにパジャマに見ていきます。

私は会話に少し遅れだけど、ここで私の2セントです。私はよく両方の言語に精通しておりますので、私は本当に、PythonとJavaの間で選択苦労していました。我々はすべて知っているように、そこの両方の長所と短所があり、そしてあなたは、アカウントにあなたの要件とあなたのプロジェクトのために最適に動作する枠組みを取らなければなりません。

私は通常ジレンマのこのタイプではそうであるように、私は私の決定をサポートするための番号を探してください。私は多くの理由のためのPythonで行くことにしましたが、私の場合には、転換点だった1つのプロットがありました。あなたがを2014年9月ののとしてのGitHubに "Google App Engineのを" 検索した場合は、次の図があります:

GAE言語統計

これらの数字には多くの偏見があるかもしれませんが、全体的に、GAE Javaのリポジトリよりも3倍以上のGAEのPythonのリポジトリがあります。あなたは「星の数」でプロジェクトを一覧表示する場合はそれだけでなく、あなたは、Pythonのプロジェクトの大半はトップ(あなたはPythonが周りより長くなっていることを考慮に取らなければならない)に表示されていることがわかります。私はアカウントのコミュニティの採用&サポート、ドキュメンテーション、およびオープンソースプロジェクトの利用可能性に取るので私には、これは、Pythonのための強力なケースになります。

これはいい質問だ、と私は応答の多くがフェンスの両側に長所と短所の良い視点を与えていると思います。私は(私の場合、私はGroovyのある Gaelykではに使用していたPythonとJVMベースのAppEngineの両方を試してみましたAppEngineのために構築されたアプリケーションフレームワーク)。それがプラットフォーム上でのパフォーマンスに来るとき、それは顔で私を見つめていたまで、私は考えられていなかった一つのことは、フェンスのJava側で発生する「ロード・リクエスト」の意味です。 Groovyのを使用する場合は、これらの読み込み要求はキラーです。

私は話題に一緒にポストを置く( HTTP ://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ の)と私は、問題を回避作業の方法を見つけることを期待してんだけど、いない場合、私は、私は」だと思いますコールドスタートのJavaのリクエストが衝撃のあまりを持ってまで、バックのPython + Djangoの組み合わせに行くことでしょう。

私はJavaの人々はPythonのユーザーに比べAppEngineの文句を聞くどのくらいに基づいて、私はPythonが使用する非常にストレスの少ないだと思います。

も明らかである空車ツバメを、そこプロジェクトのGoogle- Googleの所有でない場合は資金を提供。彼らは、Python 2.6.1バイトコードのためのLLVMベースのバックエンドを実装しようとしているので、彼らはJITと様々な素敵なネイティブコード/ GC /マルチコア最適化を使用することができます。 (ニース引用:「私たちは、代わりに、可能な限り研究の過去30年間の多くを使用して、何のオリジナル作品を行わないことを熱望する。」)彼らはCPythonのに5倍のスピードアップを探しています。

これはあなたの直接の質問に答えていないもちろん、将来的には(もしあれば)「ギャップの閉鎖」に向けたポイント(たぶん)。

のpython nowdaysの美しさは、それが他の言語との通信方法もあります。たとえば、あなたはJythonのと同じテーブルの上にPythonとJavaの両方を持つことができます。もちろん、Jythonのそれは完全にJavaライブラリをサポートしていても、それは完全にpythonのライブラリをサポートしていません。しかし、その理想的なソリューションは、Javaライブラリを台無しにしたい場合。それも、あなたが余分なコーディングでJavaコードでそれをミックスすることができます。

しかし、たとえ自分自身をPythonのforwaredいくつかのステップを行いました。 Cスピード、Pythonのコーディングの快適さを離れることなくCライブラリへの直接acceesこのすべての近くに、例えばctypesのを参照してください。 Cythonを容易にPythonコードとCコードを混在させることができ、さらに一歩進んで、またはあなたがCまたはC ++を台無しにしたいいけない場合でも、あなたはPythonでまだコードすることができますが、静的に早くCアプリケーションとしてあなたのpythonとプログラムを作成する変数を入力使用します。 Cythonは、両方の方法でGoogleが使用してサポートされています。

昨日、私も(CorePyを参照)、Cあるいはアセンブリをインライン化するためのpythonのためのツールを見つけ、あなたはそれよりも、より強力な取得傾けます。

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

のpythonであなたは、最小限に簡素化し、コーディング美化ほぼゼロ、追加のコーディングもあなたを与える言語とC / C ++やJava、.NETおよび他の多くのライブラリへのアセスを持つことができます。その非常に魅力的な言語。

GWTは私が開発していますアプリの種類にぴったりと思われるにもかかわらず、Pythonのと共に去りありません。 JPAはかなりGAE(例えばない@Embeddableおよび他の非文書あいまい制限)に台無しにされています。一週間過ごした、私はJavaが一瞬でGAE上で右感じていないことを伝えることができます。

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

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

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

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

私は当初 Java を使用して GAE で開発を開始しましたが、これらの理由から Python に切り替えました。私の 個人的な感情 App Engine 開発には Python の方が適しているということです。Java は、たとえば Amazon の Elastic Beanstalk の方が「馴染みやすい」と思います。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top