الكثير من الملفات الصغيرة أو اثنين من الملفات الضخمة؟

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

سؤال

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

أنا مهتم بشكل أساسي بأداء القراءة.نظام الملفات الخاص بي حاليًا هو ext3 على Linux (Ubuntu Server Edition إذا كان الأمر مهمًا)، على الرغم من أنني في وضع لا يزال بإمكاني التبديل فيه، لذا فإن المقارنات بين أنظمة الملفات المختلفة ستكون رائعة.لأسباب فنية، لا يمكنني استخدام نظام إدارة قواعد البيانات الفعلي لهذا الغرض (وبالتالي السؤال)، لذا فإن "مجرد استخدام MySQL" ليس إجابة جيدة.

شكرًا مقدمًا، وأخبرني إذا كنت بحاجة إلى أن أكون أكثر تحديدًا.


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

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

المحلول

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

دعنا نقول أنك كذلك تبحث عن سلسلة من النص الواردة في ملف نصي.البحث أ ملف 1 تيرابايت سوف يكون أسرع بكثير من الافتتاح ملفات 1,000,000 ميجابايت والبحث من خلال تلك.

كل تستغرق عملية فتح الملف وقتًا.يجب فتح الملف الكبير مرة واحدة فقط.

وفي الاعتبار أداء القرص, ، من المرجح أن يكون هناك ملف واحد مخزنة بشكل متجاور من سلسلة كبيرة من الملفات.

...مرة أخرى، هذه تعميمات دون معرفة المزيد عن تطبيقك المحدد.

يتمتع،

روبرت سي.كارتينو

نصائح أخرى

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

إذا اخترت حل الكثير من الملفات، أقترح عليك بنية مثل

b/a/bar
b/a/baz
f/o/foo

لأن لديك حدودًا لعدد الملفات في الدليل.

المشكلة الرئيسية هنا TMO تتعلق بالفهرسة.إذا كنت ستبحث عن معلومات في ملف ضخم بدون فهرس جيد، فسيتعين عليك فحص الملف بأكمله بحثًا عن المعلومات الصحيحة التي قد تستغرق وقتًا طويلاً.إذا كنت تعتقد أنه يمكنك بناء آليات فهرسة قوية، فلا بأس، يجب عليك استخدام الملف الضخم.

أفضل تفويض هذه المهمة إلى ext3 الذي يجب أن يكون جيدًا فيها.

يحرر :

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

تؤكد المقالة أيضًا صحة الادعاء حول 32 ألف ملف لكل حد دليل (بافتراض أن مقالة ويكيبيديا يمكنها التحقق من صحة أي شيء)

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

سيكون تفضيلي هو الملفات الكبيرة العديدة.في الواقع، لماذا يوجد عدة وحدات على الإطلاق، إلا إذا كانت نوعًا ما من الوحدات المنفصلة منطقيًا؟إذا كنت لا تزال تقسمها فقط من أجل تقسيمها، فأنا أقول لا تفعل ذلك.يمكن لـ Ext3 التعامل مع الملفات الكبيرة جدًا بشكل جيد.

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

لقد قمنا أيضًا بتشغيل النظام على ext3، وكان يعمل بشكل جيد، على الرغم من أنني لست متأكدًا مما إذا كنا قد تجاوزنا حوالي مليون ملف.ربما نحتاج إلى الانتقال إلى نظام 3 أدلة نظرًا لوجود الحد الأقصى من الملفات لكل قيود الدليل.

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