भंडारण स्वरूपों के बीच कैसे निर्णय करें और उनमें से कुछ के लिए उदाहरण उपयोग के मामले क्या हैं?


10

हमारे पास प्रोग्राम डेटा स्टोर करने के अलग-अलग तरीके हैं (फाइलों को गेम, कर्मचारी डेटाबेस, प्रोग्राम कॉन्फ़िगरेशन आदि में सहेजें):

  • सादा पाठ (सोचो .iniऔर .conf)
  • एक्सएमएल
  • डेटाबेस (MySQL, SQLite ...)
  • .zip और इसी तरह कई फाइलें (विभिन्न स्वरूपों के साथ)
  • .docउदाहरण के लिए, क्रमबद्ध उपकरण द्वारा बनाई गई बाइनरी फाइलें (विचार आदि)

ऊपर सूचीबद्ध स्वरूपों के लिए अलग-अलग उपयोग के मामले हैं, और उनके फायदे क्या हैं? विभिन्न कार्यों के लिए उनके बीच कैसे निर्णय करें?

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

message.txt (containing the message)
attachments (folder containing attachments)
  audio.wav
  picture.jpg

wrt बाइनरी, Google प्रोटोकॉल बफर पर विचार करें। आलसी deserialization की क्षमता भयानक है, और आपके पास हमेशा इसे निकालने और इसे स्वरूपित पाठ (कई भाषाओं में सी ++ / जावा / पायथन) के रूप में फिर से सहेजने की संभावना है।
Matthieu एम।

जवाबों:


6

मैं निम्नानुसार उपयोग करता हूं:

सादे पाठ

विन्यास के लिए - आमतौर पर YAML या .ini का उपयोग किया जाता है। जब कोई पाठ फ़ाइल वांछित परिणाम हो (उदाहरण के लिए पाठ पर प्रिंट करें, पाठ को सहेजें आदि) को छोड़कर ज्यादातर उपयोगों के लिए मेरे द्वारा अस्वीकृत

एक्सएमएल

डेटा के विन्यास और परिवहन के लिए; उदाहरण के लिए निर्यात, XSLT के माध्यम से प्रारूप आदि। एक पोर्टेबल फ़ाइल स्वरूप (जैसे SVG) के रूप में अच्छा है। उत्कृष्ट हेरफेर उपकरण और फिल्टर।

डेटाबेस

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

एकल फ़ाइल संग्रह (जैसे। ज़िप)

संबंधित कई द्विआधारी धाराओं को संग्रहीत करने के लिए उपयुक्त है, उदाहरण के लिए एक एमुलेटर के लिए रॉम छवियां। उन चीजों के लिए सबसे अच्छा जो अक्सर अद्यतन नहीं होती हैं या कभी नहीं होती हैं। यह भारी, धीमा और हेरफेर करने के लिए कठिन है;

बाइनरी

केवल जहाँ ऐप डेटा संग्रहीत करने के लिए डेटाबेस उपलब्ध नहीं है। क्रमबद्धता के साथ सबसे आसान (C ++)। एक उच्च स्तरीय बाइनरी प्रारूप गति और आकार दोनों के लिए बाकी सब को बेहतर बना देगा।


4

कोई चांदी की गोली नहीं है। मेरे अनुभव में:

भंडारण माध्यम के रूप में सादा पाठ एक स्वत: नहीं है। कुछ मामलों में मैं भी इसे एक .config फ़ाइल द्वारा कवर करना बेहतर समझूंगा, जहां मेरे पास स्कीमा और प्रकार की सुरक्षा है। ऐसा लगता है कि टाइप सुरक्षा और डेटा निष्कर्षण की आवश्यकता लगभग हमेशा आती है। सादा पाठ इस प्रक्रिया को एक बुरा सपना बनाता है।

XML : सुरक्षा, डेटा सत्यापन, कम मात्रा और कुछ मामलों में मैं इसका उपयोग करता हूं क्योंकि .NET ने शक्तिशाली वस्तुओं के XML क्रमांकन के लिए समर्थन में बनाया है।

डेटाबेस : मेरा डिफ़ॉल्ट। प्रकार, सुरक्षा, गति, लेन-देन, अच्छी तरह से विश्वसनीय और डीबी को स्टोरेज माध्यम के रूप में चुनने के लिए दोष प्राप्त करना मुश्किल है यदि कुछ योजना के अनुसार नहीं चलता है।

.zip एक संपीड़न प्रारूप है, यह सुनिश्चित नहीं है कि यह दृढ़ता में कैसे फिट बैठता है ..?

बाइनरी : मैं केवल बाइनरी का उपयोग करता हूं जब मुझे एक अस्थायी मेमोरीस्ट्रीम बनाने की आवश्यकता होती है। बाइनरी एक DB या XML की तुलना में क्वेरी-क्षमता के तरीके में मूल्य नहीं जोड़ता है जहां मेरा डेटा स्कीमा के साथ आयोजित किया जाता है।

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


3

मैं उन्हें इस प्रकार उपयोग करता हूं:

सादे पाठ

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

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

एक्सएमएल

मैं यहाँ @Ingo से सहमत हूँ - सादे पाठ के विपरीत XML को स्क्रिप्टिंग के माध्यम से संसाधित करना कठिन है, और एक हाथ से संपादित करने के लिए दुःस्वप्न।

फिर भी, यदि आपके पास कुछ विस्तृत संरचना के साथ डेटा है जहां YAML अनिर्दिष्ट हो जाता है और फिर भी यह मानव-पठनीय और संपादन योग्य होना चाहता है, तो XML शायद सबसे अच्छा विकल्प है।

संबंध का डेटाबेस

जब आपके पास बहुत सारा डेटा हो (जो कि सादा पाठ और XML को बोझिल बना देगा) के लिए एक बढ़िया विकल्प है कि आप अभी भी 3 जी पार्टियों को मैन्युअल रूप से संपादित करने की अनुमति दे सकते हैं - SQL कमांड और यहां तक ​​कि GUI के माध्यम से।

एक और लाभ यह है कि आपका कोड जो सामग्री का प्रबंधन करता है वह बहुत पठनीय है। @ रिचर्ड-हैरिसन ने अपने उत्कृष्ट उत्तर में अन्य लाभों की एक अच्छी सूची दी।

NoSQL डेटाबेस

RDBMS पर एक लाभ वितरण के माध्यम से स्केलेबिलिटी है, जो संभवतः आपके प्रश्न के लिए बहुत प्रासंगिक नहीं है। संभवतः अधिक प्रासंगिक होने वाले फायदे एक कुंजी-मूल्य की दुकान की सादगी और योजनाबद्धता का लचीलापन है (यह एक शब्द है?)। जब आप अपने आप को संबंधपरक प्रतिमान को तोड़ते हुए पाते हैं: बस डेटाबेस को ब्लॉब्स को संग्रहीत करना, उन्हें कुंजी द्वारा एक्सेस करना और कोड के माध्यम से उन्हें संसाधित करना, फिर इस विकल्प पर विचार करें। कुछ विकल्प (जैसे CouchDB) बहुत पोर्टेबल होते हैं, एक छोटे पदचिह्न होते हैं और वे स्केल भी कर सकते हैं ताकि वे MySQL और SQLite के लिए एक अच्छा गैर-संबंधपरक विकल्प प्रदान करें।

बाइनरी

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

हालांकि मुझे यह इंगित करना चाहिए कि मुझे अभी तक एक ऐसे मामले का सामना करना पड़ा है जहां प्रारंभिक डेटा के दौरान प्रोग्राम डेटा तक सरल पहुंच की आवश्यकता नहीं है। आजकल मैं व्यक्तिगत रूप से किसी अन्य चीज के लिए डेटाबेस विकल्प के लिए जाता हूं, जिसमें मानक प्रारूप वाली फाइलें और अन्य सॉफ्टवेयर (जैसे ऑडियो, वीडियो) द्वारा इनकोड / डिकोड किया जाना आवश्यक है।

नोट: एक आम गलतफहमी है कि बाइनरी अपारदर्शी है और इस तरह किसी भी तरह अधिक सुरक्षित है। अतिरिक्त सुरक्षा के बिना यह नहीं है - अगर कोई आपके सॉफ़्टवेयर को हैक करना चाहता है, तो बस आपके कॉन्फ़िगरेशन को संग्रहीत करना या बाइनरी में जो कुछ भी उन्हें बंद नहीं करेगा।

संपीड़ित पुरालेख

वास्तव में उपरोक्त के लिए एक विकल्प नहीं है, बल्कि एक अतिरिक्त उपाय है।

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

आज लगभग किसी भी चीज पर बहुत तेजी से प्रदर्शन करता है (मूर का कानून इन एक्शन, बेबी), इसलिए इसका उपयोग न करने का एकमात्र कारण यह है कि यह आपके कोड में जटिलता जोड़ता है। जटिलता के नहीं एक बहुत, लेकिन अभी भी KISS सिद्धांत का उल्लंघन। विशेष रूप से कॉन्फ़िगरेशन फ़ाइलों के लिए बोझिल जिन्हें मैन्युअल रूप से या स्क्रिप्टिंग के माध्यम से संपादित करने की आवश्यकता है - और अगर आपको वास्तव में वहां जगह बचाने की आवश्यकता है, तो आपको संभवतः डेटाबेस विकल्प का उपयोग करना चाहिए।


2

मैं उनका उपयोग निम्नानुसार करूंगा:

  • सादा पाठ : आवेदन में बस संरचित डेटा का छोटा आकार होता है (पूर्व के लिए नाम मान जोड़े।)। डेटा को कई उपयोगकर्ताओं द्वारा समवर्ती रूप से संशोधित नहीं किया गया है।
  • XML : संरचित डेटा का छोटा आकार जो समवर्ती या अक्सर संशोधित नहीं होता है।
  • डेटाबेस : बड़े संरचित डेटा या समवर्ती पहुंच की आवश्यकता है। आवेदन में क्वेरी और खोज की आवश्यकता है।
  • बाइनरी डेटा: मैं इसका इस्तेमाल सिर्फ वस्तुओं को स्ट्रीमिंग के लिए करूंगा।
  • zipping संपीड़न है जो सर्वर पर डेटाबेस को छोड़कर उपरोक्त में से किसी भी अन्य प्रक्रिया के रूप में जोड़ा जा सकता है।

1

मैंने सुना है कि XML पाठ की सबसे खराब विशेषताओं (प्रक्रिया करने में कठिन / धीमा) और बाइनरी (अपठनीय) को जोड़ती है।


पूर्ण उत्तर नहीं
Anto
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.