it-swarm.asia

هل من الأفضل تخزين الصور في BLOB أو عنوان URL فقط؟

تكرار محتمل:
ملفات - في قاعدة البيانات أم لا؟

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

هل كانت هذه خطوة ذكية؟ ماذا ستفعل في مكاني؟

38
eiefai

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

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

قم بالبحث واكتشف ما هو مهم بالنسبة لك واختر الاتجاه بناءً على هذا الاختيار.

30
Eric Humphrey - lotsahelp

السبب وراء استخدام BLOBs هو ببساطة سهولة الإدارة - لديك طريقة واحدة بالضبط لاستعادة قاعدة البيانات واستعادتها ، يمكنك بسهولة إجراء نسخ احتياطي تزايدي ، لا يوجد خطر على الصورة وبيانات التعريف المخزنة في جداول DB التي تخرج من المزامنة ، لديك أيضًا واجهة برمجة واحدة لتشغيل الاستعلامات أو تحميل/حفظ الصور ، لذلك لا تحتاج إلى منح الوصول إلى نظام ملفات العملاء عن بعد وتعلم أن نفس المنح ستنطبق على الصور والبيانات المرتبطة بها. بالإضافة إلى أن لديك طريقة واحدة لإدارة التخزين (على سبيل المثال في Oracle ، يمكنك وضع كل شيء على ASM واستخدام Oracle كـ LVM لكل شيء).

تطبيق آخر هو مزج البيانات العلائقية مع كائنات متسلسلة (يمكن أن يكون BLOB أي ثنائي ، لا يحتاج إلى صور). أو يمكنك تشغيل استعلام مقابل بيانات العلاقة والبايتات x-y في BLOB ، والتي قد تكون رأس ملف على سبيل المثال. التطبيقات في الواقع لا نهاية لها.

إذا كان الوصول إلى BLOB أبطأ من الوصول إلى نظام الملفات ، فمن المحتمل جدًا أن يكون قد تم تكوين قاعدة بياناتك بشكل خاطئ.

17
Gaius

لا أستخدم النقط - غالبًا من منظور النسخ الاحتياطي والاستعادة ، لأنني لا أريد أن تبطئ بيانات النقطة من النسخ الاحتياطية.

لا أقوم بتخزين عنوان URL كامل ، ولكن ... أقوم فقط بتخزين مسار الملف أسفل نقطة معينة ، وأنشئ المسار حيث لدي أكثر من طريقة يمكن للأشخاص والبرامج من خلالها الوصول إلى ملفاتي (FTP ، HTTP ، دليل محلي ، شنت أدلة NFS).

... بالطبع ، من المحتمل أن أتعامل مع صور أكبر وأكبر من معظم الناس ... تحصل إحدى مجموعات البيانات الخاصة بي على حوالي 700 جيجابايت من الصور (مضغوطة) في اليوم. ولكن حتى الصور المصغرة لتلك الصور ، ما زلت أتخزن خارجيًا.

13
Joe

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

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

8
Wyatt Barnett

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

8
j.p.

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

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

5
phred

هل كانت هذه خطوة ذكية؟

إذا كانت حركة ذكية أم لا ، فهذا يعتمد على حالتك المحددة:

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

ولكن كما لو كان تطبيقك مبنيًا بطريقة عليك ببساطة توجيه دليل الملفات وكان منطق الوصول إلى الملفات ديناميكيًا ، فقد قمت بحركة ذكية للأسباب التالية:

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

  • عادة ما يكون تخزين الملفات أرخص من تخزين قاعدة البيانات.

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

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

  • سيؤدي تخزين ملف قاعدة البيانات إلى إبطاء و/أو فوضى النسخ الاحتياطية الدورية لقاعدة البيانات.

ماذا ستفعل في مكاني؟

سأحتفظ بهذا القرار ما لم يظهر عامل مهيمن مخالف.

امل ان يساعد.

4
marcio