سؤال

نحن نقوم بإنشاء موقع ASP.NET MVC سيحتاج إلى تخزين مليون صورة+ حوالي 2K-5K في الحجم. من Ressearch السابق ، يبدو أن خادم الملفات ربما يكون أفضل من DB (لا تتردد في التعليق خلاف ذلك).

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

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

المحلول

4 كيلو بايت هو حجم الكتلة الافتراضي لـ NTFS. يمكنك ضبط هذه الإعدادات اعتمادًا على حجم الصورة المعتاد.http://support.microsoft.com/kb/314878

أود أن أبني شجرة مع دلالة فرعية لتتمكن من الانتقال من FS إلى آخر: كم عدد الملفات التي يمكنني وضعها في دليل؟وتجنب بعض القضايا: http://www.frank4dd.com/howto/various/maxfiles-per-dir.htm

يمكنك أيضًا الحصول على أرشيفات تحتوي على صور مرتبطة لتحميلها مع ملف واحد فقط. قد يتم ضغط أرشيفات thoss هو عنق الزجاجة هو I/O ، غير مضغوط إذا كانت وحدة المعالجة المركزية.

من الأسهل صيانة DB ولكنها أبطأ ... لذلك الأمر متروك لك!

نصائح أخرى

أنظر أيضا سؤال خطأ الخادم هذا لبعض النقاش حول هياكل الدليل.

المشكلة ليست أن نظام الملفات غير قادر على تخزين العديد من الملفات في الدليل ، ولكن إذا كنت ترغب في الوصول إلى هذا الدليل باستخدام Windows Explorer ، فسوف يستغرق الأمر إلى الأبد ، لذلك إذا كنت ستحتاج إلى الوصول يدويًا إلى هذا المجلد ذلك ، على سبيل المثال مع دليل لكل 2-3 أحرف/أرقام من الاسم أو حتى بنية أعمق.

إذا تمكنت من تقسيم ذلك في مجلدات 1K مع ملفات 1K ، فسيكون كل منها أكثر من كافية ، والرمز للقيام بذلك بسيط للغاية.

بافتراض NTFS ، هناك حد 4 مليار ملف لكل وحدة تخزين (2^32 - 1). هذا هو الحد الإجمالي لجميع المجلدات الموجودة على مستوى الصوت (بما في ذلك ملفات نظام التشغيل وما إلى ذلك)

لا ينبغي أن تكون أعداد كبيرة من الملفات في مجلد واحد مشكلة ؛ يستخدم NTFS شجرة B+ لاسترجاعها السريع. توصي Microsoft بتعطيل توليد الأسماء القصير (الميزة التي تسمح لك باسترداد mypictureofyou.html كما mypic ~ 1.htm).

لا أعرف ما إذا كانت هناك أي ميزة أداء لتقسيمها إلى أدلة متعددة ؛ أظن أنه لن تكون هناك ميزة ، لأن NTFs تم تصميمها للأداء مع الدلائل الكبيرة.

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

لن أستبعد باستخدام شبكة تسليم المحتوى. وهي مصممة لهذه المشكلة. لقد حققت الكثير من النجاح مع Amazon S3. نظرًا لأنك تستخدم حلًا قائمًا على Microsoft ، فقد يكون Azure مناسبًا.

هل هناك نوع من المتطلبات التي تمنعك من استخدام حل طرف ثالث؟

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