استراتيجيات تخزين الملفات لموقع استضافة الويب

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

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

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

عندما سيتم أرشفة الملف، فكرت في ثلاث استراتيجيات.الأول هو الاحتفاظ بجميع الملفات التي تم تحميلها من بيانات معينة في مجلد واحد.(2006/sept/04, 2008/jan/05) والآخر هو الاحتفاظ بمجلد والاستمرار في ملئه حتى يصل الحد الأقصى لعدد الملفات التي أريد الاحتفاظ بها في المجلد ثم إنشاء ملف آخر (/folder001/, /folder002/, /folder003/، إلخ.).هناك طريقة أخرى تتمثل في إنشاء مجلدات فرعية بمجرد وصولها إلى حد ما.لذا مثل (/j/jd/jde/jdelator) لقد رأيت هذا في نظام التشغيل Unix ولست متأكدًا من كيفية شرح ذلك.

الأسئلة التي لدي هي ما نوع الاستراتيجيات التي وجدتموها مفيدة أو استخدمتموها؟

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

المحلول

عندما يتم تجريد البيانات، سأختار شيئا مثل: filename + millisec();من غير المحتمل أن تكون مكالمتان للملي ثانية متماثلتين، ويكون اسم الملف أكثر سهولة في الاستخدام عند الوصول.

يمكن أن تكون استراتيجية التاريخ ملائمة إذا قررت إزالة الملفات القديمة وغير المستخدمة:ما عليك سوى الحصول على مجلد 2006، وإزالة كل ما لم يتم الوصول إليه في العام الماضي، وفقًا لسجلك.يمكن أن يكون هذا أيضًا مؤشرًا جيدًا للمستخدمين، حيث سيعرفون ما إذا كان الملف جديدًا أم لا.المجلد XYZ هو مجرد نسخة مختلفة من هذا المجلد، حيث يتم استبدال التاريخ بعلامة لكل N من الملفات.

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

الاحتمال الآخر هو استخدام قاعدة بيانات مع UID المطابق لموقع اسم الملف والوصول إلى الملف من خلاله http://server.com/UID/filename.txt .بهذه الطريقة، يحفظ المستخدم الملف باسم "filename.txt" وهو ما يناسبه، ويمكنك معرفة عنوان URL مكان العثور على الملف (باستخدام قاعدة البيانات لتحويل UID إلى الموقع).لاحظ أن UID يمكن أن يكون مجموعًا اختباريًا (MD5، SHA-1) للتعامل مع التكرارات من نفس الملف.

نصائح أخرى

سأصوت مع المرشد في قاعدة البيانات ثم استخدم رأس Content-Disposition لتسميته مرة أخرى باسم الملف الأصلي إذا لزم الأمر.شيء واحد أود أن أؤيده هو أن المجلدات التي تستخدمها يتم تخزينها خارج جذر الويب؛لا تريد أن يقوم المستخدمون بتحميل الملفات إلى مجلدات التطبيق الخاص بك.

لقد استخدمت قاعدة بيانات علائقية تقوم بوضع علامات معرف (int) على uuids التي تمثل اسم الملفات.بهذه الطريقة لا يهم كيفية وجودهم على القرص.يساعدني على تشويش الملفات.كما يمكنني بعد ذلك استخدام JOINs "لإعادة تسمية" الملف بشكل تعسفي.أيضا ، يمكنني استخدام "أسماء" ملفات مختلفة. كل هذا يتوقف على تطبيقك ومكان تشغيله.

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

على أية حال، التغيير أمر لا مفر منه، وأفضل شيء يمكنك القيام به الآن هو الاختيار بعض الإستراتيجية وتوثيق كل شيء.

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