문제

현재 Google App Engine은 Python & Java를 지원합니다. Java 지원은 덜 성숙합니다. 그러나 Java는 라이브러리 목록이 더 길고 특히 해당 코드를 작성하는 데 사용되는 언어에 관계없이 Java Bytecode를 지원하는 것으로 보입니다. 어떤 언어가 더 나은 성능과 더 많은 힘을 줄 것인가? 조언하십시오. 고맙습니다!

편집하다: http://groups.google.com/group/google-appengine-java/web/will-play-in-app-engine?pli=1

편집하다:"Power"라는 의미는 프레임 워크 외부에서 사용 가능한 라이브러리의 확장 성과 포함을 의미합니다. 그러나 파이썬은 순수한 파이썬 라이브러리 만 허용합니다.

도움이 되었습니까?

해결책

나는 편견이 있지만 (파이썬 전문가이지만 Java에서는 꽤 녹슬었지만 GAE의 파이썬 런타임은 현재 Java 런타임보다 더 진보되고 발전되어 있다고 생각합니다. .

일이 진행되는 방법은 물론 예측하기가 어렵습니다. Java 측에서 수요가 더 강할 것입니다 (특히 Java에 관한 것이 아니라 JVM 위에 자리 잡은 다른 언어도 EG PHP를 실행하는 방법입니다. 또는 앱 엔진의 루비 코드); 그러나 Python App Engine 팀은 Python의 발명가이자 놀랍도록 강력한 엔지니어 인 Guido van Rossum을 타는 이점이 있습니다.

유연성 측면에서, 이미 언급 한 바와 같이 Java 엔진은 Java뿐만 아니라 다른 언어로 만든 JVM 바이트 코드를 실행할 가능성을 제공합니다. 그 반대로, JavaScript를 혐오하지만 사용자의 브라우저에서 일부 코드를 실행 해야하는 경우 Java의 GWT (Java 수준의 코딩에서 JavaScript를 생성)는 Python-Side 대안보다 훨씬 풍부하고 발전합니다 (실제로 선택한 경우. Python, 당신은이 목적을 위해 JS를 직접 쓸 것입니다. Java GWT를 선택하면 JS를 쓰는 경우 사용 가능한 대안입니다).

라이브러리 측면에서는 기존 Python보다 기존 Java 라이브러리를 간단한 재사용을 방해 할만 큼 충분히 제한되어 있습니다 (스레드, 사용자 정의 클래스 로더, JNI, 관계형 DB 없음). 파이썬 런타임의 유사한 제한에 의해 라이브러리가 유사하게 방해받습니다.

성능 측면에서, 나는 그것이 당신의 작업에 대해 벤치마킹해야하지만, 그것은 세탁이라고 생각합니다. App Engine이기 때문에 큰 시작 시간과 메모리 발자국을 할인하는 고도로 최적화 된 JIT 기반 JVM 구현의 성능에 의존하지 마십시오. 환경은 매우 다릅니다 (시작 비용은 자주 지불됩니다. 앱의 인스턴스가 시작, 중지, 다른 호스트로 이동하는 등 모든 것이 귀하에게 전적으로 지불됩니다. 이러한 이벤트는 일반적으로 JVM보다 Python 런타임 환경에서 훨씬 저렴합니다).

XPath/XSLT 상황 (완화 적으로 ...)은 양쪽에서 정확히 완벽하지는 않지만 한숨을 쉬지 만 JVM에서는 덜 나쁘다 고 생각합니다 (분명히 Saxon의 실질적인 하위 집합이 실행 될 수 있습니다. , 약간의주의를 기울여). 나는 그것이 문제를 여는 것이 가치가 있다고 생각합니다 AppEngine 문제 타이틀에 XPath 및 XSLT가 포함 된 페이지 - 지금은 특정 라이브러리를 요구하는 문제 만 있습니다. 근시입니다. 나는 XPath/XSLT가 Python 및/또는 Java를 위해 얼마나 좋은 XPath/XSLT가 구현되는지에 관심이 없습니다. 내가 그것을 사용하면. (특정 라이브러리는 기존 코드의 마이그레이션을 용이하게 할 수 있지만, 이는 "XSLT 변환을 빠르게 적용하는 것"과 같은 작업을 수행하는 것보다 덜 중요합니다!-). 나는 잘 표현된다면 (특히 언어 독립적 인 방식으로) 그런 문제를 제시한다는 것을 알고 있습니다.

마지막으로 : 일부 버전의 앱 (동일한 데이터 스토어 사용)을 가질 수 있음을 기억하십시오. 일부는 Python 런타임으로 구현되고 일부는 Java 런타임으로 구현되며 "Default/Active와는 다른 버전에 액세스 할 수 있습니다. "명백한 URL이있는 하나. 그래서 당신은 두 파이썬을 가질 수 있습니다 그리고 Java Code (앱의 다른 버전에서) 동일한 데이터 저장소를 사용하고 수정하여 더 많은 유연성을 부여합니다 (Foobar.appspot.com과 같은 "Nice"URL 만 있으면 액세스에만 중요합니다. 브라우저의 대화식 사용자에 의해 ;-) 상상합니다.

다른 팁

Python 및 Java 성능의 변경 사항은이 앱을 시청하십시오.

http://gaejava.appspot.com/(편집 : 사과, 링크가 이제 깨졌습니다. 그러나 마지막으로 실행되는 것을 보았을 때 파라가 여전히 적용되었습니다)

현재 Python과 Java에서 저수준 API를 사용하는 것은 Java의 JDO보다 빠릅니다. 이 간단한 테스트를 위해. 최소한 기본 엔진이 변경되면 해당 앱은 성능 변경을 반영해야합니다.

다른 플랫폼에서 이러한 VM을 실행 한 경험을 바탕으로 Python보다 Java에서 더 많은 원시 성능을 얻을 수 있다고 말합니다. 그러나 Python의 판매 포인트를 과소 평가하지 마십시오. Python 언어는 코드 라인 측면에서 훨씬 더 생산적입니다. 일반적인 계약은 Python이 동등한 Java 프로그램의 코드의 3 분의 1이 필요하지만 읽을 수있게되거나 더 많이 남아 있습니다. 이 이점은 명시적인 컴파일 단계없이 즉시 코드를 실행할 수있는 기능을 곱합니다.

사용 가능한 라이브러리와 관련하여 광범위한 Python 런타임 라이브러리의 많은 부분이 Java와 마찬가지로 상자 밖으로 작동합니다. 인기있는 Django 웹 프레임 워크 (http://www.djangoproject.com/)도 AppEngine에서 지원됩니다.

'Power'와 관련하여, 당신이 의미하는 바를 알기는 어렵지만, Python은 많은 다른 도메인, 특히 웹에서 사용됩니다 : YouTube는 Sourceforge (지난 주에 따라)와 같이 Python으로 작성됩니다.

2013 년 6 월 : 이 비디오는 Google 엔지니어의 매우 좋은 답변입니다.

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

tldr; 이다:

  • 당신과 당신의 팀이 가장 생산적인 언어를 선택하십시오.
  • 생산을 위해 무언가를 만들고 싶다면 : Java 또는 Python (Go Not Go)
  • 큰 팀과 복잡한 코드 기반이있는 경우 : Java (정적 코드 분석 및 리팩토링으로 인해)
  • 빠르게 반복하는 소규모 팀 : 파이썬 (Java도 괜찮지 만)

파이썬과 자바를 결정할 때 고려해야 할 중요한 질문은 각 언어에서 데이터 저장소를 사용하는 방법 (그리고 원래 질문에 대한 대부분의 다른 각도는이 주제에서 이미 잘 다루었습니다).

자바를 위해, 표준 방법은 JDO 또는 JPA를 사용하는 것입니다. 이들은 이식성에 적합하지만 데이터 스토어에 적합하지 않습니다.

저수준 API를 사용할 수 있지만 일상적인 사용에는 너무 낮은 수준이므로 제 3 자 라이브러리를 구축하는 데 더 적합합니다.

파이썬의 경우 응용 프로그램에 데이터 저장소에 쉽게 접근 할 수있는 응용 프로그램을 제공하기 위해 특별히 설계된 API가 있습니다. 휴대용이 아니기 때문에 GAE에 잠그는 것을 제외하고는 훌륭합니다.

다행히도 두 언어 모두에 대해 나열된 약점에 대한 솔루션이 개발되고 있습니다.

자바를 위해, 낮은 수준 API는 데이터 스토어에 훨씬 더 적합한 지속성 라이브러리를 개발하는 데 사용됩니다. 예는 다음과 같습니다 시에나 프로젝트, 그리고 객관화.

나는 최근에 Objectify를 사용하기 시작했으며 사용하기 쉽고 데이터 스토어에 적합하다는 것을 알게되었으며 인기가 커지는 것은 좋은 지원으로 이어졌습니다. 예를 들어, Objectify는 Google의 새로운 클라우드 엔드 포인트 서비스에서 공식적으로 지원됩니다. 반면에 Objectify는 데이터 스토어와 만 작동하는 반면 Siena는 Datastore에서 '영감을 얻은'것이지만 다양한 SQL 데이터베이스 및 NOSQL 데이터 저장소와 함께 작동하도록 설계되었습니다.

파이썬의 경우, GAE에서 Python gae Datastore API를 사용할 수 있도록 노력하고 있습니다. 한 가지 예는 Google이 SDK와 함께 사용하기 위해 출시 한 SQLITE 백엔드이지만, 이것이 제작 준비가 된 것으로 성장할 의심의 여지가 있습니다. 그만큼 Typhoonae 프로젝트는 아마도 더 많은 잠재력을 가지고 있지만, 그것이 아직 생산 준비가되었다고 생각하지 않습니다 (내가 틀렸다면 나를 수정하십시오).

이 대안 중 하나에 대한 경험이 있거나 다른 사람을 알고 있다면 의견에 추가하십시오. 개인적으로, 나는 GAE DataStore를 정말 좋아합니다. AWS SimpleDB보다 상당한 개선이된다는 것을 알게되었습니다. 따라서 사용의 일부 문제를 완화하기위한 이러한 노력의 성공을 원합니다.

나는 GAE를 위해 Java를 강력히 추천하고 있는데 여기에 다음과 같은 이유가 있습니다.

  1. 성능 : Java는 파이썬보다 더 빠릅니다.
  2. 파이썬 개발은 타사 라이브러리가 부족하다는 압력을 받고 있습니다. 예를 들어, Python/gae 용 XSLT는 전혀 없습니다. 거의 모든 파이썬 라이브러리는 C 바인딩입니다 (그리고 GAE는 지원하지 않습니다).
  3. Memcache API : Java SDK는 Python SDK보다 더 흥미로운 능력을 가지고 있습니다.
  4. DataStore API : JDO는 매우 느리지 만 Native Java Datastore API는 매우 빠르고 쉽습니다.

지금은 개발에 Java/GAE를 사용하고 있습니다.

식별 한대로 JVM을 사용해도 Java 언어를 사용하는 것으로 제한되지 않습니다. JVM 언어 및 링크 목록을 찾을 수 있습니다. 여기. 하지만, Google App Engine은 일반적인 Java SE 세트에서 사용할 수있는 클래스 세트를 제한하며 이러한 구현이 App Engine에서 사용할 수 있는지 조사하려고합니다.

편집 : 그런 목록을 찾았습니다

파이썬의 성능에 대해서는 언급 할 수 없습니다. 그러나 JVM은 실행 시간 동안 코드를 동적으로 컴파일하고 최적화 할 수있는 능력을 고려할 때 매우 강력한 플랫폼 성능 저하입니다.

궁극적으로 성능은 응용 프로그램의 수행 및 코딩 방법에 따라 다릅니다. 추가 정보가 없으면이 영역에서 더 이상 포인터를 줄 수는 없다고 생각합니다.

나는 파이썬/django sdk가 얼마나 깨끗하고, 간단하며, 문제가 없는지 놀랐습니다. 그러나 나는 더 많은 JavaScript를 시작 해야하는 상황에 빠지기 시작했고 GWT 및 기타 Java 유틸리티를 활용하고 싶을 것이라고 생각했습니다. 나는 GAE Java 튜토리얼을 반으로 겪었고 일식 구성 문제, JRE 버전염, Java의 마음을 사로 잡는 복잡성, 혼란스럽고 깨진 튜토리얼 등 한 가지 문제가있었습니다. 이 사이트를 확인하고 여기에서 링크 된 다른 사람들이 저를 위해 그것을 막았습니다. 나는 Python으로 돌아가서 잠옷을 조사하여 JavaScript 문제를 돕습니다.

나는 대화에 조금 늦었지만 여기에 내 2 센트가 있습니다. 나는 파이썬과 자바 중에서 선택하는 데 어려움을 겪었습니다. 두 언어 모두에 정통했기 때문입니다. 우리 모두 알다시피, 두 가지 모두에 대한 장점과 단점이 있으며, 귀하의 요구 사항과 프로젝트에 가장 적합한 프레임 워크를 고려해야합니다.

이 유형의 딜레마에서 보통하는 것처럼, 나는 내 결정을 뒷받침 할 숫자를 찾습니다. 나는 여러 가지 이유로 Python과 함께 가기로 결정했지만 내 경우에는 팁 포인트 인 한 줄거리가있었습니다. Github에서 "Google App Engine"을 검색하면 2014 년 9 월, 다음 그림을 찾을 수 있습니다.

GAE Language Stats

이 숫자에는 많은 편견이있을 수 있지만 전반적으로 GAE Java 리포지토리보다 GAE 파이썬 리포지토리가 3 배 더 많습니다. 뿐만 아니라 "별의 수"로 프로젝트를 나열하면 대부분의 파이썬 프로젝트가 최상위에 나타납니다 (파이썬이 더 길어 졌다는 점을 고려해야합니다). 나에게 이것은 커뮤니티 채택 및 지원, 문서 및 오픈 소스 프로젝트의 가용성을 고려하기 때문에 Python에 대한 강력한 사례를 만듭니다.

좋은 질문이며, 많은 반응이 울타리의 양쪽에 장단점에 대한 좋은 견해를 주었다고 생각합니다. 파이썬과 JVM 기반 Appengine을 모두 시도했습니다 (제 경우에는 사용중인 경우 Gaelyk 이는 Appengine 용으로 구축 된 그루비 애플리케이션 프레임 워크입니다). 플랫폼에서의 성능에 관해서는, 얼굴을 쳐다보기 전까지는 고려하지 않은 한 가지는 울타리의 Java 측에서 발생하는 "로딩 요청"의 의미입니다. 그루비를 사용할 때 이러한 로딩 요청은 살인자입니다.

나는 주제에 대한 게시물을 모았다 (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 및 다양한 Native Code/GC/Multi-Core Opminations를 사용할 수 있습니다. (좋은 인용문 : "우리는 가능한 한 30 년의 연구를 가능한 한 많이 사용하는 대신 원래의 작업을하지 않으려 고 열망합니다.") 그들은 Cpython에 대한 5 배 속도를 찾고 있습니다.

물론 이것은 당신의 즉각적인 질문에 대답하지는 않지만 앞으로 (희망적으로) "갭의 폐쇄"(있는 경우)를 지적합니다.

오늘날 Python의 아름다움은 다른 언어와 얼마나 잘 전달되는지입니다. 예를 들어 Jython과 동일한 테이블에 Python과 Java를 모두 사용할 수 있습니다. 물론 Jython은 Java 라이브러리를 완전히 지원하더라도 완전히 파이썬 라이브러리를 지원하지 않습니다. 그러나 Java 라이브러리를 엉망으로 만들고 싶다면 이상적인 솔루션입니다. 심지어 추가 코딩없이 Java 코드와 혼합 할 수도 있습니다.

그러나 파이썬 자체조차도 몇 가지 단계를 막았습니다. 예를 들어, C 속도 근처의 CTypes를 참조하십시오. C 속도는 Python 코딩의 편안함을 남기지 않고이 모든 C 라이브러리로 직접 ACCE를 참조하십시오. Cython은 한 걸음 더 나아가서 C 코드를 Python 코드와 쉽게 혼합하거나 C 또는 C ++를 엉망으로 만들지 않더라도 여전히 Python에서 코딩 할 수 있지만 통계 유형 변수를 사용하여 C APPS만큼 Python 프로그램을 빠르게 만들 수 있습니다. . Cython은 Google이 사용하고 지원합니다.

어제 나는 파이썬이 인라인 C 또는 어셈블리 (Corepy 참조)에 대한 도구를 찾았습니다 (Corepy 참조).

파이썬은 반드시 매우 성숙한 언어이며, 그 자체로 서있을뿐만 아니라 다른 언어로 쉽게 뒷받침 할 수 있습니다. 나는 이것이 매우 진보되고 까다로운 시나리오에서도 Python을 이상적인 솔루션으로 만드는 것이라고 생각합니다.

Python을 사용하면 C/C ++, Java, .NET 및 거의 제로 추가 코딩으로 Acess를 가질 수 있습니다. 코딩을 최소화하고 단순화하고 아름답게하는 언어도 제공합니다. 매우 유혹적인 언어입니다.

GWT가 내가 개발하고있는 앱의 종류와 완벽하게 어울리는 것처럼 보이지만 파이썬과 함께 사라졌습니다. JPA는 gae에 꽤 엉망이되었습니다 (예 : @embeddable 및 기타 모호한 비 문서 제한). 일주일을 보냈을 때, 나는 Java가 지금 Gae에 대해 옳지 않다고 말할 수 있습니다.

하나는 당신이 사용하려는 프레임 워크입니다. Java 측의 모든 프레임 워크가 App Engine에서 실행되는 응용 프로그램에 적합한 것은 아니며, 이는 기존 Java 앱 서버와 다소 다릅니다.

고려해야 할 것은 응용 프로그램 시작 시간입니다. 전통적인 Java 웹 앱을 사용하면 이에 대해 생각할 필요가 없습니다. 응용 프로그램이 시작된 다음 실행됩니다. 스타트 업에 5 초 또는 몇 분이 걸더라도 실제로는 중요하지 않습니다. 앱 엔진을 사용하면 요청이 들어올 때만 애플리케이션이 시작된 상황에서 끝날 수 있습니다. 이는 응용 프로그램이 부팅되는 동안 사용자가 대기하는 것을 의미합니다. 예약 된 인스턴스와 같은 새로운 GAE 기능은 여기에서 도움이되지만 먼저 확인하십시오.

또 다른 것은 Java의 다른 한계입니다. 모든 프레임 워크가 사용할 수있는 클래스 또는 스레드가 허용되지 않거나 로컬 파일 시스템에 액세스 할 수 없다는 사실에 대한 제한에 만족하는 것은 아닙니다. 이러한 문제는 GAE 호환성에 대한 인터넷 검색으로 쉽게 찾을 수 있습니다.

또한 일부 사람들이 현대 UI 프레임 워크 (개찰)에서 세션 규모에 대한 문제에 대해 불평하는 것을 보았습니다 (즉, 개찰). 일반적으로 이러한 프레임 워크는 개발을 재미 있고 빠르며 쉽게 만들기 위해 특정 트레이드 오프를 수행하는 경향이 있습니다. 때때로 이것은 앱 엔진 제한과 충돌 할 수 있습니다.

나는 처음에 Java와 함께 GAE 작업을 시작했지만 이러한 이유 때문에 Python으로 전환했습니다. 나의 개인적인 느낌 파이썬은 앱 엔진 개발에 더 나은 선택입니다. 예를 들어 Amazon의 탄성 Beanstalk에서 Java가 더 "집에서"라고 생각합니다.

하지만 앱 엔진을 사용하면 상황이 매우 빠르게 변하고 있습니다. GAE는 스스로 변화하고 있으며 더 인기가 높아짐에 따라 프레임 워크도 그 한계를 중심으로 변화하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top