سؤال

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

كيف performant باستخدام شجرة الدليل كآلية من استمرار البيانات الأشجار ؟

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

المحلول

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

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

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

تحرير: لقد فعلت أشياء مماثلة مع ext3 وعن الخلفية CGI على الموقع. لا إعادة اختراع العجلة جعل النماذج أسرع وصيانة أبسط، يقرأ / يكتب / قفل تحجيمها بشكل جيد، <م> لكن تغييرات متكررة جدا - بناء على أمر من مئات في الثانية - إلى بنية الدليل نفسه عملت سيئة على تخزين الحقيقي . في النهاية أنا إعادة هيكلة الأمور حتى أن أجزاء من شجرة الدليل الذي من شأنه أن كثيرا جدا أن تضاف إدخالات الدليل / إزالة انتهى على وحدة تخزين tmpfs - بالنسبة لي هذه المجموعة من الدولة قد (بتكلفة) إعادة بنائها من أن المخزنة في تخزين أقل تقلبا بعد إعادة التشغيل. لدي خبرة قليلة من ZFS، ولا أعرف لديك نمط الاستخدام المقصود، لذلك لا أعرف إذا كان هذا سيكون مشكلة بالنسبة لك. تم أفعل الآن هذا لموقع جدا تستخدم بشكل كبير، وأنا ربما لفة بلدي اسمه مكتبة القفل بدلا من ذلك.

نصائح أخرى

هي الأمثل

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

وأيضا، فإن معظم أنظمة الملفات لديها كتلة تخصيص الحد الأدنى، عادة حوالي 2-8KB. إذا الأوراق الخاصة بك هي أصغر من ذلك بكثير، وعليك أن تكون إضاعة الكثير من الفضاء.

وباختصار، فإن أصغر الأوراق الخاصة بك، وأسوأ هذه الفكرة.

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

ممكن القضايا:

  • فإنه قد جعل الكفاءة في استخدام مساحة القرص (في العديد من أنظمة الملفات دليل هو ملف مثل تحتل كتلة كاملة على القرص...)
  • وسوف تكون بطيئة في القراءة/الكتابة لأنك تجعل العديد من ملفات النظام بالوصول
  • نظام الملفات مايو/فرض حدود على طول كل عنصر اسم و/أو الأحرف التي يمكنك استخدامها للحصول على أسماء
  • سيكون من السهل بالنسبة عمليات أخرى إلى إفساد البيانات الخاصة بك و/أو تتطلب قدرا كبيرا من تأمين تكلفة
  • عند استخدام الحالة الصلبة `الأقراص" هذا قد يؤدي إلى المزيد من يكتب من آخر أساليب وتقصير الحياة من وسائل الإعلام

خلاصة القول:قد لا يكون يستحق كل هذا العناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top