2012-02-19 24 views
9

मैं संभवतः हजारों फ़ंक्शंस और डेटाबेस कॉल के साथ एक जटिल गेम विकसित करना चाहता हूं।सिंक्रोनस बनाम एसिंक्रोनस डेटाबेस एक्सेस

मुझे आश्चर्य है कि यह वास्तव में async में मेरे डेटाबेस प्रश्नों को करना आवश्यक है या नहीं। यह कोड का दर्द है, और मेरे सभी कार्यों को स्वच्छ return विधि के बजाय कॉलबैक का उपयोग करने की आवश्यकता होगी। क्या यह एक सामान्य दृष्टिकोण है?

async में इन कॉल प्रक्रियाओं कोडिंग कर रहे हैं वास्तव में है कि बहुत तेजी से, एक MySQL डेटाबेस पर विचार एक समय में एक ही प्रश्न?

+0

"MySQL डेटाबेस एक समय में एक ही क्वेरी को संसाधित करता है" - प्रति कनेक्शन। MySQL प्रत्येक कनेक्शन के लिए नए धागे को जन्म देता है, कम से कम कनेक्शन होने पर mysql बॉक्स पर कोर की संख्या प्रदर्शन में वृद्धि करनी चाहिए। –

+1

यदि आप async प्रोग्रामिंग के गुणों के बेचे गए हैं तो node.js पर विचार क्यों करें? कृपया सुनिश्चित करें कि आप उचित कारण के बिना सिर्फ एक और प्रशंसक नहीं हैं, कृपया वीडियो देखें http://www.youtube.ug/watch?v=bzkRVzciAZg –

उत्तर

11

जब तक कुछ हाल ही में Node.JS में काफी बदलाव आ गया है, तो आप काफी के लिए डेटाबेस वास्तव में अपने प्रदर्शन छोड़ देंगे async डेटाबेस का उपयोग का उपयोग करने के साथ-साथ के बाद से सभी अपने उपयोगकर्ता अनुरोधों पैमाने पर करने के इंतज़ार कर one single thread पर अमल है और तालमेल होगा मजबूर कर रहे हैं । यदि कोई उपयोगकर्ता धीमा ऑपरेशन करता है, तो अन्य सभी उपयोगकर्ताओं को इसे पूरा होने तक प्रतीक्षा करनी होगी।

Node.js वास्तव में एक async कार्यक्रम चालित प्रवाह के लिए बनाया गया है, तो आप ज्यादा बेहतर यह आसपास काम कर रहे तुलना में यह काम करने के साथ प्रदर्शन मिलेगा।

0

डेटाबेस इंजन + ट्रांसमिशन समय की गति काफी समान होगी। मुद्दा यह है कि एसिंक कॉल कॉलर को अवरुद्ध नहीं करते हैं। इस प्रकार async arch किसी भी "रीयलटाइम-आईएसएच" सिस्टम के लिए जाने का तरीका है जिसे अन्य इनपुट के लिए अत्यधिक उत्तरदायी होने की आवश्यकता है। (इस तरह के खेल है जो हमेशा मानव के लिए बहुत संवेदनशील होना चाहिए के रूप में।)

1

प्रश्नों MySQL में डेटाबेस स्तर पर पंक्ति में लग जाएँगे। यदि आप अपने कुछ डेटा के लिए मोंगो डीबी का उपयोग करने के बारे में सोच सकते हैं तो बहुत अधिक विकल्प हैं।

3

असीमित अनुरोध सिंक्रोनस से अधिक तेज़ नहीं हैं, इससे कोई फर्क नहीं पड़ता कि आप उन्हें कैसे करते हैं, फिर भी वे वही सटीक चीज करते हैं। केवल यही परिवर्तन है कि आप अनुरोध पर अवरुद्ध हैं या नहीं।

जब आप एक तुल्यकालिक विधि है कि किए गए अनुरोध अनुरोध की वापसी के लिए इंतजार कर इसके निष्पादन बंद हो जाएगा, जब कि वह अपने निष्पादन के साथ जारी रहेगा के माध्यम से मिला है साथ जाना। हालांकि एसिंक्रोनस अनुरोध का उपयोग करते समय, अनुरोध को पूरा करने की प्रतीक्षा करने की कोई आवश्यकता नहीं है, आप इसे चालू रख सकते हैं और जब यह किया जाता है तो कॉलबैक पर कॉल किया जाएगा।

एक और बात यह है कि आमतौर पर डेटाबेस बाधा है जब एप्लिकेशन डीबीएमएस को बहुत सी कॉल कर रहा है, क्योंकि आप डीबीएमएस से लोड करने के लिए कम कैशिंग का उपयोग करने पर विचार करना चाहेंगे।

1

तरह Nitzan, आपको पता होना चाहिए कि "अतुल्यकालिक अनुरोध तुल्यकालिक लोगों की तुलना में तेजी नहीं हैं, चाहे कितना आप उनसे क्या वे अभी भी एक ही सटीक बात करते हैं।"

कोई भी बारे में बात की है, लेकिन अगर वहाँ उन का एक बहुत और बहुत सारे अनुरोधों पर हैं, तो आप डेटाबेस का उपयोग को सीमित करने के अन्य समाधान है:

बनाना कैश फ़ाइलें

और उपयोगकर्ताओं द्वारा उन्हें अपडेट कार्रवाई या सीआरओएन कार्यों द्वारा।

  • उपयोगकर्ता जानकारियां
  • उपयोगकर्ता अलर्ट
  • उपयोगकर्ता कार्यों
  • उपयोगकर्ता सूची ...

रखता डेटाबेस प्रक्रिया

कुछ बारम्बार अनुरोध आप उन्हें MySQL में शेयर कर सकते हैं। उनको उपयोगकर्ता अनुरोध से तेज़ी से निष्पादित किया जाएगा।

संबंधित मुद्दे