noSQL - क्या यह वेब आधारित खेल के लिए एक वैध विकल्प है? [बन्द है]


20

एक अवसर और ऊब से, एक दोस्त और मैंने एक वेब आधारित खेल बनाने का फैसला किया। यह पहला 'गेम' है जिसे मैं बनाऊंगा, क्योंकि आमतौर पर मैं django में वेब ऐप्स प्रोग्राम करता हूं।

मैंने गेम के लिए एक ही फ्रेमवर्क का उपयोग करने का विकल्प चुना है, लेकिन मैं डेटा स्टोरेज के बारे में पूरी तरह से निश्चित नहीं हूं, क्योंकि मैं भविष्य की आवश्यकताओं और डीबी से संबंधित मुद्दों का पूर्वाभास नहीं कर सकता। हाल ही में, noSQL आंदोलन बल प्राप्त कर रहा है और मैं उस क्षेत्र का पता लगाना चाहूंगा।

इसलिए मेरे पास निम्नलिखित प्रश्न हैं:

  • क्या एक noSQL डेटास्टोर (दस्तावेज़-आधारित, जैसे MongoDB) वेब-आधारित गेम के लिए उपयुक्त होगा?
  • ऐसे कौन से मुद्दे हैं जो एक पारंपरिक RDBMS, जैसे MySQL का उपयोग करके उत्पन्न हो सकते हैं?
  • MongoDB वाले उपयोगकर्ताओं के बीच गेमप्ले के दौरान या क्रोन जॉब्स जैसी समयबद्ध घटनाओं पर बीमा डेटा की संगति कैसे करें?

गेम अवलोकन: विशिष्ट साहसिक खेल, जिसमें खिलाड़ी राक्षसों से लड़ते हैं और आइटम प्राप्त करते हैं और ऐसे।

  • कुछ डेटा सभी खिलाड़ियों में स्थिर हैं: आइटम, हथियार, पोशन, मैप्स आदि।
  • खिलाड़ी से जुड़े कुछ डेटा: इन्वेंट्री, मेट्रिक्स (सांख्यिकी), प्रगति, आदि।
  • एक खिलाड़ी को किसी अन्य खिलाड़ी के आंकड़े और स्थिति को जानने की आवश्यकता हो सकती है
  • निर्धारित कार्यों को निश्चित समय अंतराल पर चलाया जाएगा


1
कुछ noSQL डेटाबेस के साथ एक समस्या यह है कि वे इवेंट लॉग्स जैसे विशाल डेटासेट पर तेज़ तरीके से "डिज़ाइन" समय पर अनपेक्षित प्रश्नों को नहीं कर सकते हैं: gamedev.stackexchange.com/q/4465/450 कृपया ध्यान रखें कि किसी भी डेटाबेस की आवश्यकता नहीं है सामान्य डेटाबेस की तुलना में क्वेरी इंजेक्शन के खिलाफ तकनीक सामान्य है।
Hendrik Brummermann

1
@nhnb: अपनी बात को बहाल करने का एक अच्छा तरीका है "संबंध डेटा के लिए एक संबंधपरक डेटाबेस का उपयोग करें, और ऑब्जेक्ट / दस्तावेज़ डेटा के लिए ऑब्जेक्ट / दस्तावेज़ डेटाबेस का उपयोग करें"। दुर्भाग्य से मुझे नहीं लगता कि ज्यादातर लोगों के पास मॉडलिंग के बारे में सोचने या अनुभव करने का बहुत समय है, जो कि खराब डिजाइनों की ओर जाता है, चाहे वे किसी भी तरह का हो।

2
आपके प्रश्न के जवाब में "क्या वेब आधारित खेलों के लिए NoSQL एक वैध विकल्प है?" मेरा मानना ​​है कि उत्तर हां है। NoSQL डेटाबेस का उपयोग वेब-आधारित गेम के लिए पहले किया गया है (जैसे कि फार्मविले) और बहुत सारे लचीलेपन की पेशकश करते हैं। इस प्रश्न के लिए विवाद का मुख्य बिंदु यह प्रतीत होता है कि "कौन सा बेहतर है (NoSQL या SQL)?"। प्रत्येक प्रणाली में पेशेवरों और विपक्ष हैं, लेकिन दोनों पूरी तरह से वैध विकल्प हैं। यदि आप एक प्रणाली के दूसरे पर होने वाले फायदों की विस्तृत सूची की तलाश में हैं, तो आप प्रोग्रामर StackExchange a vist को भुगतान करना चाह सकते हैं। :)
अरी पैट्रिक

जवाबों:


21

क्या वेब आधारित खेल के लिए noSQL डेटाबेस उपयुक्त होगा?

पूर्ण रूप से! सामान्यतया, गैर-संबंधपरक डेटाबेस (जैसे कि MongoDB) खेलों के लिए बहुत बेहतर होते हैं, क्योंकि वे डेटा को मॉडल बनाने में अधिक लचीले होते हैं, जबकि रिलेशनल डेटाबेस (जैसे SQL) की तुलना में अधिक प्रदर्शनकारी होते हैं - उन्हें "जीत-जीत" बनाते हैं। चुनाव।

पारंपरिक RDBMS का उपयोग करके क्या समस्याएँ उत्पन्न हो सकती हैं?

संबंधपरक डेटाबेस का उपयोग करने के लिए दो प्रमुख कमियां हैं:

  • आप डेटा मॉडल करने के तरीके में लचीलेपन की कमी
  • प्रदर्शन

जिस तरह से आप डेटा मॉडल करते हैं, उसमें लचीलेपन की कमी एक बड़ी खामी है, क्योंकि रिलेशनल डेटाबेस का उपयोग करने से आप डेटा को मॉडल की जरूरतों को पूरा करने के बजाय डेटाबेस की जरूरतों को पूरा करने के लिए मॉडल करने के लिए मजबूर कर सकते हैं। उदाहरण के लिए, विचार करें कि आप मॉडल का निर्माण कैसे कर रहे हैं कि आप किसी रिलेशनल डेटाबेस का उपयोग करके किसी गेम में आइटम कैसे स्टोर करेंगे और आप निम्नलिखित मॉडल पर निर्णय लेते हैं:

weapon_type_id | weapon_type
1 | sharp

weapon_id | weapon| weapon_type_id | damage
1 | Short Sword | 1 | 5

potion_type_id | potion_type
1 | HP
2 | Mana

potion_id | potion| potion_type_id | modifier
1 | Healing Elixer | 1| 5
2 | Mana Drainer | 2| -5

अब विचार करें कि निम्नलिखित को पूरा करने के लिए आपको मॉडल को कैसे संशोधित करना होगा:

  • एक नया आइटम प्रकार जोड़ें
  • कई हथियार प्रकार के साथ एक हथियार बनाएँ
  • एक पोशन आइटम बनाएं जिसे हथियार के रूप में भी इस्तेमाल किया जा सकता है

निश्चित रूप से ये सभी कार्य करने योग्य हैं, लेकिन आप उन्हें करते समय सबसे खुश व्यक्ति नहीं होंगे, और आप शायद आश्चर्य करेंगे, "क्या मैं वहाँ एक बेहतर समाधान है जो मैं करना चाहता हूं ?," जब आप कर सकते थे? एक गैर-संबंधपरक डेटाबेस में बहुत अधिक लचीले मॉडल को डिज़ाइन करें।

नोट: यदि आप दस्तावेज़-आधारित डेटाबेस की जानकारी संग्रहीत करने से अपरिचित हैं, तो जारी रखने से पहले कृपया इस लिंक को देखें। उपर्युक्त लेख में प्रस्तुत किए गए समान तर्क का उपयोग करने के लिए डिज़ाइन किया गया मॉडल नीचे प्रस्तुत किया गया है।

db.itemTypes

name: Weapon
types: Sharp

name: Potion
types: HP, Mana

db.items

name: Short Sword
weapon
    type: Sharp (db.itemTypes reference)
    damage: 5

name: Healing Elixer
potion
    type:  HP (db.itemTypes reference)
    modifier: 5

name: Mana Drainer
potion
    type:  Mana (db.itemTypes reference)
    modifier: -5  

name:  Healing Potion Sword
potion
    type: HP (db.itemTypes reference)
    modifier: 10
weapon
    type: Sharp (db.itemTypes reference)
    damage: 15

NoSQL बनाम SQL डेटाबेस के प्रदर्शन पर बहुत सारे अच्छे लेख हैं, लेकिन यहां एक है जो एप्लिकेशन उदाहरण प्रदान करता है ताकि आप अपने स्वयं के परीक्षण कर सकें: MongoDB बनाम SQL सर्वर 2008 प्रदर्शन तसलीम

मैं MongoDB वाले उपयोगकर्ताओं के बीच डेटा संगति का बीमा कैसे करूं?

MongoDB एकल डेटा संस्थाओं (दस्तावेजों) पर परमाणु संचालन को पढ़ने / लिखने का समर्थन करता है, इसलिए MongoDB से क्वेरी परिणाम हमेशा डेटाबेस के भीतर संग्रहित किए जाने के साथ सटीक होना चाहिए।

संपादित करें: आइटम डेटाबेस का NoSQL उदाहरण प्रदान किया गया


उदाहरण में कि आपने sql का उपयोग करते हुए लिखा है, आप उच्च स्तर पर, nosql का उपयोग करके इसे कैसे मॉडल करेंगे?
प्राण

4
-1, आपका उत्तर केवल स्थैतिक डेटा दिखाता है। खेल डेटाबेस के लिए SQL बनाम NoSQL पर पूरी बहस में अत्यधिक गतिशील डेटा शामिल है। सबसे अच्छी बात यह है कि एक NoSQL लेनदेन को दिखाना होगा जो दो खिलाड़ियों के बीच कुछ ट्रेड करता है - एक बहुत ही सामान्य घटना, और एक सबसे गेम गलत हो जाता है, भले ही वे किस प्रकार का चयन करें।

3
@ श्री: बहुत अधिक स्थैतिक डेटा है, लेकिन कोई भी इसके लिए थ्रूपुट के बारे में परवाह नहीं करता है, क्योंकि कोई भी इसे नहीं लिखता है - कोई लिखता नहीं, कोई लेनदेन नहीं, कोई एसीआईडी ​​नहीं, कोई वास्तविक डेटाबेस प्रश्न नहीं, भले ही आप इसे स्टोर करें। एक में। उस सवाल का जवाब देना आसान है - बस इसे स्मृति में रखें। निश्चित रूप से "हम स्थैतिक डेटा को तेजी से कैसे लोड कर सकते हैं?" एक दिलचस्प सवाल है, लेकिन मुझे नहीं लगता कि यह SQL बनाम NoSQL के सवालों से संबंधित है। - मल्टी-डॉक्यूमेंट ऑपरेशंस के लिए, क्या इसका मतलब है कि आपके डेटाबेस में एक डॉक्यूमेंट होगा, जैसे कि इसमें सभी प्लेयर्स?

2
@ श्री: कृपया NoSQL को भ्रमित न करें, जो एक विचार है, और MongoDB, जो एक विशेष डेटाबेस है। अपनी पिछली नौकरी में हमने NoSQL डेटाबेस पर दो गेम भेजे और कम-विलंबता के साथ उत्कृष्ट संगामिति प्राप्त की। लेकिन हमारे NoSQL डेटाबेस ने फ़ील्ड-स्तर लॉकिंग के साथ बहु-दस्तावेज़ लेनदेन का भी समर्थन किया। NoSQL SQL की तरह एक भी "चीज" नहीं है, यह सिर्फ SQL (और आमतौर पर संबंधपरक योजनाओं का उपयोग नहीं करने) का उपयोग करने वाले किसी भी डेटाबेस को संदर्भित करता है।

5
सिर्फ मेरा $ .02, लेकिन "प्रदर्शन नहीं" RDBMS का दोष नहीं है। यह RDBMS में गैर-संबंधपरक डेटा संग्रहीत करने का एक दोष है, अपने RDBMS को ट्यूनिंग नहीं करना, यह समझना कि आपकी SQL क्या कर रही है, इंडेक्सिंग नहीं, आदि आदि। यदि आपके पास रिलेशनल डेटा है, तो आप पाएंगे कि RDBMSes अविश्वसनीय रूप से अनुकूलित हैं।
रोबी

19

शब्दों के जोड़े एसक्यूएल डेटाबेस का बचाव करते हैं।

1 - यदि आपके पास एसक्यूएल डेटाबेस है तो आप अपने डेटा के साथ न केवल प्राथमिक कुंजी द्वारा काम कर सकते हैं। MMO में अधिकांश प्रश्न पीके द्वारा जाते हैं लेकिन जब आपको सभी उपयोगकर्ताओं को स्तर> 30 के साथ खोजने की आवश्यकता होती है तो आप NoSQL दुनिया में क्या करेंगे?

2 - यदि आपके पास SQL ​​भाषा है तो आप टूटे हुए डेटा को सुधारने के लिए "हॉटफ़िक्स" बना सकते हैं। उदाहरण के लिए: "player_items सेट फ़्लैग = 0 अपडेट करें जहां item_type_id = 100"। आप इसे NoSQL में कैसे ठीक कर सकते हैं? मुझे लगता है कि आपको एक स्क्रिप्ट बनानी होगी जो आपके सभी डेटा को पार्स करेगी ...

3 - SQL डेटाबेस इतना धीमा नहीं है जितना आप सोच सकते हैं। मेरे कॉलेजियम वेब आधारित MMO खेल बनाते हैं, जो MySQL में प्रति सेकंड 5000 लेनदेन करते हैं। क्या यह आपके लिए पर्याप्त नहीं है? यदि नहीं, तो आप अपने डेटाबेस को पैमाना बनाने के लिए उपयोग कर सकते हैं

4 - एसक्यूएल में एक विदेशी कुंजी बाधाएं और ऐसे अच्छे सामान हैं, जो आपको अपने कोड में बग ढूंढने में मदद करेंगे।

NoSQL एक चांदी की गोली नहीं है। यह केवल कुछ समस्याओं को हल करता है और कई नई समस्याएं लाता है। तो मेरी सलाह - NoSQL चुनने से पहले दो बार सोचें।


1
ये सभी महान कारण हैं NoSQL से बचने के लिए जब तक आप वास्तव में इसके लिए एक आवश्यकता नहीं है। विशेषकर # ३। जब तक आपके पास पहले से ही उपयोगकर्ताओं के ज़िलियन नहीं हैं (और कुछ भी करने से इनकार करते हैं), तो आप संभवतः MySQL के साथ अधिक उत्पादक होंगे।
१६:०६ पर ojrac

5
1. आप उपयोग करेंगे: "x के लिए db.user.find ({" स्तर ": {" $ gt ": 30}})" 2. तकनीकी रूप से, आपने जो लिखा है वह एक स्क्रिप्ट भी है, इसलिए मैं हूं निश्चित नहीं है कि आपकी बात क्या है। 3. SQL का उपयोग करके एक MMO बनाना बहुत संभव है, और वास्तव में, प्रौद्योगिकी का उपयोग करके कई MMO विकसित किए गए हैं। NoSQL तकनीक काफी नई है और इसे प्रदर्शन और लचीलेपन के लिए Amazon, Google और Facebook जैसी सेवाओं द्वारा पहले ही अपनाया जा चुका है। 4. NoSQL में आपको अपनी खुद की बाधाओं को लिखने की आवश्यकता होगी, लेकिन यह केवल अतिरिक्त लचीलेपन की लागत है।
अरी पैट्रिक

2
मैं दो बार आपके विचार से सहमत हूं। आंशिक रूप से मैं इस सवाल के साथ यहाँ क्या कर रहा हूँ :)
प्राण

10
एसक्यूएल एक स्लिवर बुलेट नहीं है। NoSQL एक चांदी की गोली नहीं है। किसी भी तकनीक का उपयोग करने से पहले दो बार सोचें।
स्टोनमेटल

5
3 के बारे में, समस्या इतना है कि एसक्यूएल है नहीं है धीमी है, लेकिन SQL है कि laggy । सामान्यतया, SQL डेटाबेस विलंबता की कीमत पर उत्कृष्ट थ्रूपुट प्राप्त करते हैं। वेब-आधारित गेम के लिए, शायद यही आप चाहते हैं! एक वास्तविक समय के नेटवर्क वाले खेल के लिए, यह शायद नहीं है, और अधिकांश "वाह-जैसे" MMO जो SQL का उपयोग करते हैं, उनके सामने एक कैशिंग परत का उपयोग करते हैं जो SQL के अधिकांश लाभों को हटा देता है, यही कारण है कि NoSQL के लिए एक बड़ा कदम है उन्हें।

18

इसका उत्तर हां है, यह एक वैध विकल्प है लेकिन नहीं, यह शायद एक महान विचार नहीं है

SQL के साथ दो प्रमुख समस्याएं हैं जो NoSQL को संबोधित करने की कोशिश करता है, जब यह गेम की बात आती है।

पहला विलंबता, या अंतराल है। एक मायने में, एसक्यूएल डेटाबेस तेजी से धधक रहे हैं, एक सेकंड के दसवें हिस्से में हजारों लेनदेन या अधिक प्रसंस्करण करते हैं। एक अन्य अर्थ में, वे अविश्वसनीय रूप से धीमे हैं, क्योंकि बस कुछ ही लेन-देन को संसाधित करने में उतना ही समय लगता है। अधिकांश डेटाबेस उपयोगों के लिए, यह कोई मायने नहीं रखता है, लेकिन गेम में एक वास्तविक समय घटक होता है, इसलिए यह सिर्फ यह नहीं है कि आप प्रति सेकंड कितने लेनदेन कर सकते हैं, लेकिन डेटाबेस लेनदेन का जवाब देने में औसत समय लगता है।

यह विलंबता वास्तविक समय के खेल के लिए एक बड़ी समस्या है। कई डेवलपर्स जिन्हें बड़े डेटाबेस (आमतौर पर MMOs के लिए) की आवश्यकता होती है, इन स्टालों से बचने के लिए डेटाबेस और गेम सर्वर के बीच बैठते हैं और फिर समय-समय पर कैश फ्लश करते हैं। समस्या? आपने केवल डेटाबेस का उपयोग करने के मुख्य कारणों को बाहर फेंक दिया - परमाणुता, संगति, अलगाव और स्थायित्व

लेकिन यह समस्या वेब गेम पर लागू नहीं होती है। आप पहले से ही खिलाड़ी और खेल के बीच एक उच्च-विलंबता कनेक्शन प्राप्त कर चुके हैं, इसलिए आपको थ्रूपुट एसक्यूएल प्रदान करता है, साथ ही परिपक्व, प्रसिद्ध सॉफ्टवेयर के लाभ भी मिल सकते हैं।

हालाँकि, दूसरी समस्या, आप पर लागू होती है, और वह है वस्तु-संबंधपरक प्रतिबाधा बेमेल । खेल वस्तुओं से निपटते हैं, डेटाबेस पंक्तियों से निपटते हैं। यदि आप भाग्यशाली हैं कि एक वस्तु को केवल उसके खेतों को सूचीबद्ध करके एक पंक्ति में बनाया जा सकता है, लेकिन ज्यादातर समय वस्तुएं पदानुक्रमित होती हैं, और आप उन्हें किसी तरह से बाहर निकालने के लिए उन्हें पंक्तियों में ले आते हैं।

दस्तावेज़-आधारित डेटाबेस, जैसे CouchDB और MongoDB, इस समस्या को हल करके शीर्ष-स्तरीय ऑब्जेक्ट पर दस्तावेज़ को बढ़ावा देते हैं, बजाय पंक्ति ("दस्तावेज़" इस मामले में "ऑब्जेक्ट" का एक पर्याय है)। लेकिन ऐसा करने से, वे SQL डेटाबेस के कई लाभ खो देते हैं। थ्रूपुट बहुत कम है, और लॉकिंग एल्गोरिदम अधिक जटिल हो जाते हैं।

अच्छी खबर यह है कि जो भी भाषा आप उपयोग कर रहे हैं उसके लिए पहले से ही बहुत सारे ऑब्जेक्ट-रिलेशनल मैपिंग (ओआरएम) टूल उपलब्ध हैं। वे आपको डेटाबेस में मेमोरी और पंक्तियों के बीच काफी पारदर्शी तरीके से अनुवाद करने देते हैं। ये उपकरण आमतौर पर बड़े पैमाने पर वास्तविक समय के खेल के लिए उपयुक्त नहीं हैं, क्योंकि वे SQL और NoSQL डेटाबेस के सबसे खराब प्रदर्शन पहलुओं को प्रस्तुत कर सकते हैं। लेकिन यह एक वेब गेम के लिए ठीक है - कम से कम, जब आप प्रदर्शन समस्याओं में भाग लेते हैं, तो आप पुराने तरीके से लेनदेन करने पर वापस जा सकते हैं। विलंबता समस्या आपको चोट नहीं पहुँचाती है, और बढ़ी हुई थ्रूपुट आपको मदद करती है।

अंत में, एक बिंदु पर विस्तार करने के लिए मैंने कहीं और बनाया है : यह स्थैतिक गेम डेटा के बारे में नहीं है। मैं आपके आइटम विवरण या आपके हथियार क्षति या स्प्राइट या यहां कुछ भी के बारे में बात नहीं कर रहा हूं। मेरा मतलब है कि असली, पारस्परिक खेल डेटा, जैसे खिलाड़ी की सूची में या उनके आँकड़े क्या हैं। स्थैतिक डेटा के लिए आपको एक डेटा स्टोर की आवश्यकता होती है। शायद यह पता चला है कि करने के लिए सबसे आसान काम उसी डेटाबेस का उपयोग करना है, जिसके लिए डेटा स्टोर है क्योंकि आपके पास एक महान ओआरएम है; शायद आपको सिर्फ फाइल सिस्टम की जरूरत होगी। यह दो अलग-अलग समस्याएं हैं, और दोनों मामलों में एक उत्तर की आवश्यकता नहीं है (और शायद नहीं)।


1
+1 दोनों विकल्पों की तुलना के लिए धन्यवाद। इसके अलावा, आप यह कहकर एक अच्छा बिंदु बनाते हैं कि स्थिर डेटा डेटाबेस में नहीं होना चाहिए।
प्राण

1
+1 हालाँकि मुझे लगता है कि आप नो एसक्यूएल के मुख्य पेशेवरों (अच्छी तरह से, प्रो या कॉन के परिप्रेक्ष्य में) का उल्लेख करने की उपेक्षा करते हैं, जो कि यह स्कीमा-कम है, जो अत्यधिक गतिशील डेटा के भंडारण की अनुमति देता है। मैं वास्तव में PostgreSQL के साथ अपने वर्तमान प्रोजेक्ट के लिए दोनों के मिश्रण का उपयोग करने जा रहा हूं, जो कि संबंधपरक मॉडल में अच्छी तरह से फिट बैठता है, और अर्ध-स्थिर सामान के लिए मोंगो नहीं है। (उदाहरण के लिए एक लॉग कि पुनरावृत्ति उत्पन्न करने के लिए इस्तेमाल किया जा सकता के लिए है, जहां संबंधित रूप से मैं या तो एक स्तंभ कई अन्य तालिकाओं में से एक से भंडार एक पी है कि, या सामान्य स्तंभ नाम के साथ एक मेज के लिए होगा जैसे param1 param2)
Davy8

1
@ Davy88: noSQL जरूरी स्कीमा-कम नहीं है, और "अत्यधिक गतिशील" डेटाबेस होना वास्तव में एक प्लस नहीं है। यदि आपके पास डेटा सूप है, तो आप इंडेक्सिंग नहीं कर सकते, आप फ़ील्ड-लेवल लॉकिंग नहीं कर सकते हैं, और यहां तक ​​कि साधारण प्रश्न भी सवालों से घबरा जाते हैं कि क्या होता है यदि कोई कुंजी मौजूद नहीं है।

@ user744, उन चीजों का क्या करें जिनका आप उल्लेख करते हैं?
एक्सपिरिनजा

5
  • क्या एक noSQL डेटास्टोर (दस्तावेज़-आधारित, जैसे MongoDB) वेब-आधारित गेम के लिए उपयुक्त होगा?

मैं काउचडब पर एक नज़र देने की सलाह दूंगा

इसका इंटरफ़ेस जावास्क्रिप्ट-आधारित है, इसलिए यह HTML5 / जावास्क्रिप्ट आधारित गेम के साथ बहुत अच्छी तरह से मिश्रण करेगा।

यह 'ऑफ-लाइन' (डीबी की एक स्थानीय प्रतिलिपि बनाने) का काम करने में सक्षम है और फिर बाद में सर्वर के साथ खुद को सिंक्रोनाइज़ करता है (उदाहरण के लिए, उदाहरण के लिए आप इसका इस्तेमाल कर सकते हैं)

  • ऐसे कौन से मुद्दे हैं जो एक पारंपरिक RDBMS, जैसे MySQL का उपयोग करके उत्पन्न हो सकते हैं?

मुख्य मुद्दा यह होगा कि नो-एसक्यूएल डेटाबेस रिलेशनल डेटाबेस से बहुत अलग तरीके से संभालते हैं। मानसिक स्विच बनाना मुश्किल हो सकता है।

उदाहरण के लिए, couchdb में " क्वेरीज़ " कैसे किया जाता है , इस पर एक नज़र डालें । सब कुछ जावास्क्रिप्ट में किया जाता है।

  • MongoDB वाले उपयोगकर्ताओं के बीच गेमप्ले के दौरान या क्रोन जॉब्स जैसी समयबद्ध घटनाओं पर बीमा डेटा की संगति कैसे करें?

डेटाबेस को 'सिंक्रोनाइज़ करने' की प्रक्रिया को काउचडब के लिंगो में प्रतिकृति कहा जाता है । आपको शब्द संगति भी बहुत दिखाई देगी । कई अंतर्निहित सेवाएँ हैं जो प्रतिकृति और संगतता के साथ व्यवहार करती हैं। उदाहरण के लिए वृद्धिशील प्रतिकृति प्रक्रिया देखें।


हां, मैंने काउचडब के बारे में भी सुना है, वास्तव में, मोंगोडब की वेबसाइट पर भी, वे आमतौर पर इसकी तुलना करते हैं। मुझे लगता है कि मुझे couchdb vs mongodb पर शोध करने की आवश्यकता है।
प्राण

2

आपके खेल में आपके पास जो कुछ है, उसके आधार पर आप दोनों का उपयोग करके, और उन्हें अपने खेल में मॉडल के माध्यम से जोड़ सकते हैं। उदाहरण के लिए खिलाड़ी आरडीबी में हो सकता है (लॉगिन जानकारी) लेकिन खिलाड़ी इन्वेंट्री / वेरिएबल स्टोरेज noSQL में जा सकता है, इसलिए आपका प्लेयर मॉड्यूल login()RDB का fetchInventory()उपयोग कर सकता है और प्राथमिक कुंजी द्वारा noSQL का उपयोग कर सकता है ।

NoSQL में सहेजे जाने वाले उदाहरण के लिए बेहतर मैप्स (उदाहरण के लिए अलग-अलग ऑब्जेक्ट्स का निर्देशांक => सरणी) I यह बचाने की कल्पना नहीं करता है कि RDB में एक क्षेत्र में क्या शामिल है (एक क्रमबद्ध स्ट्रिंग को छोड़कर जो आपको कुछ सीपीयू के कुछ हिस्से को पढ़ने के लिए पूरी तरह से अनसुना करने की आवश्यकता है?) और रैम बर्बाद!) अच्छी तरह से आप अभी भी RDB में क्षेत्रों को बचा सकते हैं उदाहरण के लिए क्षेत्र "सिटी एक्स" में निम्नलिखित कॉर्डिनेट्स / ब्लॉक ([3,4], [8,7] ...) शामिल हैं।

आप शायद दोनों का उपयोग कर सकते हैं, और मेमकोचे जैसे अस्थिर भंडारण पर एक नज़र डालें, जिसकी आपको आवश्यकता हो सकती है या कुछ अस्थायी डेटा (हार्ड-डिस्क का उपयोग सुनिश्चित करने की तुलना में तेज़ होगा! और आपको बहुत सी सीपीयू बचाता है लेकिन निश्चित रूप से रैम नहीं है)

तो अंत में>

यह इस बात पर निर्भर करता है कि आप अपने खेल में क्या करना चाहते हैं! Cheerz


आपको क्या लगता है कि आपको NoSQL या दृढ़ता की परत में और अधिक घसीटना होगा, जैसा कि मैं यह सोचना चाहता हूं?
एक्सपिरिनंजा

1
हो सकता है कि एक समन्वित प्रणाली अगर उर खेल एक आधारित आधारित है, तो कुछ ऐसा हो सकता है जिसे उन्नत खोज की आवश्यकता हो। मूल रूप से अगर आप MySQL के साथ अच्छे हैं, तो उससे चिपके रहें, क्या यह संभव है कि इसे एक nosql के रूप में भी इस्तेमाल किया जाए
Ronan Dejhero
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.