AppEngine veritabanı (Java için) hakkında okudum daha yaygın şikayetlerden biri, "soğuk başlangıç zamanı" geldiğinde çok yavaş olmasıdır. Ne anlama geliyor? Endişelenmem gereken bir şey mi?AppEngine veritabanı "soğuk başlangıç zamanı" nedir?
cevap
Endişelenmeniz gereken bir şey.
Google App Engine, uygulamanızın belirli bir süre boyunca herhangi bir isteği olmadığında hizmet isteklerine yeni bir JVM atar. Veri deposunda "soğuk" dan - yani ilk kez bir JVM'de - bir kolun tutulması 5+ saniye kadar önemli bir zaman alabilir.
Veri deposunda bir tanıtıcınız olduğunda (normalde bir PersistenceManager
örneği), her şey iyi (JVM'nin ömrü için!).
DÜZENLEME: GAE'nin-Java taze JVM kadar Spinning
da yavaştır. http://code.google.com/appengine/docs/java/datastore/overview.html'u okuyun ve bir "kullanılabilirliği için bir Singleton sınıfı kullandıklarını göreceksiniz, çünkü bunlar" pahalı "olarak bir örnekleme işlemini açıklıyor.
Bunu kendiniz için test edebilirsiniz. Sadece "Merhaba Dünya!" Ifadesini döndüren GAE-Java'da yepyeni bir uygulama oluşturun. ve uygulamanın ilk isteğinin birkaç saniye sürdüğünü göreceksiniz.
PersistenceManagerFactory
için bir istek ekleyin ve ilk isteğin birkaç saniye sürdüğünü göreceksiniz.
DÜZENLEME DÜZENLEME:
http://stackoverflowanswers.appspot.com/helloworld
Ya anında göreceksiniz "Merhaba, Dünya 0" veya "Merhaba, Dünya xxxx": Şimdi izleme keyfi için bu testi yarattık
xxxx, MS'de, veri deposunda bir tanıtıcı elde etmek için ne kadar sürdüğü bir sayıdır. Veri mağazasındaki karmaşıklığın ve dizinlerin sayısının, diğer uygulamalardan bazılarına göre bu uygulamada daha hızlı olduğu için veri deposunda bir işlem yapmanın ne kadar sürdüğünü etkileyebileceğini düşünüyorum.
PMF, uygulama motoru belgelerinde sağlananın tam bir kopyasıdır.
javax.jdo:
@SuppressWarnings("serial") public class HelloWorldServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { long a = System.currentTimeMillis(); PersistenceManager p = PMF.get().getPersistenceManager(); long b = System.currentTimeMillis() - a; resp.setContentType("text/plain"); resp.getWriter().println("Hello, world "+b); } }
DÜZENLEME DÜZENLEME DÜZENLEME: her isteğiyle bir
PersistenceManagerFactory
başlatır ve şimdi 500 sunucu hataları atar ve günlüklerde böylecekodumu değiştirdi .JDOFatalUserException: Uygulama kodu, işlemleri isteğe bağlı bir PersistenceManagerFactory oluşturmayı denedi, ancak ile bu ad zaten var! PersistenceManagerFactory öğesinin örnekleri oluşturmak için oldukça yavaştır ve genellikle bir defadan fazla bir tane olmak üzere oluşturmak için gerekli değildir. Bunun yerine, bir tek kişilik oluşturun ve kodunuz boyunca 'u paylaşın. gerçekten PersistenceManagerFactory ( için en uygun olmayan bir paket için) oluşturmaya ihtiyaç duyarsanız, appengine.orm.disable.duplicate.pmf değerini ayarlayın.Bu hatayı önlemek için istisna sistem özelliği.
Uygulama motorundaki veri deposunda tanıtıcıdan yararlanmanın SLOW olduğu konusunda daha fazla kanıt sunmam gerektiğini sanmıyorum. Uygulamanızı hemen dağıtmayı planlıyorsanız
Bunun, veri deposuyla ilgisi olmadığını unutmayın - App Engine bir platformdur. –
Eh, iki el ele gider gibi görünüyor. App Engine'in JDO veya JPA kullanarak Bigtable veri mağazasının kendi uygulaması vardır. Veri deposu platformun bir parçasıdır. – Finbarr
finbarr, soğuk başlangıçların büyük gecikmesinin veri deposuyla bağlantı kurduğunu gösteren ölçümleriniz var mı? Gecikmenin bir JVM başlatması olduğunu sanmıştım. Onlar python çalışma zamanı da veri deposuna bir tanıtıcı almak gerekiyor ve aynı soğuk başlangıç sorunları yok. Bu bana veri tabanının yavaş, ama java veya java kütüphaneleri olmadığını düşünmemi sağlıyor. Örneğin, düşük düzeyli API'yi JDO'yu kullanarak kullanırsanız ne olur? –
- 1. Entity Framework başlangıç zamanı
- 2. Roslyn yavaş başlangıç zamanı
- 3. Soğuk Başlama Performansı WPF
- 4. Github Katkıları takvim günü başlangıç zamanı
- 5. IronPython başlangıç zamanı neden bu kadar yavaş?
- 6. Eğlenceli başlangıç projesi nedir?
- 7. Appengine
- 8. AppEngine
- 9. AppEngine
- 10. AppEngine Python
- 11. JSON Nesne - Soğuk Tekniği
- 12. İş parçacığı/BeginInvoke nedir? [Başlangıç]
- 13. Soğuk ve sıcak renkler için RGB aralığı?
- 14. Bir Beklenmeyen Soğuk Görev Oluşturun
- 15. Jersey'in AppEngine
- 16. AppEngine Günlük Sınırları
- 17. Uygulama soğuk başlangıç süresinin test edilmesi için Win7'de yeniden başlatmanın nasıl simüle edileceği
- 18. nhibernate oturumunun fabrika ayarlanması, webApp başlangıç zamanı gerçekten yavaş
- 19. Ethereum sözleşme değişkenlerinin başlangıç değeri nedir?
- 20. Python Etkileşimli Başlangıç Komut Dosyası'ndaki nedir?
- 21. Swift'in kadrolarının çalışma zamanı maliyeti nedir?
- 22. google appengine Google AppEngine bir dosyaya yazmaya çalışıyorum FileOutputStream
- 23. Bir program soğuk önbellekle nasıl başlatılır
- 24. Google'da giriş kancası Appengine
- 25. Appengine Blobstore - Video Streaming
- 26. AppEngine python'un send_email çalışmıyor
- 27. Grafik Veritabanı ve Ağ Veritabanı arasındaki fark nedir?
- 28. Veritabanı ile tam veritabanı oluşturma
- 29. Model biçiminde başlangıç değeri nasıl verilir
- 30. Başlatma değeri derleme zamanı veya çalışma zamanı olarak hesaplanır mı?
endişelenmelisiniz. Uygulama motoru ekibi, canlı bir JVM'yi ayırmanın bir yolu üzerinde çalışıyor. Böylece, neredeyse hiç yükleme isteğiniz olmayacak. –
Bunun neden endişelenmeniz gerektiğinden emin değilsiniz, ama bu harika bir haber. Şu anda çok az trafiği olan uygulamaların JVM eğrileri açısından gerçekten acı çektiği anlar. – Finbarr