أفضل الممارسات لهياكل الملفات المخصصة

StackOverflow https://stackoverflow.com/questions/600708

  •  03-07-2019
  •  | 
  •  

سؤال

أشعر حاليًا بالفضول لمعرفة كيفية قيام المبرمجين الآخرين بتنظيم البيانات في ملفات.هل يمكن لأي شخص أن يوصي بأي مقالات أو كتب جيدة حول أفضل الممارسات لإنشاء هياكل الملفات؟

على سبيل المثال، إذا قمت بإنشاء برنامج خاص بك لأي غرض كان، فهل تترك البيانات المحفوظة كنص عادي، وتقوم بتسلسلها، وترميزها إلى ملف XML، ولماذا تفعل ذلك؟

هل هناك أي أسرار فاتني؟

هل كانت مفيدة؟

المحلول

وعموما، انتقل مع أبسط شيء ربما يمكن أن تعمل، على الأقل في البداية. تنظر، على سبيل المثال، UNIX، حيث ان معظم ملفات التكوين ليست سوى حقول محددة whitepace، أو حقول محددة مع حرف آخر (مثل / الخ / باسود، والذي يستخدم ":" المحددات لأن الحقل GCOS يمكن أن تحتوي على فراغات.)

إذا البيانات الخاصة بك يحتاج الكثير من الهيكل، ثم اسأل نفسك "ما هي الأدوات التي يمكنني استخدامها بسهولة؟" بايثون وروبي ديك JSON وYAML، على سبيل المثال.

وXML مفيد بشكل أساسي إذا كان لديك الكثير من الاشياء على أساس XML بالفعل، أو تتوقع أن تحويل XML إلى شكل للعرض في مستعرض. خلاف ذلك، انها عادة ما تكون من الوزن الثقيل جدا (رمز حجم والتعقيد) ما تحصل عليه من ذلك.

نصائح أخرى

بغض النظر عن التنسيق الذي تختاره، تذكر تخزين نوع من رقم الإصدار بداخله (أنا متأكد تمامًا من أنه سيتعين عليك إدخال بعض التغييرات).

يعتمد التنسيق بشكل كبير على التطبيق وكمية البيانات.بالنسبة لبعض التطبيقات، يكون XML مناسبًا، أما بالنسبة للتطبيقات الأخرى، فإن بنيات الحجم الثابت المخزنة في ملف ثنائي تكون جيدة.

أستخدم العديد من التنسيقات المختلفة، اعتمادًا على الموقف، على سبيل المثال:

  • ملف نص عادي (محدد) لتخزين مجموعات البيانات لتحليل Matlab وR
  • الملفات الثنائية - لتخزين الهياكل ذات الحجم الثابت (مع الحجم الديناميكي، يصبح الوصول العشوائي صعبًا دون الحفاظ على مجموعة منفصلة من الإزاحات للعناصر).من الإيجابيات أن لديك الأداء وكفاءة المساحة (لماذا تقوم معظم قواعد البيانات بتخزين البيانات بتنسيق ثنائي؟)، ولكنها ليست جيدة جدًا للبشر للعمل بها.تذكر النهاية.
  • XML - عادةً لبيانات التكوين، أو البيانات التي أريد تقديمها لتطبيقات المستخدمين الآخرين (جنبًا إلى جنب مع XSD).يمكن للجانب الآخر كتابة تحويل XSLT لطيف أو استهلاك البيانات بطريقة أخرى (بالطبع يمكنهم فعل الشيء نفسه مع نص عادي أو بيانات ثنائية في ضوء وصف التنسيق)

وإذا لم لديك متطلبات فريدة من نوعها، استخدام شيء التي يوجد بالفعل مكتبة ناضجة، حتى تتمكن من تجنب كتابة التعليمات البرمجية التوزيع الخاصة بك. وهذا يعني XML / JSON وغيرها، مثل الناس وقال.

واحدة واحدة لطيفة أخرى هو مخازن بروتوكول جوجل ( http://code.google.com/p/ protobuf ). هناك أن تكتب تعريف رسالة المشترك ومترجم عازلة بروتوكول يولد الأجسام لملء، تسلسل، وdeserializing البيانات بالنسبة لك. عادة الشكل هو ثنائي، ولكن يمكنك استخدام الطبقة TextFormat لكتابة نص عادي مثل JSON جدا. والشيء الجميل في protobufs هو أن يتم إنشاء رمز الإصدارات بالنسبة لك. في الإصدار 2 من تنسيق الملف الخاص بك، كل ما عليك القيام به هو إضافة حقول إلى ملف تعريف .proto. النسخة الجديدة يمكن قراءة تنسيق الملف القديم، ومجرد ترك حقول جديدة فارغة. ليس بالضبط ما تم تصميمه protobufs ل، لكنها تجعل بصيغة سهلة وفعالة ثنائي ملف للرسائل مخصصة، ويتم إنشاء رمز بالنسبة لك.

وانظر أيضا في الفيسبوك التوفير ، والآن في حاضنة أباتشي.

وكما مرت السنين لقد وجدت نفسي النص أكثر وأكثر لصالح ما لم يكن ببساطة غير وارد. وحدة المعالجة المركزية سريع بما فيه الكفاية الآن أن نتمكن من فك ذلك بسرعة كافية.

من الواضح، عندما يكون لديك كثير من الأحيان لتحديث قطع صغيرة من المعلومات داخل ملف كبير هذا ليس خيارا - ولكن هذا على الأرجح يصف قاعدة بيانات

وسيكون اتخاذ موقف غير عادي في هذه المرحلة أن يجعلني أذهب مع شيء آخر غير واحد من هذين الخيارين.

و+1 لXML. لديه فوق قليلا، ولكن من السهل تحليل والقراءة والتصحيح. يمكن أن تكون صارمة، إذا كنت تستخدم المخطط. من السهل تحويل مع XSLT، والمحمولة للغاية (في السلك أو فقط في قياس جميع الترددات:)

هذا يعتمد حقا على الوضع الخاص.ستحتاج إلى النظر في خياراتك مقابل إجابات الأسئلة المختلفة:

  • ما مقدار البيانات التي تحتاج إلى تخزينها؟هل تحتاج إلى تحسين التمثيل المضغوط؟
  • هل أداء القراءة/الكتابة أمر بالغ الأهمية؟هل تحتاج إلى تحسين الوصول إلى القرص والتسلسل وإلغاء التسلسل منخفض التأثير؟
  • هل تحتاج إلى وصول عشوائي داخل الملف؟هل تحتاج إلى تحسين البنية للبحث داخل البيانات؟
  • هل سيتم استخدام هذه البيانات عبر أنظمة مختلفة، ربما بترميز أحرف مختلف؟هل تحتاج إلى تحسين قابلية النقل؟

سيكون لطبيعة البيانات نفسها تأثير.هل هو هيكل قائمة مسطحة؟هل هي شجرة؟هل هو رسم بياني دوري؟هل السجلات ذات عرض ثابت أم متغير؟

بمجرد معرفة الإجابات على هذه الأسئلة، يمكنك الاختيار من بين خياراتك، مع إبقائها بسيطة قدر الإمكان.غالبًا ما تناسب الخيارات الشائعة (XML، وCSV، وYAML) أغراضك.إذا لم يكن الأمر كذلك، فسيتعين عليك تطوير التنسيق الخاص بك وإجراءات الكتابة والقراءة الخاصة بك.

هناك الكثير من الاحتمالات، ولكن الأكثر واقعية هو لغة XML

  • توجد مكتبات XML مناسبة لكل منصة تطوير تقريبًا
  • تسمح معظم الأنظمة الأساسية بتسلسل الرسوم البيانية للكائنات باستخدام سطرين من التعليمات البرمجية، لذلك يكون تنفيذ XML سهلاً
  • تحتوي معظم الأنظمة الأساسية على ذاكرة داخلية و/أو قارئ تدفق، حتى تتمكن من التعامل مع الملفات الكبيرة حقًا دون استخدام الكثير من الذاكرة
  • توفر معظم الأنظمة الأساسية محول XSLT، بحيث يمكنك نقل الملفات من تنسيق إلى آخر، حتى من XML إلى غير XML
  • هناك ملحق فهرسة لـ XML للتعامل مع الملفات الكبيرة جدًا أيضًا
  • يحتوي XML على XSD للتحقق من صحة التنسيق قبل محاولة قراءته
  • XML قادر على تمثيل أي كائن بسيط أو معقد
  • إذا كنت قلقًا بشأن حجم الملف، فما عليك سوى ضغط ملف XML النهائي.يتم استخدام هذه التقنية في Microsoft Office وما إلى ذلك
  • لا يزال XML قابلاً للقراءة من قبل الإنسان
  • XML هو معيار مشترك
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top