ऐपइंजिन डेटाबेस (जावा के लिए) के बारे में मैंने जो अधिक सामान्य शिकायतें पढ़ी हैं, उनमें से एक यह है कि जब यह "ठंडा प्रारंभ समय" आता है तो यह बेहद धीमा होता है। इसका क्या मतलब है? और क्या यह कुछ है जिसके बारे में मुझे चिंतित होना चाहिए?AppEngine डेटाबेस "ठंडा प्रारंभ समय" क्या है?
उत्तर
ऐसा कुछ है जिसके बारे में आपको चिंतित होना चाहिए।
Google App Engine सेवा अनुरोधों के लिए एक नया JVM स्पिन करता है जब आपके ऐप को किसी निश्चित समय अवधि के लिए कोई अनुरोध नहीं होता है। "ठंड" से डेटास्टोर पर एक हैंडल प्राप्त करना - यानी एक जेवीएम में पहली बार - 5+ सेकेंड तक काफी समय ले सकता है।
आपके पास डेटास्टोर पर एक हैंडल होने के बाद (आमतौर पर PersistenceManager
का उदाहरण), सब ठीक है (JVM के जीवन के लिए!)।
संपादित करें:
GAE-जावा में एक ताजा JVM ऊपर स्पिनिंग भी धीमी है। http://code.google.com/appengine/docs/java/datastore/overview.html पढ़ें और आप देखेंगे कि वे PersistenceManagerFactory
की उपलब्धता के लिए सिंगलटन क्लास का उपयोग करते हैं, क्योंकि वे एक को "महंगा" के रूप में तत्काल करने के संचालन का वर्णन करते हैं।
आप इसे अपने लिए जांच सकते हैं। जीएई-जावा पर एक नया नया एप्लीकेशन बनाएं जो केवल "हैलो वर्ल्ड" लौटाता है! और आप पाएंगे कि एप्लिकेशन के पहले अनुरोध में कई सेकंड लगते हैं।
PersistenceManagerFactory
के लिए एक अनुरोध जोड़ें और आप पाएंगे कि पहला अनुरोध कुछ सेकंड अधिक लेता है।
संपादित:
मैं अब आपके दृश्य मनोरंजन के लिए इस परीक्षा में बनाया है:
http://stackoverflowanswers.appspot.com/helloworld
आप या तो तुरन्त देखेंगे "Hello, world 0" या "हैलो, दुनिया xxxx" जहां xxxx एमएस में एक गिनती है जो डेटास्टोर पर एक संभाल पाने में कितना समय लगा। मुझे लगता है कि डेटास्टोर में इंडेक्स की जटिलता और संख्या का प्रभाव डेटास्टोर पर एक संभाल पाने में कितना समय लगता है, क्योंकि यह मेरे कुछ अन्य ऐप्स की तुलना में इस ऐप में तेज है।
पीएमएफ ऐप इंजन दस्तावेज़ों में प्रदान की गई एक की एक सटीक प्रति है।
@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);
}
}
संपादित करें संपादित:
मैं अपने कोड बदल इतना है कि यह प्रत्येक अनुरोध के साथ एक PersistenceManagerFactory
को दर्शाता है और अब यह 500 सर्वर त्रुटियों फेंकता है, और लॉग में:
javax.jdo .JDOFatalUserException: आवेदन कोड ने पर्सिस्टेंस मैनेजर फैक्टरी को लेनदेन-वैकल्पिक नामित करने का प्रयास किया, लेकिन वाला यह नाम पहले से मौजूद है! PersistenceManagerFactory के बनाने के लिए बेहद धीमे हैं और आमतौर पर एक दिए गए नाम के साथ एक बनाने के लिए आवश्यक नहीं है। इसके बजाय, एक सिंगलटन बनाएं और अपने कोड में साझा करें। यदि आप वास्तव में डुप्लिकेट पर्सिस्टेंस मैनेजर फैक्ट्री (जैसे एक unittest suite के लिए) बनाने की आवश्यकता है, तो appengine.orm.disable.duplicate.pmf सेट करें।इस त्रुटि से बचने के लिए अपवाद सिस्टम प्रॉपर्टी।
मुझे नहीं लगता कि मुझे ऐप इंजन में डेटास्टोर पर हैंडल प्राप्त करने का कोई और सबूत प्रदान करने की आवश्यकता है।
ध्यान दें कि इसका डेटास्टोर से कोई लेना-देना नहीं है - ऐप इंजन एक मंच है। –
ठीक है, ऐसा लगता है कि दोनों हाथ में हैं। ऐप इंजन का जेडीओ या जेपीए का उपयोग करके बिगटेबल डाटास्टोर का अपना कार्यान्वयन है। डेटास्टोर मंच का हिस्सा है। – Finbarr
फिनबर, क्या आपके पास माप है कि ठंड शुरू होने की बड़ी देरी डेटास्टोर से कनेक्शन हो रही है? मैंने सोचा कि देरी एक जेवीएम शुरू करने से थी। वे पायथन रनटाइम को डेटास्टोर को एक हैंडल प्राप्त करने की भी आवश्यकता होती है, और इसमें ठंडा प्रारंभिक समस्याएं नहीं होती हैं। इससे मुझे लगता है कि यह डेटाबेस ही धीमा नहीं है, बल्कि जावा या जावा पुस्तकालय है। उदाहरण के लिए, यदि आप जेडीओ का उपयोग कर निम्न स्तर एपीआई बनाम उपयोग करते हैं तो क्या होता है? –
- 1. एप्लिकेशन को ठंडा-प्रारंभ समय परीक्षण के लिए Win7 में रीबूट अनुकरण कैसे करें
- 2. AppEngine
- 3. स्थानीय विकास डेटाबेस में AppEngine डेटाबेस से निर्यात करें?
- 4. Appengine
- 5. AppEngine
- 6. AppEngine
- 7. Appengine
- 8. AppEngine
- 9. AppEngine
- 10. किसी डेटाबेस में, क्या प्रारंभ समय समाप्ति तिथि, या प्रारंभ तिथि और समय की अवधि के रूप में समय अवधि को स्टोर करना बेहतर है?
- 11. "प्रारंभ समय" TED वीडियो
- 12. Google AppEngine
- 13. google appengine
- 14. Google AppEngine
- 15. प्रारंभ समय और समाप्ति समय JMeter समयबद्धक
- 16. कुछ ठंडा सिल्वरलाइट चार्ट डेमो
- 17. Google AppEngine
- 18. AppEngine dev_appserver.py
- 19. Google AppEngine
- 20. जावा Appengine
- 21. Google AppEngine
- 22. Google AppEngine
- 23. एक गिट शाखा को ठंडा करना
- 24. Google Appengine Ndb GQL क्वेरी अधिकतम सीमा क्या है?
- 25. AppEngine मॉडल Memcaching करने का सबसे अच्छा तरीका क्या है?
- 26. डेटाबेस क्वेरी समय जटिलता
- 27. AppEngine - मौजूदा संस्थाओं
- 28. AppEngine Search API
- 29. AppEngine: चरण-दर-चरण डिबगिंग
- 30. डेटा माइग्रेशन और AppEngine
यदि आप अभी अपने ऐप को तैनात करने की योजना बना रहे हैं तो आपको चिंतित होना चाहिए। ऐप इंजन टीम एक लाइव जेवीएम को आरक्षित करने के साधनों पर काम कर रही है ताकि आपके पास कभी-कभी लोडिंग अनुरोध नहीं हों। –
यह सुनिश्चित नहीं है कि इसका चिंता क्यों होनी चाहिए, लेकिन यह शानदार खबर है। यह इस समय बेकार है कि छोटे ट्रैफिक वाले ऐप्स वास्तव में जेवीएम स्पिनअप के मामले में पीड़ित हैं। – Finbarr