2009-03-01 14 views
5

मैं वर्तमान में बहुत उत्सुक हूं कि अन्य प्रोग्रामर फ़ाइलों को डेटा में कैसे व्यवस्थित करते हैं। कोई भी फाइल संरचनाओं को बनाने के लिए सर्वोत्तम प्रथाओं पर किसी भी अच्छे लेख या किताबों की सिफारिश कर सकता है?कस्टम फ़ाइल संरचनाओं के लिए सर्वोत्तम प्रथाएं

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

क्या कोई रहस्य है जो मुझे याद आया है?

उत्तर

7

आम तौर पर, सबसे सरल चीज़ के साथ जाएं जो संभवतः कम से कम पहले काम कर सकती है। विचार करें, उदाहरण के लिए, यूनिक्स, जहां अधिकांश कॉन्फ़िगरेशन फ़ाइलें कुछ भी नहीं हैं, लेकिन व्हाइटस्पेस-सीमांकित फ़ील्ड, या किसी अन्य चरित्र (जैसे/etc/passwd, जो ":" डिलीमीटर का उपयोग करती है, क्योंकि जीसीओएस फ़ील्ड में रिक्त स्थान हो सकते हैं।

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

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

+0

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

5

इससे कोई फर्क नहीं पड़ता कि आप किस प्रारूप को चुनते हैं, मुझे किसी प्रकार का संस्करण नंबर स्टोर करना याद है (मुझे पूरा यकीन है कि आपको कुछ बदलावों को पेश करना होगा)।

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

मैं कई अलग अलग स्वरूपों का उपयोग, स्थिति के आधार पर, उदाहरण के लिए:

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

जब तक आप अनन्य आवश्यकताएँ होती हैं, जिसके लिए कुछ का उपयोग कर सकते पहले से ही एक परिपक्व पुस्तकालय है, इसलिए आप अपना खुद का पार्सिंग कोड लिखने से बच सकते हैं। इसका अर्थ है एक्सएमएल/जेएसओएन, आदि, जैसे लोगों ने कहा है।

एक अन्य अच्छा Google का प्रोटोकॉल बफर है (http://code.google.com/p/protobuf)। वहां आप एक सामान्य संदेश परिभाषा लिखते हैं और प्रोटोकॉल बफर कंपाइलर आपके लिए डेटा भरने, क्रमबद्ध करने और deserializing के लिए वस्तुओं को उत्पन्न करता है। आम तौर पर प्रारूप बाइनरी है, लेकिन आप JSON- जैसे सादा पाठ को लिखने के लिए अपने टेक्स्टफॉर्मैट क्लास का भी उपयोग कर सकते हैं। प्रोटोबफ्स के बारे में अच्छी बात यह है कि आपके लिए संस्करण कोड उत्पन्न होता है। आपके फ़ाइल प्रारूप के संस्करण 2 में, आपको बस इतना करना है कि .proto परिभाषा फ़ाइल में फ़ील्ड जोड़ें। नया संस्करण पुराने फ़ाइल प्रारूप को पढ़ सकता है, और केवल नए फ़ील्ड को खाली छोड़ देता है। यह वास्तव में प्रोटोबफ के लिए डिज़ाइन नहीं किया गया था, लेकिन वे कस्टम संदेशों के लिए एक आसान, कुशल बाइनरी फ़ाइल प्रारूप बनाते हैं, और कोड आपके लिए जेनरेट किया जाता है।

अब भी अपाचे इनक्यूबेटर में फेसबुक के Thrift देखें।

1

जैसा कि वर्षों से चला गया है, मैंने खुद को अधिक से अधिक पाठ को तब तक पाया है जब तक कि यह केवल प्रश्न से बाहर न हो। सीपीयू अब पर्याप्त तेज़ हैं कि हम इसे पर्याप्त तेज़ी से डीकोड कर सकते हैं।

जाहिर है, जब आपको एक बड़ी फ़ाइल के अंदर अक्सर जानकारी के छोटे टुकड़े अपडेट करना पड़ता है तो यह एक विकल्प नहीं है - लेकिन संभवतः डेटाबेस का वर्णन करता है।

इस बिंदु पर मुझे इन दो विकल्पों में से किसी एक के अलावा कुछ और करने के लिए एक असामान्य स्थिति लेनी होगी।

1

एक्सएमएल के लिए +1। थोड़ा सा ओवरहेड है, लेकिन पार्स करना, पढ़ना और डीबग करना आसान है। यदि आप एक स्कीमा का उपयोग कर रहे हैं, तो सख्त हो सकता है। एक्सएसएलटी के साथ बदलने के लिए आसान है, और बहुत पोर्टेबल (तार में या सिर्फ एक पेंड्रिव में :)

1

यह वास्तव में विशेष स्थिति पर निर्भर करता है। आपको विभिन्न विकल्पों के उत्तरों के खिलाफ अपने विकल्पों पर विचार करना होगा:

  • आपको कितना डेटा स्टोर करने की आवश्यकता है? क्या आपको कॉम्पैक्ट प्रतिनिधित्व के लिए अनुकूलित करने की आवश्यकता है?
  • क्या पढ़ता/लिखने का प्रदर्शन महत्वपूर्ण है? क्या आपको डिस्क एक्सेस और कम-प्रभाव वाले क्रमिकरण और deserialisation के लिए अनुकूलित करने की आवश्यकता है?
  • क्या आपको फ़ाइल में यादृच्छिक पहुंच की आवश्यकता है? क्या आपको डेटा के भीतर खोज के लिए संरचना को अनुकूलित करने की आवश्यकता है?
  • क्या यह डेटा अलग-अलग सिस्टम एन्कोडिंग के साथ संभवतः विभिन्न प्रणालियों में उपयोग किया जा रहा है? क्या आपको पोर्टेबिलिटी के लिए अनुकूलित करने की ज़रूरत है?

डेटा की प्रकृति का असर होगा। क्या यह एक फ्लैट सूची संरचना है? क्या यह एक पेड़ है? क्या यह एक चक्रीय ग्राफ है? निश्चित या परिवर्तनीय चौड़ाई के रिकॉर्ड हैं?

एक बार इन सवालों के जवाब ज्ञात हैं, तो आप जितना संभव हो सके इसे सरल रखने के अपने विकल्पों में से चुन सकते हैं। अक्सर लोकप्रिय विकल्प (एक्सएमएल, सीएसवी, वाईएएमएल) आपके उद्देश्यों के अनुरूप होंगे। यदि नहीं, तो आपको अपनी खुद की स्वरूपण और अपनी लेखन और पढ़ने की प्रक्रियाओं को विकसित करना होगा।

0

तो कई संभावनाएं हैं, लेकिन सबसे अधिक व्यावहारिक एक्सएमएल हो गया है

  • वहाँ लगभग हर विकास मंच के लिए सभ्य एक्सएमएल पुस्तकालयों
  • अधिकांश प्लेटफार्मों कोड की लाइनों के एक जोड़े के साथ वस्तु ग्राफ क्रमबद्धता की अनुमति देते हैं , तो एक्सएमएल, को लागू करने
  • अधिकांश प्लेटफार्मों स्मृति और/या स्ट्रीमिंग रीडर में एक है दर्द रहित है, तो आप बहुत अधिक स्मृति उपयोग
  • अधिकांश मंच एक XSLT tranformer प्रदान के बिना वास्तव में बड़ी फ़ाइलों को संभाल कर सकते हैं ताकि आप fil स्थानांतरित कर सकते हैं एक से दूसरे प्रारूप से तों, एक्सएमएल से यहां तक ​​कि गैर एक्सएमएल को
  • XML स्वरूप मान्य करने के लिए वास्तव में बड़ी फ़ाइलों को संभाल भी
  • एक्सएमएल है XSD के इससे पहले कि आप
  • एक्सएमएल सक्षम है इसे पढ़ने के लिए प्रयास करने के लिए के लिए का अनुक्रमण एक्सटेंशन नहीं है किसी भी साधारण या जटिल वस्तु का प्रतिनिधित्व करने के लिए
  • यदि आप फ़ाइल आकार के बारे में चिंतित हैं, तो बस अंतिम एक्सएमएल ज़िप करें।इस तकनीक को माइक्रोसॉफ्ट ऑफिस आदि
  • एक्सएमएल में प्रयोग किया जाता है मानव पठनीय
  • एक्सएमएल एक आम मानक
संबंधित मुद्दे

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