मैं एक रीयलटाइम मल्टीप्लेयर गेम पर काम कर रहा हूं जिसके लिए डेटाबेस की आवश्यकता होगी (खिलाड़ी प्रोफाइल, दोस्तों, अनलॉक, समाचार आदि जैसी सुविधाओं के लिए) यह एक मानक पीसी गेम है (ब्राउज़र-आधारित नहीं) और क्लाइंट-सर्वर का उपयोग करेगा आर्किटेक्चर। मैं डेटाबेस का उपयोग करने के लिए नया हूँ, और पिछले कुछ दिनों में कुछ शोध किए हैं जब मैं गर्म बहस पर ठोकर खाई: RDBMS NoSQL। वर्तमान में मैं NoSQL की ओर झुक रहा हूं, लेकिन प्रत्येक (RDBMS और NoSQL) के उपयोगों के बारे में पढ़ने के बाद, मुझे दोनों का उपयोग करने का लालच है। मुझे पता है कि यह अजीब लग सकता है, लेकिन मुझे अपनी स्थिति स्पष्ट करने दें:
मेरी टीम के पास एक साझा वेबहोस्टिंग पैकेज है जो असीमित mySQL स्टोरेज और बैंडविड्थ प्रदान करता है, एकमात्र कैविट यह है कि हम एक समय में केवल 25 कनेक्शन खोल सकते हैं (साझा होस्टिंग नियम)। मैं अपनी वेबसाइट के लिए इसका उपयोग करने का इरादा कर रहा हूं (समाचारों को पोस्ट करने के लिए एक विशिष्ट उपयोग कोई संदेह नहीं है), सामुदायिक सुविधाओं का समर्थन करने के लिए (जैसे टिप्पणी, प्रशंसक कला को अपलोड करना, आदि) और पसंद है। यह सब ठीक है और अच्छा है - लेकिन! यह वह जगह है जहाँ चीजें दिलचस्प हो जाती हैं ... मैं अपनी वेबसाइट पर इन-गेम पर पोस्ट की गई इस जानकारी को प्रदर्शित करना चाहता हूं। इसका मतलब मेरी वेबसाइट और मेरे खेल दोनों के लिए mySQL का उपयोग करना है। न्यूज पोस्ट और लाइक के अलावा, मैं चैट और सर्वर सूची जैसी चीजों के लिए इन-गेम का उपयोग करने की योजना बना रहा हूं। मैं उस 25-कनेक्शन-नियम के बारे में चिंतित हूं।
जो मुझे प्रश्न # 1 पूछने की ओर ले जाता है: क्या यह काम करेगा और क्या एक बेहतर विकल्प है?
अब इसके अलावा, मैंने पढ़ा है कि NoSQL कितना अच्छा प्रदर्शन करता है और रीयलटाइम गेम्स के लिए अनुकूल है (मैं गलत हो सकता है, मैं यहां पहुंचने के लिए एक विशाल RDBMS बनाम NoSQL लौ युद्ध के माध्यम से चला गया हूं और शायद जला दिया गया हूं)। मूल रूप से, मैं अपने गेम ऑब्जेक्ट डेटा के सभी के लिए MongoDB का उपयोग करना चाहूंगा।
और फिर से, यह उपयोगी होगा यदि मैं कुछ संदर्भ प्रदान करता हूं: मुझे एक होस्ट (मोंगोलैब) मिला है जो मुफ्त में 240 एमबी का मोंगबीडी पैकेज प्रदान करता है, जिसे मैं अपग्रेड करने के लिए आवश्यक होने तक उपयोग करने का इरादा रखता हूं। 240MB को देखते हुए, मैंने गणना की है कि मैं लगभग 60,000 खिलाड़ियों को स्टोर करने में सक्षम हो जाऊंगा (यदि प्रत्येक खिलाड़ी लगभग 4KB है और हम अन्य चीजों को अनदेखा कर सकते हैं जिन्हें संग्रहीत किया जा सकता है)। भंडारण स्थान, और भविष्य में अधिक भुगतान करना चाहिए (हमारा खेल सफल होना चाहिए) कोई समस्या नहीं है। एकमात्र कारण जो मैं वर्तमान में अपने सभी गेम ऑब्जेक्ट डेटा के लिए MongoDB का उपयोग करने का इरादा रखता हूं, वह यह है कि इस गेम ऑब्जेक्ट डेटा को कितनी बार एक्सेस किया जाएगा (जैसे कि जब भी कोई खिलाड़ी मारा जाता है, एक आइटम उठाता है, एक बंदूक फायर करता है, आदि) I स्ट्रेट फॉरवर्ड स्कीमा-फ्री डॉक्यूमेंट (जो गेम ऑब्जेक्ट डेटा को मैप करना आसान बनाते हैं) को भी पसंद करते हैं। मुझे ध्यान देना चाहिए कि, एक समय में,
मैं अपनी वेबसाइट में एक ही MongoDB का उपयोग करने का इरादा रखता हूं, खिलाड़ी प्रोफ़ाइल जानकारी प्रदर्शित करने के लिए (मैं पूरी निरंतरता से चिंतित नहीं हूं, खेल में अपडेट से कुछ देरी ठीक है)। जो मुझे मेरे दूसरे प्रश्न की ओर ले जाता है, प्रश्न # 2: क्या यह एक अच्छा विचार है या क्या मुझे कुछ बेहतर करना चाहिए?
खेल को इस तरह से एक स्टार्ट अप अनुभव होगा:
- (MongoDB) में क्लाइंट लॉग्स
- क्लाइंट इन-गेम होम पेज w / चैट रूम (MySQL) पर है
- क्लाइंट सर्वर सूची (MySQL) में जाता है
क्लाइंट एक सर्वर से जुड़ता है और उसमें खेलता है
सर्वर सभी खिलाड़ियों के लिए अद्यतन संचार (MongoDB)
यह सिर्फ वह तरीका है जिसकी मैंने कल्पना की थी कि यह काम करेगा। क्या यह आपके लिए अच्छा है, या क्या आपके पास इस योजना में सुधार किया जा सकता है?