Frage

Derzeit Google App Engine unterstützt sowohl Python & Java. Java-Unterstützung ist weniger ausgereift. Allerdings scheint Java eine längere Liste von Bibliotheken zu haben und vor allem Unterstützung für Java-Bytecode, unabhängig von den verwendeten Sprachen, um diesen Code zu schreiben. Welche Sprache gibt eine bessere Leistung und mehr Leistung? Bitte beraten. Vielen Dank!

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

Edit: Mit „Power“ Ich bessere Erweiterbarkeit und Einbeziehung der verfügbaren Bibliotheken außerhalb des Rahmens bedeuten. Python erlaubt nur reine Python-Bibliotheken, though.

War es hilfreich?

Lösung

Ich bin voreingenommen (als ein Python-Experte, aber ziemlich rostig in Java), aber ich denke, die Python-Laufzeit von GAE ist derzeit weiter fortgeschritten und besser entwickelt als der Java-Runtime - die ehemaligen ein weiteres Jahr zu entwickeln und zu reifen hatte , nachdem alle.

Wie die Dinge gehen vorwärts gehen ist natürlich schwer vorherzusagen - die Nachfrage ist wahrscheinlich stärker auf der Java-Seite (vor allem, da es nicht nur um Java, aber auch andere Sprachen hoch oben auf der zu JVM, so ist es die Art und Weise zu laufen zB PHP oder Ruby-Code in App Engine); das Python App Engine-Team hat jedoch den Vorteil, dass an Bord Guido van Rossum hat, den Erfinder von Python und ein erstaunlich starken Ingenieure.

Im Hinblick auf die Flexibilität, die Java-Engine, wie bereits erwähnt, bietet sich die Möglichkeit der JVM-Bytecode von verschiedenen Sprachen gemacht ausgeführt wird, nicht nur Java - wenn Sie in einem mehrsprachigen Shop sind, die eine ziemlich große positive ist. Umgekehrt, wenn Sie Javascript verabscheuen, sondern muss einen Code in den Browser des Benutzers ausführen, Java GWT (die Javascript für Sie von Ihrer Java-Level-Codierung erzeugt) ist viel reicher und weiter fortgeschritten als Python-Seite Alternativen (in der Praxis, wenn Sie sich entscheiden Python, werden Sie einige JS sich zu diesem Zweck schreiben, während, wenn Sie Java wählen GWT eine brauchbare Alternative ist, wenn Sie JS verabscheuen Schreiben).

In Bezug auf den Bibliotheken ist es ziemlich viel ein wash - die JVM genug beschränkt ist (keine Themen, keine benutzerdefinierten Klassenlader, keine JNI, keine relationale DB) die einfache Wiederverwendung von vorhandenen Java-Bibliotheken behindern, so viel oder mehr, als bestehende Python-Bibliotheken werden durch die ähnlichen Beschränkungen der Python-Laufzeit in ähnlicher Weise behindert.

In Bezug auf Leistung, ich glaube, es ist ein waschen, wenn Sie Benchmark sollte auf Aufgaben der eigenen - verlassen Sie sich nicht auf die Leistung von hoch optimierten JIT-basierten JVM-Implementierungen ihre große Anlaufzeiten und Speicherbedarf Diskontierung, weil die App Engine-Umgebung ist sehr unterschiedlich (Anlaufkosten oft bezahlt werden, als Instanzen Ihrer App gestartet werden, gestoppt, zogen nach verschiedenen Hosts, usw., alle trasparently Sie - diese Ereignisse sind in der Regel viel billiger mit Python-Laufzeitumgebungen als mit JVMs).

Die XPath / XSLT Situation (zu euphemistisch ...) ist nicht gerade perfekt auf beiden Seiten, Seufzer, obwohl ich glaube, es schlecht ein bisschen weniger sein kann, in der JVM (wo offenbar wesentliche Teilmengen von Saxon sein können gemacht mit einiger Vorsicht zu laufen,). Ich denke, es lohnt sich zu öffnen Themen auf der appengine Probleme Seite mit XPath und XSLT in ihren Titel - jetzt gibt es nur Probleme für bestimmte Bibliotheken zu fragen, und das ist kurzsichtig: ich nicht wirklich egal, wie eine gute XPath / XSLT implementiert ist, für Python und / oder für Java, solange ich es zu benutzen bekommen. (Spezielle Bibliotheken können Migration bestehenden Code erleichtern, aber das ist weniger wichtig als in der Lage, solche Aufgaben zu erfüllen, wie in gewisser Weise „schnell XSLT-Transformation anwenden“ -!). Ich weiß, ich würde Stern so ein Problem, wenn sie gut formuliert (vor allem in einer sprachunabhängigen Art und Weise).

Last but not least: denken Sie daran, dass Sie andere Version der App (mit dem gleichen Datenspeicher) haben können, von denen einige mit der Python-Laufzeit umgesetzt werden, "einige mit dem Java-Runtime, und Sie können Versionen zugreifen, die von der abweichen default / aktiv“eine explizite URLs. So könnten Sie haben beide Python und Java-Code (in verschiedenen Versionen Ihrer App) verwenden und die gleiche Datenspeicher ändern, können Sie noch mehr Flexibilität gewähren (wenn auch nur einer wird die „nette“ URL haben wie foobar.appspot.com - die für den Zugriff durch interaktive Benutzer auf Browser wahrscheinlich nur wichtig ist, glaube ich, -).

Andere Tipps

Sehen Sie diese App für Änderungen in Python und Java-Performance:

http://gaejava.appspot.com/ (Edit: Leider Link ist jetzt gebrochen Aber nach para angewendet noch, als ich sah, es läuft schließlich.)

Derzeit Python und mit dem Low-Level-API in Java ist schneller als JDO auf Java, für diesen einfachen Test . Zumindest, wenn die zugrunde liegenden Motors ändert, dass App reflektieren Leistungsänderungen sollten.

auf Erfahrung Basierend mit dieser VMs auf anderen Plattformen laufen, würde ich sagen, dass Sie wahrscheinlich mehr rohe Leistung von Java als Python bekommen. Unterschätzen Sie nicht Pythons Verkaufsargumente, aber: Die Python-Sprache in Bezug auf die Codezeilen viel produktiver ist - die allgemeine Vereinbarung ist, dass Python ein Drittel der Code eines gleichwertigen Java-Programm erfordert, während die übrigen als oder besser lesbar. Dieser Vorteil wird durch die Fähigkeit multipliziert Code auszuführen sofort ohne explizite Kompilierung.

Im Hinblick auf die verfügbaren Bibliotheken, werden Sie, dass ein großer Teil der umfangreichen Python-Laufzeitbibliothek finden arbeitet aus der Box (wie auch Java). Die beliebte Django Web Framework ( http://www.djangoproject.com/ ) auch auf App Engine unterstützt.

Im Hinblick auf den ‚Macht‘, ist es schwierig zu wissen, was du meinst, aber Python ist in vielen unterschiedlichen Bereichen verwendet, vor allem im Web: YouTube in Python geschrieben ist, als Source ist (wie in der vergangenen Woche)

Juni 2013: Dieses Video ist eine sehr gute Antwort von einem Google-Ingenieure:

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

TLDR; ist:

  • Wählen Sie die Sprache, die Sie und Ihr Team ist am produktivsten mit
  • Wenn Sie etwas für die Produktion bauen: Java oder Python (not Go)
  • Wenn Sie ein großes Team und eine komplexe Code-Basis: Java (wegen der statischen Codeanalyse und Refactoring)
  • Kleine Teams, die schnell durchlaufen: Python (obwohl Java ist auch in Ordnung)

Eine wichtige Frage bei der Entscheidung zwischen Python und Java zu prüfen, ist wie Sie den Datenspeicher in jeder Sprache verwenden (und die meisten anderen Winkel auf die ursprüngliche Frage bereits recht gut in diesem Thema abgedeckt) .

Für Java , die Standardmethode ist JDO oder JPA zu verwenden. Diese sind für die Portabilität sind aber nicht sehr gut geeignet, um den Datenspeicher.

Ein Low-Level-API ist verfügbar, aber das ist zu niedrigem Niveau von Tag zu Tag nutzen - es für den Aufbau von 3rd-Party-Bibliotheken besser geeignet ist

.

Für Python gibt es eine API speziell Anwendungen bereitzustellen entwickelt, um mit einfachen, aber leistungsstarken Zugriff auf den Datenspeicher. Es ist großartig, außer dass es nicht tragbar ist, so dass es sperrt Sie in GAE.

Zum Glück gibt es Lösungen für die Schwächen für beiden Sprachen aufgelistet entwickelt.

Für Java ist der Low-Level-API verwendet wird Persistenz Bibliotheken zu entwickeln, die geeignet für den Datenspeicher viel besser sind dann JDO / JPA (IMO). Beispiele hierfür sind das Siena Projekt und objectify .

Ich habe mit Objectify vor kurzem begonnen und bin zu finden es auf den Datenspeicher sehr einfach zu bedienen und gut geeignet zu sein, und seine wachsende Popularität hat in gute Unterstützung übersetzt. Zum Beispiel wird Objectify offiziell von Googles neuem Cloud Endpoints Service unterstützt. Auf der anderen Seite arbeiten Objectify nur mit dem Datenspeicher, während Siena vom Datenspeicher ‚inspiriert‘, sondern ist so konzipiert, mit einer Vielzahl von beide SQL-Datenbanken und NoSQL-Datastores zu arbeiten.

Für Python gibt es Anstrengungen, aus der Verwendung des Python GAE Datenspeicher-API zu setzen, damit wird der GAE. Ein Beispiel ist der SQLite-Backend, die Google für die Verwendung mit dem SDK veröffentlicht, aber ich bezweifle, dass sie beabsichtigen, diese bereit zu etwas Produktion zu wachsen. Das TyphoonAE Projekt hat wahrscheinlich mehr Potenzial, aber ich glaube nicht, dass die Produktion bereit ist, noch entweder (korrigiert mich wenn ich falsch liege).

Wenn jemand Erfahrung mit jedem dieser Alternativen hat oder weiß von anderen, sie bitte in einem Kommentar ein. Ich persönlich mag den GAE-Datenspeicher - Ich finde es eine erhebliche Verbesserung gegenüber dem AWS SimpleDB sein - so wünsche ich für den Erfolg dieser Bemühungen einige der Probleme bei der Verwendung es zu lindern

.

Ich bin stark Java für GAE empfehlen und hier ist der Grund:

  1. Performance. Java ist möglicherweise schneller als Python
  2. Python Entwicklung ist unter dem Druck eines Mangels an Bibliotheken von Drittanbietern. Zum Beispiel gibt es keine XSLT für Python / GAE alle an. Fast alle Python-Bibliotheken sind C-Bindungen (und die werden nicht unterstützt von GAE).
  3. Memcache API: Java SDK haben interessantere Fähigkeiten als Python-SDK
  4. .
  5. Datastor API. JDO ist sehr langsam, aber native Java Datenspeicher-API ist sehr schnell und einfach

Ich bin mit Java / GAE in Entwicklung jetzt.

Wie Sie identifiziert haben, eine JVM nicht einschränkt Sie die Java-Sprache zu verwenden. Eine Liste der JVM Sprachen und Links können hier . Jedoch , funktioniert die Google App Engine den Satz von Klassen beschränken Sie von der normalen Java SE-Set verwenden können, und Sie werden untersuchen möchten, wenn eine dieser Implementierungen auf der App Engine verwendet werden.

EDIT: Ich sehe, Sie haben eine solche Liste gefunden

Ich kann nicht auf der Leistung von Python kommentieren. Allerdings ist die JVM eine sehr leistungsfähige Plattform-Performance-weise, aufgrund seiner Fähigkeit, dynamisch zu kompilieren und den Code während der Laufzeit zu optimieren.

Schließlich wird die Leistung hängt davon ab, was Ihre Anwendung tut, und wie Sie es codieren. In Ermangelung weiterer Informationen, ich denke, es ist nicht möglich, noch mehr Hinweise in diesem Bereich zu geben.

Ich habe, wie sauber, einfach erstaunt, und Problem der Python / Django SDK ist kostenlos. Allerdings begann ich in Situationen laufen, wo ich brauchte mehr zu tun JavaScript zu starten und dachte, ich könnte die Vorteile der GWT und andere Java-Dienstprogramme nehmen wollen. Ich habe gerade auf halbem Weg durch die GAE Java Tutorial bekommen, und haben ein Problem nach dem anderen hatte: Eclipse-Konfigurationsprobleme, JRE versionitis, die geisttötende Komplexität von Java und einer verwirrenden und möglicherweise gebrochen Tutorial. Auschecken dieser Website und anderen verbunden von hier holte es für mich. Ich bin zurück in Python gehen, und ich werde in Pyjama aussehen mit meiner JavaScript Herausforderung zu helfen.

Ich bin ein wenig, um das Gespräch zu spät, aber hier sind meine zwei Cent. Ich hatte wirklich eine harte Zeit, die Wahl zwischen Python und Java, da ich auch in beiden Sprachen auskenne. Wie wir alle wissen, gibt es Vorteile und Nachteile für beide, und Sie haben in Rechnung zu tragen Ihre Anforderungen und die Rahmenbedingungen, die für Ihr Projekt am besten funktionieren.

Als ich in der Regel in dieser Art von Dilemma zu tun, ich sehe für Zahlen meiner Entscheidung zu unterstützen. Ich beschloss, mit Python aus vielen Gründen zu gehen, aber in meinem Fall gibt es eine Handlung, die der Wendepunkt war. Wenn Sie suchen "Google App Engine" in GitHub von September 2014 , erhalten Sie die folgende Abbildung finden:

GAE Sprache Statistik

Es könnte viele Vorurteile in diesen Zahlen, aber insgesamt gibt es drei Mal mehr GAE Python-Repositories als GAE Java-Repositories. Nicht nur das, aber wenn man die Projekte, die von der „Anzahl der Sterne“ Liste sehen Sie, dass eine Mehrheit der Python-Projekte am oberen Rand angezeigt (Sie müssen in Betracht ziehen, dass Python um mehr hat). Für mich macht dies ein starkes Argument für Python, weil ich in Konto Community Annahme in & Support, Dokumentation, und die Verfügbarkeit von Open-Source-Projekten.

Es ist eine gute Frage, und ich denke, dass viele der Antworten auf beiden Seiten des Zauns gute Aussichtspunkte der Vor-und Nachteile gegeben haben. Ich habe versucht, sowohl Python und JVM-basierte App Engine (in meinem Fall war ich mit Gaelyk , die ein Groovy Anwendungs-Framework für App Engine gebaut). Wenn es um Leistung auf der Plattform kommt, ist eine Sache, die ich nicht in Betracht gezogen hatte, bis es mich ins Gesicht starrt ist die Implikation „Loading Requests“, die auf der Java-Seite des Zauns auftreten. Wenn Groovy verwenden diese Ladeanforderungen sind ein Killer.

Ich habe eine Stelle zusammen auf dem Thema ( http : //distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) und ich bin der Hoffnung, eine Art zu arbeiten, um das Problem zu finden, aber ich denke, wenn nicht ich ll Django Kombination mit einem Python + bis Anfragen Kaltstart java geht zurück hat weniger Einfluss.

Basierend auf wie viel ich höre Java Leute beschweren sich über App Engine im Vergleich zu Python-Benutzer, ich würde sagen, Python ist viel weniger stressig zu verwenden.

Es gibt auch projizieren unb , die offenbar ist Google- wenn nicht Google-prozentige finanziert. Sie versuchen eine LLVM-basierte Backend für Python 2.6.1 Bytecode zu implementieren, so können sie eine JIT und verschiedene nette nativen Code / GC / Multi-Core-Optimierungen verwenden. (Nice Zitat: „Wir streben keine Original-Arbeit zu tun, anstatt so viel in den letzten 30 Jahren der Forschung wie möglich.“) Sie sind für ein 5-fach Speed-up zu CPython suchen

.

Natürlich ist dies nicht Ihre unmittelbare Frage nicht beantworten, sondern deutet auf eine „Schließung der Lücke“ (falls vorhanden) in die Zukunft (hoffentlich).

Die Schönheit des Python nowdays ist, wie gut sie mit anderen Sprachen in Verbindung steht. Zum Beispiel können Sie sowohl Python und Java auf dem gleichen Tisch mit Jython haben. Natürlich jython obwohl es Java-Bibliotheken unterstützt voll und ganz unterstützt es nicht vollständig Python-Bibliotheken. Aber es ist eine ideale Lösung, wenn Sie mit Java-Bibliotheken zu verwirren. Es ermöglicht auch Sie es mit Java-Code ohne zusätzliche Codierung zu mischen.

Aber auch python selbst einige Schritte forwared gemacht hat. Siehe ctypes zum Beispiel in der Nähe von C Geschwindigkeit, direkte accees zu C-Bibliotheken all dies, ohne den Komfort Python-Codierung zu verlassen. Cython geht einen Schritt weiter, so dass mit Leichtigkeit C-Code mit Python-Code mischen, oder auch wenn Sie zu Chaos mit c oder c nicht wollen ++, können Sie immer noch Code in Python aber verwenden statisch Variablen geben Sie Ihre Python-Programme so schnell wie C-Anwendungen machen . Cython wird sowohl verwendet und von Google durch die Art und Weise unterstützt.

Gestern fand ich auch Werkzeuge für Python C oder sogar Assembly (siehe CorePy) Inline, man kann noch mächtiger als die.

Python ist sicherlich eine sehr reife Sprache, nicht nur auf sich selbst stehen, sondern in der Lage mit einer anderen Sprache, mit leicht coooperate. Ich denke, das ist es, was eine ideale Lösung macht python auch in einem sehr fortgeschrittenen und anspruchsvollen Szenarien.

Mit Python können Sie acess zu C / C haben ++, Java, .NET und viele andere Bibliotheken mit fast Null zusätzliche Codierung auch eine Sprache geben, die minimiert, vereinfacht und verschönert Codierung. Es ist eine sehr verlockend Sprache.

mit Python gegangen, obwohl GWT die perfekte Ergänzung für die Art einer App Ich entwickle scheint. JPA ist ziemlich auf GAE verkorkste (z keine @Embeddable und andere obskure nicht dokumentierten Einschränkungen). Nachdem eine Woche lang, kann ich sagen, dass Java einfach nicht richtig im Moment auf GAE fühlt.

denken One zu berücksichtigen sind die Gerüste Sie yo verwenden möchten. Nicht alle Frameworks auf Java-Seite sind gut geeignet für Anwendungen, die auf App Engine ausgeführt wird, die etwas anders ist als herkömmlicher Java Applikationsserver.

Eine Sache zu prüfen, ist die Anwendung Startzeit. Bei herkömmlichen Java-Web-Anwendungen brauchen Sie nicht wirklich darüber nachzudenken. Die Anwendung startet und dann läuft es einfach. Ist nicht wirklich wichtig, wenn der Start 5 Sekunden oder einige Minuten in Anspruch nimmt. Mit App Engine Sie in einer Situation enden könnten, wo die Anwendung nur dann gestartet wird, wenn eine Anfrage kommt. Das heißt, der Benutzer wartet, während Ihre Anwendung bootet. New GAE-Funktionen wie reservierte Instanzen hier helfen, aber prüfen Sie zuerst.

Eine andere Sache sind die verschiedenen Einschränkungen GAE psoes auf Java. Nicht alle Rahmenbedingungen zufrieden mit den Einschränkungen in Bezug auf Klassen, die Sie verwenden können, oder die Tatsache, dass Threads nicht erlaubt ist, oder dass Sie nicht lokales Dateisystem zugreifen können. Diese Probleme sind wahrscheinlich einfach, herauszufinden, von nur googeln über GAE-Kompatibilität.

Ich habe auch einige Leute beschweren sich über Probleme mit Sitzungsgröße auf modernen UI-Frameworks (Wicket, nämlich) zu sehen. Im Allgemeinen neigen diese Rahmenbedingungen bestimmte Abwägungen zu tun, um die Entwicklung Spaß, schnell und einfach zu machen. Manchmal kann dies mit der App Engine Einschränkungen zu Konflikten führt.

Ich begann zunächst die Entwicklung auf GAE mit Java arbeiten, wechselte aber dann wegen dieser Gründe zu Python. Mein persönliches Gefühl ist, dass Python eine bessere Wahl für App Engine-Entwicklung ist. Ich denke, dass Java ist mehr „zu Hause“ zum Beispiel auf Amazons Elastic Beanstalk.

ABER mit App Engine die Dinge ändern sich sehr schnell. GAE wird sich ändern und wie es immer beliebter wird, werden die Gerüste auch ihre Grenzen Wechsel zu umgehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top