سؤال

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

لقد وجدت سؤالاً مشابهاً لهذا هنا: تخزين الصور في قاعدة البيانات:نعم أو لا, ، ولكن الإجابات المقدمة كانت موجهة أكثر نحو الأشخاص الذين يتوقعون عدة آلاف أو حتى ملايين الصور، في حين أنني مهتم أكثر بالصور الصغيرة (قد تصل ملفات JPEG إلى 150 × 150 بكسل)، والأعداد الصغيرة منها:ربما يصل إلى ألف أو ألفين.

ما هي المشاعر حول DB BLOB vs Filesystem لهذا السيناريو؟ كيف يتعامل العملاء مع التخزين المؤقت للصور من قاعدة البيانات مقابل نظام الملفات؟

إذا كانت كائنات تخزين البيانات الكبيرة (BLOBs) المخزنة في قاعدة البيانات هي الحل الأمثل - فهل هناك أي شيء يجب أن أعرفه أين لتخزينها؟نظرًا لأنني أتخيل أن غالبية المستخدمين لن يقوموا بتحميل صورة، فهل يجب علي إنشاء ملف user_pics الجدول إلى (الخارجي) ينضم إلى العادي users الجدول عند الحاجة؟


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

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

المحلول

للرد على أجزاء من سؤالك:

<اقتباس فقرة>   

وكيف عملاء تذهب مع الصور التخزين المؤقت من DB مقابل من الملفات؟

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

لنظام الملفات: تفعل الشيء نفسه، ولكن مع مرور الوقت للملف تعديل

<اقتباس فقرة>   

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

وأود أن وضع BLOB والبيانات الوصفية ذات الصلة في الجدول الخاص بها، مع نوع من العلاقة بينه وبين الجدول المستخدم الخاص بك. وسوف نفعل ذلك يجعل من الاسهل لتحسين طريقة تخزين جدول للبيانات الخاصة بك، يجعل الأمور أرتب، ويترك مجالا لالتوسعة (مثلا "ملفات" العامة الجدول).

نصائح أخرى

وأنا واجهت مرة واحدة في سؤال مماثل مع DMS صغيرة لملفات PDF. كان السيناريو يختلف عن لك: كحد أقصى قد يكون 100 ملفات ذات أحجام تصل إلى 10 MB كل - غير ما تتوقع للحصول على صور الملف الشخصي. ولكن الجواب أعطى صديق لي في ذلك الوقت تنطبق على حالتك أيضا:

<اقتباس فقرة>   

استخدم كل نظام لتخزين ما تم تصميمه للقيام به.

     

ومخزن <م> بيانات في قاعدة البيانات . مخزن <م> الملفات في نظام الملفات .

وهذه ليست هي الحل النهائي (*)، ولكن لها قاعدة جيدة من التجربة بالنسبة للمبتدئين.

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

و(*) وأنا أعلم، وأنا أعلم، 42 ...

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

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

إذا كنت على MSSQL تأكد من أن يتم تخزين النقط في ملف بيانات منفصلة. ليس في PRIMARY ككل شيء آخر.

في ويندوز، وضعت بقدر ما تستطيع في قاعدة البيانات. نظام الملفات بطيئة بعض الشيء، وأحيانا لا يمكن الاعتماد عليها.

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

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

في نظام الملفات، يمكنك تشغيل الأدوات الأخرى على البيانات الخاصة بك وهو غير ممكن إذا تم تخزين الملفات في DB.

سأقوم بتخزينها في قاعدة البيانات:

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

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

وأعتقد أن هناك ميزة managability تخزينها في قاعدة البيانات. أنها يمكن أن تكون احتياطيا واستعادتها باستمرار مع البيانات الأخرى - أنك لن تنسى لحذف تلك التي عفا عليها الزمن (حسنا، ربما كنت، لكنه قليلا أقل احتمالا)، وإذا ترحيل قاعدة البيانات إلى جهاز آخر، والصور تذهب مع ذلك.

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