आपका प्रश्न वास्तव में व्यापक है क्योंकि वहाँ शैलियों की सरासर संख्या के कारण, लेकिन यहाँ एक पेशेवर सॉफ़्टवेयर डेवलपर का दृष्टिकोण है।
आपने उन मानदंडों की एक सूची प्रदान की, जिनका उपयोग आप यह निर्धारित करने के लिए करना चाहते हैं कि कौन सा डेटा दृढ़ता तंत्र आप उपयोग करते हैं। वो थे:
- परियोजना का आकार।
- मंच खेल द्वारा लक्षित है।
- डेटा संरचना की जटिलता।
- कई परियोजना के बीच डेटा की पोर्टेबिलिटी।
- डेटा को कितनी बार एक्सेस किया जाना चाहिए
- एक ही एप्लिकेशन के लिए कई प्रकार के डेटा
- कोई भी अन्य बिंदु जो आपको लगता है कि ब्याज का उपयोग करने का निर्णय लेते समय है।
पहले हमें यह स्थापित करने की आवश्यकता है कि कौन से विकल्प हमारे लिए उपलब्ध हैं। चूँकि आपने कोई भाषा या तकनीक निर्दिष्ट नहीं की है, यह ठीक-ठीक कहना कठिन है, लेकिन आप शायद XML और संबंधपरक डेटाबेस संग्रहण के बीच निर्णय लेने का प्रयास कर रहे हैं ।
बनाने के लिए एक महत्वपूर्ण अंतर यह है कि XML वास्तव में स्टोरेज मैकेनिज्म नहीं है, क्योंकि यह धारावाहिक तकनीक की तरह है। यह आपके खेल के लिए इन-मेमोरी संरचनाओं का प्रतिनिधित्व करने का एक तरीका है। यह देखते हुए कि आप वास्तव में फ्लैट फाइल बनाम रिलेशनल डेटाबेस स्टोरेज के बारे में बात कर रहे हैं । ये एकमात्र विकल्प नहीं हैं, लेकिन वे सबसे आम हैं, इसलिए मैं उनका उपयोग करने जा रहा हूं।
फ्लैट फ़ाइलों के लिए:
- एक्सएमएल
- JSON
- YAML
- XAML
- सादे पाठ
डेटाबेस के लिए:
- एस क्यू एल सर्वर
- माई एसक्यूएल
- डीबी 2
- आकाशवाणी
- बहुत अधिक
संपादित करें: आपने फ़ाइलों और संबंधपरक डेटाबेसों से अलग अन्य प्रकार के तंत्रों के बारे में पूछा। केवल अन्य उल्लेखनीय प्रकार के डेटाबेस जो मैंने नियमित रूप से उपयोग किए हैं, वे "बर्कले-स्टाइल" डेटाबेस हैं, जो अनिवार्य रूप से कुंजी-मूल्य आधारित हैं। ये B- पेड़ों का उपयोग डेटा संरचना के लिए करते हैं ताकि लुकअप तेजी से हो। ये कॉन्फ़िगरेशन / सेटिंग लुकअप के लिए बहुत अच्छे हैं जहाँ आप जानते हैं कि आप क्या चाहते हैं (उदाहरण के लिए, मुझे "लेवल 1" के लिए सभी टेलीमेट्री डेटा दें)।
अब जब हमारे पास सभी मूल बातें हैं, तो आइए, हम आपके कुछ मानदंडों को छूते हैं।
परियोजना का आकार।
कुछ असहमत हो सकते हैं, लेकिन जरूरी नहीं कि आपकी परियोजना का आकार आपके डेटा दृढ़ता तंत्र पर भारी प्रभाव डाले। आप उन कार्यों के पुन: प्रयोज्य पुस्तकालय का निर्माण करना चाहेंगे, जो भी आप चाहते हैं कि तंत्र से डेटा संग्रहीत / लोड करें। मैं एक अमूर्त परत ( एडॉप्टर पैटर्न की जांच करना ) को लागू करने का भी सुझाव दूंगा ताकि जरूरत पड़ने पर आप अपने हठ तंत्र को आसानी से बदल सकें।
कहा जा रहा है कि, छोटे प्रोजेक्ट्स के लिए, फ़ाइल सिस्टम पर XML का उपयोग करना संभावित रूप से अच्छी तरह से काम कर सकता है, लेकिन आप अपनी कुछ सुरक्षा चिंताओं (यानी, एन्क्रिप्शन) को संबोधित करना चाहेंगे ताकि खिलाड़ी इच्छानुसार डेटा नहीं बदल सकें।
मंच खेल द्वारा लक्षित है।
प्लेटफ़ॉर्म या तो बहुत बड़ा मुद्दा बनने वाला नहीं है। आपको लक्ष्य मंच की तुलना में अपने विकास मंच के बारे में अधिक चिंतित होना चाहिए। इसका कारण यह है कि कुछ भाषाएं कुछ प्रकार के मार्कअप या डेटाबेस को दूसरों की तुलना में बेहतर तरीके से संभालती हैं। ऐसा नहीं है कि आप किसी भी भाषा में उपरोक्त में से किसी का भी उपयोग नहीं कर सकते, लेकिन कभी-कभी आपके लिए उपलब्ध उपकरणों का उपयोग करना सबसे अच्छा है। कोई भी प्लेटफ़ॉर्म फ्लैट फ़ाइलों का समर्थन करेगा और XML को पार्स करेगा, लेकिन मोबाइल प्लेटफ़ॉर्म पर यदि संभव हो तो आप बाइनरी क्रमांकन पर विचार कर सकते हैं, या कम से कम स्टोरेज के लिए अपने XML को ऑप्टिमाइज़ कर सकते हैं।
डेटा संरचना की जटिलता।
यह एक मुश्किल की तरह है। संबंधपरक डेटाबेस बस के लिए महान हैं ... संस्थाओं और उनके रिश्तों को संग्रहीत करना। आपके पास फ़ाइल सिस्टम पर फ़ाइलों के साथ संबंधपरक संग्रहण भंडार का उपयोग करके संरचना को लागू करने की बेहतर क्षमता है। अपनी संस्थाओं के बीच संबंधों के प्रकारों पर विचार करें और साथ ही कितनी बार आप उन्हें बदल रहे हैं या संबंधित संस्थाओं को ढूंढ रहे हैं। अत्यंत जटिल संरचनाओं के लिए, मैं सुझाव दूंगा कि डेटाबेस मार्ग जा रहा है।
कई परियोजना के बीच डेटा की पोर्टेबिलिटी।
जब पोर्टेबिलिटी की बात आती है, तो आपको इस तथ्य पर विचार करना चाहिए कि डेटाबेस फ़ाइलों की तुलना में स्वाभाविक रूप से अधिक भारी हैं। स्थापना और कॉन्फ़िगरेशन ओवरहेड है, अलग-अलग डेटाबेस विभिन्न प्लेटफार्मों के लिए उपलब्ध होंगे, आदि SQLite इस के आसपास एक बहुत अच्छा तरीका है। हालाँकि, जब यह पोर्टेबिलिटी की बात आती है, तो आपके पास XML जैसे फ़ाइल-आधारित समाधानों के साथ एक आसान समय होगा।
संपादित करें: आपकी कुछ टिप्पणियों में पोर्टेबिलिटी के बारे में बताई गई कुछ अन्य चिंताएँ हैं। अंतत: आप नहीं चाहते हैं कि आपका डेटा किसी भी उत्पाद या फ़ाइल प्रकार से बहुत अधिक युग्मित हो। यह अंततः सबसे अच्छा है यदि आप स्टॉक डेटा (स्तर, दुश्मन, आदि) को कुछ प्रकार के सार प्रारूप (टैब सीमांकित फ़ाइलें, एक्सएमएल, आदि) में संग्रहीत कर सकते हैं जो आप संकलन या लोड पर डेटाबेस / फ़ाइल सिस्टम में आसानी से पार्स और स्टोर कर सकते हैं। पहर। इसका मतलब है कि आप अपने स्टोरेज मैकेनिज़्म को तेज़ कर सकते हैं और पार्सिंग पीस को फिर से लिख सकते हैं।
डेटा को कितनी बार एक्सेस किया जाना चाहिए
जब तक आपके पास किसी तरह का कैशिंग मैकेनिज्म नहीं है, तब तक बहुत सारे डेटा एक्सेस का अर्थ I / O है। डेटाबेस स्मृति में संरचनाएं रखते हैं और डेटा हेरफेर और पुनर्प्राप्ति के लिए महान हैं। यदि आप वास्तव में लगातार डेटा जारी कर रहे हैं, तो आप डेटाबेस के साथ रहना चाह सकते हैं।
एक ही एप्लिकेशन के लिए कई प्रकार के डेटा
वॉल्यूम निश्चित रूप से एक विचार है, लेकिन जब तक आप हजारों या लाखों वस्तुओं को जारी रखने के बारे में बात नहीं कर रहे हैं, तब भी फ़ाइल सिस्टम समाधान के रूप में स्वीकार्य होगा।
खेल का प्रकार
आपके द्वारा बनाए जा रहे गेम का प्रकार आपके द्वारा चुने गए प्लेटफ़ॉर्म पर एक बड़ा प्रभाव डाल सकता है। अधिकांश क्लाइंट-केवल एकल-प्लेयर गेम के लिए, आप एक संपीड़ित या एन्क्रिप्टेड फ़ाइल सिस्टम-आधारित समाधान का उपयोग करके ठीक होने जा रहे हैं। यदि आप एक ऑनलाइन घटक के साथ खेल के बारे में बात कर रहे हैं, हालांकि, वह पागल होगा। डेटाबेस रूट पर जाएँ और अपने आप को सिरदर्द से बचाएं। सर्वर को बैक-एंड क्लस्टर का उपयोग करके आपके सभी डेटा को प्रबंधित करने दें।
आशा है कि इस प्रतिक्रिया से कुछ मदद मिलती है। यह किसी भी तरह से पूरी तरह से व्यापक नहीं है, और निर्णय लेना अंततः आपके ऊपर है, लेकिन मेरी टिप्पणी आपको कुछ चीजों के बारे में सोचना चाहिए।
EDIT: कुछ समय ऐसे होते हैं जहां हाइब्रिड दृष्टिकोण लेने से बहुत फायदा होता है। उदाहरण के लिए, मान लें कि आप एक MMORPG विकसित कर रहे हैं। क्लाइंट की तरफ, आप अन्य खिलाड़ियों के बारे में कैश्ड डेटा को गैर-रिलेशनल डेटाबेस में संग्रहीत कर सकते हैं (जैसा कि ऊपर बताया गया है)। सर्वर की ओर, आप इसे जारी रखने के लिए एक रिलेशनल डेटाबेस में सभी गेम डेटा को स्टोर कर रहे हैं। और फिर ग्राहक की ओर से आप शायद एक्सएमएल / फ्लैट फ़ाइलों में लॉग डेटा, कॉन्फ़िगरेशन डेटा, आदि का उपयोग कर रहे हैं।
एक अन्य पोस्टर में यह भी उल्लेख किया गया है कि कभी-कभी यह अच्छा होता है, भले ही आप एक डेटाबेस में उत्पादन के लिए डेटा संग्रहीत कर रहे हों, एक तरीका है जिससे आप विकास के लिए फ्लैट फ़ाइलों का उपयोग कर सकते हैं ... मिश्रण से किसी अन्य उत्पाद को निकालना आसान हो सकता है ।