Derzeit unterstützt Google App Engine sowohl Python als auch Java. Die Java-Unterstützung ist weniger ausgereift. Java scheint jedoch eine längere Liste von Bibliotheken zu haben und unterstützt insbesondere Java-Bytecode, unabhängig von den Sprachen, in denen dieser Code geschrieben wurde. Welche Sprache bietet eine bessere Leistung und mehr Leistung? Bitte beraten. Danke dir!
Bearbeiten: http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1
Bearbeiten: Mit "Macht" meine ich eine bessere Erweiterbarkeit und Einbeziehung verfügbarer Bibliotheken außerhalb des Frameworks. Python erlaubt jedoch nur reine Python-Bibliotheken.
Antworten:
Ich bin voreingenommen (ein Python-Experte, aber in Java ziemlich verrostet), aber ich denke, die Python-Laufzeit von GAE ist derzeit weiter fortgeschritten und besser entwickelt als die Java-Laufzeit - die erstere hatte schließlich ein zusätzliches Jahr Zeit, um sich zu entwickeln und zu reifen .
Wie die Dinge in Zukunft weitergehen werden, ist natürlich schwer vorherzusagen - die Nachfrage ist wahrscheinlich auf der Java-Seite stärker (zumal es nicht nur um Java geht, sondern auch um andere Sprachen, die über der JVM liegen, also ist es DIE Art, zB PHP auszuführen oder Ruby-Code in App Engine); Das Python App Engine-Team hat jedoch den Vorteil, Guido van Rossum, den Erfinder von Python und einen erstaunlich starken Ingenieur, an Bord zu haben.
In Bezug auf die Flexibilität bietet die Java-Engine, wie bereits erwähnt, die Möglichkeit, JVM-Bytecode auszuführen, der in verschiedenen Sprachen und nicht nur in Java erstellt wurde - wenn Sie sich in einem mehrsprachigen Geschäft befinden, ist dies ein ziemlich großer Vorteil. Umgekehrt, wenn Sie Javascript verabscheuen, aber Code im Browser des Benutzers ausführen müssen, ist Javas GWT (das Javascript für Sie aus Ihrer Java-Codierung zu generieren) weitaus umfangreicher und fortschrittlicher als Python-seitige Alternativen (in der Praxis, wenn Sie dies wünschen Python, Sie werden selbst einige JS für diesen Zweck schreiben, während GWT eine brauchbare Alternative ist, wenn Sie es ablehnen, JS zu schreiben.
In Bezug auf Bibliotheken ist es so ziemlich eine Wäsche - die JVM ist so eingeschränkt (keine Threads, keine benutzerdefinierten Klassenladeprogramme, keine JNI, keine relationale Datenbank), dass die einfache Wiederverwendung vorhandener Java-Bibliotheken genauso oder mehr behindert wird als vorhandenes Python Bibliotheken werden in ähnlicher Weise durch ähnliche Einschränkungen der Python-Laufzeit behindert.
In Bezug auf die Leistung denke ich, dass es eine Wäsche ist, obwohl Sie sich an Ihren eigenen Aufgaben orientieren sollten - verlassen Sie sich nicht auf die Leistung hochoptimierter JIT-basierter JVM-Implementierungen, die ihre großen Startzeiten und Speicher-Footprints aufgrund der App-Engine reduzieren Die Umgebung ist sehr unterschiedlich (Startkosten werden häufig bezahlt, wenn Instanzen Ihrer App gestartet, gestoppt, auf andere Hosts usw. verschoben werden - alles für Sie - solche Ereignisse sind in Python-Laufzeitumgebungen normalerweise viel billiger als in JVMs).
Die XPath / XSLT-Situation (um euphemistisch zu sein ...) ist auf beiden Seiten nicht gerade perfekt, seufz, obwohl ich denke, dass es in der JVM ein bisschen weniger schlimm ist (wo anscheinend erhebliche Teilmengen von Saxon zum Laufen gebracht werden können mit einiger Sorgfalt). Ich denke, es lohnt sich, Probleme auf der Seite " Appengine Issues " mit XPath und XSLT in ihren Titeln zu eröffnen. Derzeit gibt es nur Probleme, bei denen nach bestimmten Bibliotheken gefragt wird, und das ist kurzsichtig: Es ist mir egal, wie ein gutes XPath / XSLT implementiert wird. für Python und / oder für Java, solange ich es verwenden kann. (Bestimmte Bibliotheken können die Migration von vorhandenem Code erleichtern, aber das ist weniger wichtig, als Aufgaben wie "XSLT-Transformation schnell anwenden" auf EINIGE Weise auszuführen! -). Ich weiß, dass ich ein solches Thema in der Hauptrolle spielen würde, wenn es gut formuliert wäre (insbesondere sprachunabhängig).
Last but not least: Denken Sie daran, dass Sie unterschiedliche Versionen Ihrer App (mit demselben Datenspeicher) verwenden können, von denen einige mit der Python-Laufzeit implementiert sind, andere mit der Java-Laufzeit, und dass Sie auf Versionen zugreifen können, die sich von "default / active" unterscheiden "eine mit expliziten URLs. Sie können also sowohl Python- als auch Java-Code (in verschiedenen Versionen Ihrer App) verwenden und denselben Datenspeicher ändern, wodurch Sie noch mehr Flexibilität erhalten (obwohl nur einer die "nette" URL wie foobar.appspot.com hat - Das ist wahrscheinlich nur für den Zugriff interaktiver Benutzer auf Browsern wichtig, stelle ich mir vor ;-).
quelle
In dieser App finden Sie Änderungen in der Python- und Java-Leistung:
http://gaejava.appspot.com/ (Bearbeiten: Entschuldigung, Link ist jetzt defekt. Aber der folgende Absatz gilt immer noch, als ich ihn zuletzt laufen sah.)
Derzeit sind Python und die Verwendung der Low-Level-API in Java für diesen einfachen Test schneller als JDO in Java . Zumindest wenn sich die zugrunde liegende Engine ändert, sollte diese App Leistungsänderungen widerspiegeln.
quelle
Aufgrund der Erfahrung mit der Ausführung dieser VMs auf anderen Plattformen würde ich sagen, dass Java wahrscheinlich mehr Leistung bringt als Python. Unterschätzen Sie jedoch nicht die Verkaufsargumente von Python: Die Python-Sprache ist in Bezug auf Codezeilen viel produktiver - die allgemeine Übereinstimmung ist, dass Python ein Drittel des Codes eines äquivalenten Java-Programms benötigt und dabei mindestens lesbar bleibt. Dieser Vorteil wird durch die Möglichkeit multipliziert, Code ohne expliziten Kompilierungsschritt sofort auszuführen.
In Bezug auf die verfügbaren Bibliotheken werden Sie feststellen, dass ein Großteil der umfangreichen Python-Laufzeitbibliothek sofort funktioniert (ebenso wie die von Java). Das beliebte Django-Webframework ( http://www.djangoproject.com/ ) wird auch von AppEngine unterstützt.
In Bezug auf "Power" ist es schwierig zu wissen, was Sie meinen, aber Python wird in vielen verschiedenen Bereichen verwendet, insbesondere im Web: YouTube ist in Python geschrieben, ebenso wie Sourceforge (Stand letzte Woche).
quelle
Juni 2013: Dieses Video ist eine sehr gute Antwort eines Google-Ingenieurs:
http://www.youtube.com/watch?v=tLriM2krw2E
TLDR; ist:
quelle
Eine wichtige Frage, die bei der Entscheidung zwischen Python und Java berücksichtigt werden muss, ist, wie Sie den Datenspeicher in jeder Sprache verwenden (und die meisten anderen Aspekte der ursprünglichen Frage wurden in diesem Thema bereits recht gut behandelt).
Für Java ist die Standardmethode die Verwendung von JDO oder JPA. Diese eignen sich hervorragend für die Portabilität, sind jedoch für den Datenspeicher nicht sehr gut geeignet.
Eine Low-Level-API ist verfügbar, diese ist jedoch für den täglichen Gebrauch zu niedrig - sie eignet sich besser zum Erstellen von Bibliotheken von Drittanbietern.
Für Python gibt es eine API, die speziell entwickelt wurde, um Anwendungen einen einfachen, aber leistungsstarken Zugriff auf den Datenspeicher zu ermöglichen. Es ist großartig, außer dass es nicht tragbar ist, sodass Sie an GAE gebunden sind.
Glücklicherweise werden Lösungen für die für beide Sprachen aufgeführten Schwachstellen entwickelt.
Für Java wird die Low-Level-API verwendet, um Persistenzbibliotheken zu entwickeln, die für den Datenspeicher viel besser geeignet sind als JDO / JPA (IMO). Beispiele sind das Siena-Projekt und Objectify .
Ich habe vor kurzem angefangen, Objectify zu verwenden, und finde, dass es sehr einfach zu verwenden und für den Datenspeicher gut geeignet ist, und seine wachsende Beliebtheit hat zu einer guten Unterstützung geführt. Beispielsweise wird Objectify offiziell vom neuen Cloud Endpoints-Dienst von Google unterstützt. Auf der anderen Seite funktioniert Objectify nur mit dem Datenspeicher, während Siena vom Datenspeicher "inspiriert" ist, jedoch für die Verwendung mit einer Vielzahl von SQL-Datenbanken und NoSQL-Datenspeichern ausgelegt ist.
Für Python werden Anstrengungen unternommen, um die Verwendung der Python GAE-Datenspeicher-API außerhalb der GAE zu ermöglichen. Ein Beispiel ist das SQLite-Backend, das Google für die Verwendung mit dem SDK freigegeben hat, aber ich bezweifle, dass dies zu etwas Produktionsfähigem werden soll. Das TyphoonAE- Projekt hat wahrscheinlich mehr Potenzial, aber ich glaube auch nicht, dass es noch produktionsbereit ist (korrigieren Sie mich, wenn ich falsch liege ).
Wenn jemand Erfahrung mit einer dieser Alternativen hat oder andere kennt, fügen Sie diese bitte in einem Kommentar hinzu. Persönlich mag ich den GAE-Datenspeicher sehr - ich finde, dass er eine erhebliche Verbesserung gegenüber der AWS SimpleDB darstellt - und wünsche mir daher den Erfolg dieser Bemühungen, um einige der Probleme bei der Verwendung zu verringern.
quelle
Ich empfehle Java für GAE nachdrücklich und hier ist der Grund:
Ich verwende Java / GAE gerade in der Entwicklung.
quelle
Wie Sie bereits festgestellt haben, beschränkt sich die Verwendung einer JVM nicht auf die Verwendung der Java-Sprache. Eine Liste der JVM-Sprachen und -Links finden Sie hier . Die Google App Engine beschränkt jedoch die Anzahl der Klassen, die Sie aus der normalen Java SE-Gruppe verwenden können, und Sie sollten untersuchen, ob eine dieser Implementierungen in der App Engine verwendet werden kann.
EDIT: Ich sehe, Sie haben eine solche Liste gefunden
Ich kann die Leistung von Python nicht kommentieren. Die JVM ist jedoch eine sehr leistungsfähige Plattform, da sie in der Lage ist, Code während der Laufzeit dynamisch zu kompilieren und zu optimieren.
Letztendlich hängt die Leistung davon ab, was Ihre Anwendung tut und wie Sie sie codieren. In Ermangelung weiterer Informationen ist es meines Erachtens nicht möglich, in diesem Bereich weitere Hinweise zu geben.
quelle
Ich war erstaunt, wie sauber, unkompliziert und problemlos das Python / Django SDK ist. Ich geriet jedoch in Situationen, in denen ich mehr JavaScript erstellen musste, und dachte, ich möchte möglicherweise die Vorteile von GWT und anderen Java-Dienstprogrammen nutzen. Ich habe gerade die Hälfte des GAE Java-Tutorials hinter mir und hatte ein Problem nach dem anderen: Eclipse-Konfigurationsprobleme, JRE-Versionitis, die verblüffende Komplexität von Java und ein verwirrendes und möglicherweise kaputtes Tutorial. Das Auschecken dieser Seite und anderer von hier verlinkter Seiten hat sie für mich gewonnen. Ich gehe zurück zu Python und werde mir Pyjamas ansehen, um bei meinen JavaScript-Herausforderungen zu helfen.
quelle
Ich bin etwas spät dran, aber hier sind meine zwei Cent. Es fiel mir wirklich schwer, mich zwischen Python und Java zu entscheiden, da ich mich in beiden Sprachen gut auskenne. Wie wir alle wissen, gibt es für beide Vor- und Nachteile, und Sie müssen Ihre Anforderungen und die Rahmenbedingungen berücksichtigen, die für Ihr Projekt am besten geeignet sind.
Wie ich es normalerweise in solchen Dilemmata mache, suche ich nach Zahlen, um meine Entscheidung zu unterstützen. Ich habe mich aus vielen Gründen für Python entschieden, aber in meinem Fall gab es eine Handlung, die den Wendepunkt darstellte. Wenn Sie ab September 2014 in GitHub nach "Google App Engine" suchen , finden Sie folgende Abbildung:
Diese Zahlen können viele Verzerrungen aufweisen, aber insgesamt gibt es dreimal mehr GAE Python-Repositorys als GAE Java-Repositorys. Nicht nur das, aber wenn Sie die Projekte nach der "Anzahl der Sterne" auflisten, werden Sie sehen, dass ein Großteil der Python-Projekte oben angezeigt wird (Sie müssen berücksichtigen, dass Python schon länger existiert). Für mich ist dies ein starkes Argument für Python, da ich die Akzeptanz und Unterstützung der Community, die Dokumentation und die Verfügbarkeit von Open-Source-Projekten berücksichtige.
quelle
Es ist eine gute Frage, und ich denke, viele der Antworten haben auf beiden Seiten des Zauns gute Vor- und Nachteile gezeigt. Ich habe sowohl Python- als auch JVM-basierte AppEngine ausprobiert (in meinem Fall habe ich Gaelyk verwendet , ein für AppEngine entwickeltes Groovy-Anwendungsframework). Wenn es um die Leistung auf der Plattform geht, war eine Sache, an die ich nicht gedacht hatte, bis sie mich ins Gesicht starrte, die Implikation von "Ladeanforderungen", die auf der Java-Seite des Zauns auftreten. Bei Verwendung von Groovy sind diese Ladeanfragen ein Killer.
Ich habe einen Beitrag zum Thema zusammengestellt ( http://distractable.net/coding/google-appengine-java-vs-python-performance-comparison/ ) und hoffe, einen Weg zu finden, um das Problem zu umgehen, aber Wenn nicht, werde ich wahrscheinlich zu einer Python + Django-Kombination zurückkehren, bis der Kaltstart von Java-Anfragen weniger Auswirkungen hat.
quelle
Basierend darauf, wie oft sich Java-Leute im Vergleich zu Python-Benutzern über AppEngine beschweren, würde ich sagen, dass die Verwendung von Python viel weniger stressig ist.
quelle
Es gibt auch das Projekt Unladen Swallow , das anscheinend von Google finanziert wird, wenn nicht von Google. Sie versuchen, ein LLVM-basiertes Backend für Python 2.6.1-Bytecode zu implementieren, damit sie eine JIT und verschiedene nette native Code- / GC- / Multi-Core-Optimierungen verwenden können. (Nettes Zitat: "Wir streben danach, keine Originalarbeit zu leisten, sondern so viel wie möglich aus den letzten 30 Jahren der Forschung zu verwenden.") Sie suchen nach einer 5-fachen Beschleunigung von CPython.
Dies beantwortet natürlich nicht Ihre unmittelbare Frage, sondern deutet auf ein "Schließen der Lücke" (falls vorhanden) in der Zukunft (hoffentlich) hin.
quelle
Das Schöne an Python ist heutzutage, wie gut es mit anderen Sprachen kommuniziert. Beispielsweise können Sie mit Jython sowohl Python als auch Java in derselben Tabelle haben. Natürlich unterstützt jython, obwohl es Java-Bibliotheken vollständig unterstützt, Python-Bibliotheken nicht vollständig. Aber es ist eine ideale Lösung, wenn Sie sich mit Java-Bibliotheken anlegen möchten. Sie können es sogar mit Java-Code ohne zusätzliche Codierung mischen.
Aber auch Python selbst hat einige Schritte vorgezogen. Siehe ctypes zum Beispiel, in der Nähe der C-Geschwindigkeit, direkte Zugriffe auf C-Bibliotheken, ohne den Komfort der Python-Codierung zu verlassen. Cython geht noch einen Schritt weiter und ermöglicht das einfache Mischen von C-Code mit Python-Code. Selbst wenn Sie sich nicht mit C oder C ++ anlegen möchten, können Sie weiterhin in Python codieren, aber statische Variablen verwenden, wodurch Ihre Python-Programme so schnell wie C-Apps werden . Cython wird übrigens von Google verwendet und unterstützt.
Gestern habe ich sogar Tools für Python gefunden, um C oder sogar Assembly (siehe CorePy) zu integrieren. Sie können nicht leistungsfähiger sein.
Python ist sicherlich eine sehr ausgereifte Sprache, die nicht nur auf sich selbst steht, sondern auch problemlos mit jeder anderen Sprache zusammenarbeiten kann. Ich denke, das macht Python auch in sehr fortgeschrittenen und anspruchsvollen Szenarien zu einer idealen Lösung.
Mit Python können Sie auf C / C ++, Java, .NET und viele andere Bibliotheken zugreifen, ohne dass zusätzliche Codierung erforderlich ist. Dadurch erhalten Sie auch eine Sprache, die die Codierung minimiert, vereinfacht und verschönert. Es ist eine sehr verlockende Sprache.
quelle
Mit Python weg, obwohl GWT perfekt zu der Art von App passt, die ich entwickle. JPA ist in Bezug auf GAE ziemlich durcheinander (z. B. keine @Embeddable und andere obskure, nicht dokumentierte Einschränkungen). Nachdem ich eine Woche verbracht habe, kann ich feststellen, dass sich Java im Moment bei GAE einfach nicht richtig anfühlt.
quelle
Ein zu berücksichtigender Gedanke sind die Frameworks, die Sie verwenden möchten. Nicht alle Frameworks auf Java-Seite eignen sich gut für Anwendungen, die auf App Engine ausgeführt werden, was sich etwas von herkömmlichen Java-App-Servern unterscheidet.
Eine zu berücksichtigende Sache ist die Startzeit der Anwendung. Bei herkömmlichen Java-Web-Apps müssen Sie nicht wirklich darüber nachdenken. Die Anwendung wird gestartet und dann einfach ausgeführt. Es spielt keine Rolle, ob der Start 5 Sekunden oder einige Minuten dauert. Mit App Engine kann es vorkommen, dass die Anwendung erst gestartet wird, wenn eine Anforderung eingeht. Dies bedeutet, dass der Benutzer wartet, während Ihre Anwendung gestartet wird. Neue GAE-Funktionen wie reservierte Instanzen helfen hier, aber überprüfen Sie zuerst.
Eine andere Sache sind die verschiedenen Einschränkungen, die GAE für Java hat. Nicht alle Frameworks sind zufrieden mit den Einschränkungen, welche Klassen Sie verwenden können, oder der Tatsache, dass Threads nicht zulässig sind oder dass Sie nicht auf das lokale Dateisystem zugreifen können. Diese Probleme sind wahrscheinlich leicht herauszufinden, wenn Sie nur über die GAE-Kompatibilität googeln.
Ich habe auch einige Leute gesehen, die sich über Probleme mit der Sitzungsgröße in modernen UI-Frameworks beschwert haben (nämlich Wicket). Im Allgemeinen tendieren diese Frameworks dazu, bestimmte Kompromisse einzugehen, um die Entwicklung unterhaltsam, schnell und einfach zu gestalten. Manchmal kann dies zu Konflikten mit den Einschränkungen der App Engine führen.
Ich begann zunächst mit der Entwicklung von GAE mit Java, wechselte dann aber aus diesen Gründen zu Python. Mein persönliches Gefühl ist, dass Python eine bessere Wahl für die App Engine-Entwicklung ist. Ich denke, Java ist mehr "zu Hause", zum Beispiel auf Amazon Elastic Beanstalk.
ABER mit App Engine ändern sich die Dinge sehr schnell. GAE ändert sich selbst und mit zunehmender Beliebtheit ändern sich auch die Frameworks, um seine Grenzen zu umgehen.
quelle