在Google App Engine上选择Java与Python

Vie*_*iet 161 python java google-app-engine google-cloud-platform google-app-engine-python

目前,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库.

Ale*_*lli 123

我有偏见(作为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 GWT是一个可用的替代,如果你厌恶编写JS).

就库而言,它几乎是一种洗劫 - JVM受到足够的限制(没有线程,没有自定义类加载器,没有JNI,没有关系数据库)来阻碍现有Java库的简单重用,与现有Python一样多或更多同样受到Python运行时类似限制的库也受到了阻碍.

在性能方面,我认为这是一个很好的方面,尽管你应该对自己的任务进行基准测试 - 不要依赖高度优化的基于JIT的JVM实现的性能,因为应用程序引擎可以减少它们的大启动时间和内存占用量.环境是非常不同的(启动成本将经常支付,因为您的应用程序的实例启动,停止,移动到不同的主机等等,所有这些事件对您来说都是如此 - 对于Python运行时环境而言,此类事件通常比使用JVM更便宜).

XPath/XSLT的情况(委婉的......)并不完美,无论是哪一方,叹息,虽然我认为它在JVM中可能稍微不那么糟糕(显然,撒克逊的大量子集可以运行,有些小心).我认为在其标题中使用XPath和XSLT在Appengine问题页面上打开问题是值得的- 现在只有问题要求特定库,这是近视:我真的不关心如何实现一个好的XPath/XSLT,对于Python和/或Java,只要我使用它.(特定库可以简化现有代码的迁移,但这不如能够以某种方式执行"快速应用XSLT转换"等任务重要! - ).我知道如果做得好(特别是在与语言无关的方式),我会明星这样的问题.

最后但同样重要的是:请记住,您可以拥有不同版本的应用程序(使用相同的数据存储区),其中一些是使用Python运行时实现的,有些是使用Java运行时,并且您可以访问与"default/active"不同的版本"一个有明确的URL.因此,您可以同时使用Python Java代码(在应用程序的不同版本中)使用和修改相同的数据存储,从而为您提供更大的灵活性(尽管只有一个具有"好"的URL,例如foobar.appspot.com -这可能对浏览器上的交互式用户访问很重要,我想;-).

  • GWT主要是一种客户端技术 - 无论你的后端是python还是java,你都可以使用它.你不得不通过JSON而不是GWT内置的RPC做rpc而失去一点语法糖,但如果你讨厌JS并且做python它仍然值得一看:) (9认同)
  • 有Pajamas(http://pyjs.org/)作为GWT的Pythonic替代品 - 它将采用Python代码并将其编译为Javascript,就像GWT为Java代码所做的那样. (9认同)
  • 只是给出"5年后"的观点.作为Java开发人员,我觉得GAE正在运行一个过时的堆栈.您将找不到[Java 8支持](https://code.google.com/p/googleappengine/issues/detail?id=9537),([他们正在运行Java 6](http://wanlatency.appspot. com/wantestgoogle)以及带有[Servlet API 2.5]的旧版Jetty 6容器(https://code.google.com/p/googleappengine/issues/detail?id=3091)),GAE中的所有Java支持都是虽然我喜欢GAE简单和Google强大的服务,但在升级其堆栈之前,我不推荐使用GAE for Java. (7认同)

Ric*_*son 72

观看此应用程序以了解Python和Java性能的变化:

http://gaejava.appspot.com/ (编辑:道歉,链接现在已经破了.但是当我看到它最后运行时仍然应用了para)

目前,对于这个简单的测试,Python和使用Java中的低级API比Java上的JDO更快.至少如果底层引擎发生变化,该应用程序应该反映性能变化.

  • 尽管如此,我发现这个测试很简单,毫无意义.对于它的价值......如果您使用Java/GAE,我建议使用低级API并避免使用JDO或任何其他框架.更重要的是,JDO让您"感觉"您正在使用关系数据库,这可能会"误导". (5认同)

Jud*_*y2K 18

根据在其他平台上运行这些虚拟机的经验,我会说你可能会获得比Java更多的Java原始性能.但是,不要低估Python的卖点:Python语言在代码行方面更有效率 - 一般的协议是Python需要等效Java程序的三分之一代码,同时保持可读性或更高可读性.这种好处乘以在没有显式编译步骤的情况下立即运行代码的能力.

关于可用的库,你会发现很多广泛的Python运行时库都是开箱即用的(就像Java一样).AppEngine也支持流行的Django Web框架(http://www.djangoproject.com/).

关于"权力",很难知道你的意思,但Python被用于许多不同的领域,尤其是网络:YouTube是用Python编写的,Sourceforge也是如此(截至上周).


Bij*_*jan 15

2013年6月:这个视频是谷歌工程师非常好的答案:

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

TLDR; 是:

  • 选择您和您的团队最高效的语言
  • 如果你想为生产构建一些东西:Java或Python(不是Go)
  • 如果你有一个庞大的团队和一个复杂的代码库:Java(因为静态代码分析和重构)
  • 快速迭代的小团队:Python(虽然Java也没关系)


Tom*_*Tom 9

在决定Python和Java之间需要考虑的一个重要问题是如何在每种语言中使用数据存储区(在本主题中已经很好地涵盖了原始问题的大多数其他角度).

对于Java,标准方法是使用JDO或JPA.这些非常适合移植,但不太适合数据存储.

可以使用低级API,但这对于日常使用来说太低了 - 它更适合构建第三方库.

对于Python,有一个专门设计的API,为应用程序提供对数据存储区的简单但强大的访问.它很棒,只是它不便携,所以它会锁定你进入GAE.

幸运的是,正在针对两种语言列出的弱点开发解决方案.

对于Java,低级API用于开发持久性库,这些库更适合数据存储区,然后是JDO/JPA(IMO).例子包括Siena项目Objectify.

我最近开始使用Objectify并且发现它非常易于使用且非常适合数据存储,并且它的日益普及已经转化为良好的支持.例如,Objectify由Google的新Cloud Endpoints服务正式支持.另一方面,Objectify仅适用于数据存储区,而Siena受数据存储区的"启发",但设计用于各种SQL数据库和NoSQL数据存储区.

对于Python,正在努力允许从GAE使用Python GAE数据存储API.一个例子是Google发布用于SDK的SQLite后端,但我怀疑他们是否打算将其扩展到生产就绪的东西.该TyphoonAE项目可能有更多的潜力,但我不认为这是生产准备好了吗或者(纠正我,如果我错了).

如果任何人有任何这些替代方案的经验或知道他人,请在评论中添加它们.就个人而言,我非常喜欢GAE数据存储 - 我发现它比AWS SimpleDB有了相当大的改进 - 所以我希望这些努力能够成功地减轻使用它的一些问题.


小智 7

我强烈推荐GAE的Java,这就是为什么:

  1. 性能:Java可能比Python更快.
  2. Python开发面临缺乏第三方库的压力.例如,根本没有Python/GAE的XSLT.几乎所有的Python库都是C绑定(GAE不支持这些绑定).
  3. Memcache API:Java SDK比Python SDK具有更多有趣的功能.
  4. 数据存储API:JDO非常慢,但本机Java数据存储API非常快速和简单.

我现在正在开发中使用Java/GAE.

  • -1表示#2和#3点的完全错误,#4没有任何意义. (7认同)

Bri*_*new 6

如您所知,使用JVM并不限制您使用Java语言.可以在此处找到JVM语言和链接的列表.但是,Google App Engine会限制您可以从普通Java SE集中使用的类集,并且您将需要调查是否可以在应用程序引擎上使用这些实现中的任何一个.

编辑:我看到你找到了这样的清单

我不能评论Python的性能.但是,JVM在性能方面是一个非常强大的平台,因为它能够在运行时动态编译和优化代码.

最终,性能取决于您的应用程序的功能以及编码方式.在没有进一步信息的情况下,我认为不可能在这方面提供更多指示.


mjh*_*jhm 6

我对Python/Django SDK的干净,简单和无问题感到惊讶.但是我开始遇到需要开始做更多JavaScript的情况,并且我想我可能想利用GWT和其他Java实用程序.我已经完成了GAE Java教程的一半,并且遇到了一个又一个问题:Eclipse配置问题,JRE版本问题,Java令人费解的复杂性,以及令人困惑且可能破坏的教程.检查这个网站和其他链接从这里为我赢得了它.我将回到Python,我将研究睡衣以帮助解决我的JavaScript挑战.


Jai*_*tes 5

我的谈话有点晚了,但这是我的两分钱.我真的很难在Python和Java之间进行选择,因为我精通这两种语言.众所周知,两者都有优点和缺点,您必须考虑您的要求和最适合您项目的框架.

正如我通常在这种困境中所做的那样,我寻找数字来支持我的决定.我决定使用Python有很多原因,但就我而言,有一个情节是引爆点.如果您在2014年9月在GitHub中搜索"Google App Engine" ,您会发现下图:

GAE语言统计

这些数字可能存在许多偏差,但总体而言,GAE Python存储库的数量是GAE Java存储库的三倍.不仅如此,如果按"星数"列出项目,您将看到大多数Python项目都出现在顶部(您必须考虑到Python已经存在的时间更长).对我而言,这为Python提供了强有力的理由,因为我考虑了社区采用和支持,文档以及开源项目的可用性.