ما هو أفضل مكان لتخزين الصور التي تم تحميلها, SQL قاعدة بيانات أو ملف على القرص النظام ؟

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

سؤال

أنا أكتب أحد التطبيقات التي تسمح للمستخدمين بتحميل الصور على الخادم.أتوقع حوالي 20 صورة في اليوم الواحد كل jpeg و ربما لا تحرير/تغيير حجمها.(هذا هو سؤال آخر, كيفية تغيير حجم الصور على جانب الملقم قبل تخزينها.ربما شخص ما يمكن أن يرجى إسقاط .صافي الموارد التي في التعليق أو نحو ذلك).أتساءل الآن ما أفضل مكان لتخزين الصور التي تم تحميلها هي.

  • تخزين الصور كملف في نظام الملفات وإنشاء سجل في الجدول مع المسار الدقيق إلى تلك الصورة.

  • أو تخزين الصورة نفسها في جدول باستخدام "صورة" أو "البيانات الثنائية" نوع البيانات من قاعدة البيانات على الملقم.

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

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

المحلول

عموما أنا تخزين الملفات على نظام الملفات, منذ ذلك ما هناك ، على الرغم من أن هناك استثناءات.ملفات, ملف النظام هو الأكثر مرونة و performant الحل (عادة).

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

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

نصائح أخرى

الفائدة الوحيدة لهذا الخيار ب هو وجود جميع البيانات في نظام واحد ، بعد انها كاذبة فائدة!قد يجادل بأن التعليمات البرمجية الخاصة بك هو أيضا شكل من أشكال البيانات ، ولذلك أيضا يمكن تخزينها في قاعدة البيانات - كيف تريد ذلك ؟

إلا إذا كان لديك بعض حالة فريدة من نوعها:

  • منطق الأعمال ينتمي في التعليمات البرمجية.
  • البيانات المهيكلة ينتمي في قاعدة البيانات (العلائقية أو غير العلائقية).
  • البيانات الأكبر ينتمي في التخزين (الملفات أو غيرها).

Files, Code, Data

فإنه ليس من الضروري استخدام نظام الملفات للحفاظ على الملفات.بدلا من ذلك يمكنك استخدام التخزين السحابي (مثل الأمازون S3) أو البنية التحتية-كما-أ-الخدمة على أعلى من ذلك (مثل Uploadcare):

https://uploadcare.com/upload-api-cloud-storage-and-cdn/

ولكن تخزين الملفات في قاعدة البيانات هو فكرة سيئة.

فليكر استخدام نظام الملفات -مناقشة الأسباب هنا

لدينا عملاء الإصرار على الخيار ب (قاعدة بيانات التخزين) عدة مرات على عدد قليل من مختلف الخلفيات ، ونحن دائما انتهى الأمر الذهاب إلى خيار (الملفات التخزين) في نهاية المطاف.

كبيرة النقط هكذا فقط لم يتم التعامل معها بشكل جيد بما فيه الكفاية حتى من قبل SQL Server 2005 الذي هو آخر واحد حاولنا ذلك.

على وجه التحديد, لقد رأينا خطيرة سخام أعتقد تأمين المشاكل.

ملاحظة واحدة أخرى:إذا كنت تستخدم NTFS وحدات التخزين القائمة على (windows server ، الخ) قد تفكر في إيجاد طريقة وضع الآلاف و الآلاف من الملفات في دليل واحد.أنا لست متأكدا لماذا ولكن في بعض الأحيان لا يقوم نظام الملفات التعامل بشكل جيد مع هذا الوضع.إذا كان أي شخص يعرف المزيد عن هذا أنا أحب أن أسمع ذلك.

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

Images/2008/12/17/.jpg

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

تحرير: مجرد ملاحظة سريعة لمدة عام 2017 ، في إصدارات أحدث من SQL Server, هناك خيارات جديدة للتعامل مع الكثير من النقط التي من المفترض أن تجنب السلبيات ناقشت.

قد تم إنشاؤها مؤخرا PHP/MySQL التطبيق الذي يخزن ملفات Pdf/Word الملفات في الخلية الجدول (كبير مثل 40MB في الملف حتى الآن).

الايجابيات:

  • حملت الملفات يتم نسخها نسخا متماثلا إلى النسخ الاحتياطي ملقم جنبا إلى جنب مع كل شيء آخر ، لا منفصلة استراتيجية احتياطية مطلوب (راحة البال).
  • إعداد ملقم ويب أبسط قليلا لأني لا تحتاج إلى تحميل/ مجلد واقول كل ما عندي من التطبيقات حيث هو.
  • يمكنني استخدام المعاملات التعديلات لتحسين سلامة البيانات - أنا لا داعي للقلق حول اليتامى و الملفات المفقودة

سلبيات:

  • mysqldump الآن يأخذ looooong الوقت لأن هناك 500MB من ملف البيانات في الجداول.
  • عموما لا الذاكرة/وحدة المعالجة المركزية كفاءة بالمقارنة مع الملفات

كنت اتصل تنفيذ النجاح ، فإنه يأخذ الرعاية من النسخ الاحتياطي من المتطلبات و يبسط تخطيط المشروع.وأداء غرامة 20-30 الناس الذين يستخدمون التطبيق.

أعرف أن هذا هو آخر العمر.ولكن العديد من زوار هذه الصفحة هي الحصول على أي شيء ذات الصلة على السؤال.وخاصة بالنسبة للمبتدئ.

كيفية تحميل و تخزين الصور أو الملفات في موقعنا:

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

  1. الصور تأتي من المسؤول عن ديناميكية بلوق.عادة ما تكون هذه الصور قد تم الأمثل قبل التحميل.

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

من خلال تجاهل البند لا.1 أعلاه ، حل سريع البند لا.2 يمكن أن تكون مؤقتة حلها عن طريق النصائح التالية إذا لم يكن لديك صورة محسن وظائف في موقعنا :

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

  2. استخدام صورة المحاصيل وظيفة للمستخدمين تحميل الصور.هذا سيحد من حجم الصورة حتى للمستخدمين تحميل كبيرة جدا الملف.الصورة النهائية هي نتيجة اقتصاص الصورة.يمكننا تحديد حجم في جانب الخادم و تقبل فقط على سبيل المثال 500 كيلو بايت أو أقل.

الآن, هذا هو مؤقت فقط.من أجل الحل النهائي ويتكرر السؤال :

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

ما يمكننا القيام به ثم :

  1. تهاجر من حصة استضافة VPS.لا يكفي ؟ ثم من أعلى عن طريق رفع مستوى مخصص.

  2. إنشاء الخادم الخاص بك لتخزين الملفات.غوغلينغ أن تفعل ذلك.هذه ليست صعبة كما كنت أعتقد.بعض الناس تفعل ذلك على موقعه على الانترنت.

  3. الطريق السهل هو استخدام CDN خدمة تخزين الملفات.

حسنا, 1 و 2 هي مكلفة بعض الشيء.ولكن لا 3 أعتقد هو أفضل حل.

بعض خدمات CDN تسمح لك لتخزين العديد من الملفات على شبكة الإنترنت كما تريد.

السؤال: "كيف لتحميل ملف CDN من موقعنا؟"

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

بعض مقدمي يقدم لنا خدمة مجانية لمدة 14 يوما محدودة التخزين وعرض النطاق الترددي.ولكن هذا سيكون على ما يرام على نقطة البداية.المشكلة الوحيدة هي لأن الناس لا تحاول ابدا'.

ونأمل أن تساعد لمبتدئ.

يمكنني استخدام الصور التي تم تحميلها على موقع الويب الخاص بي و أود أن أقول بالتأكيد الخيار).

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

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

بالتأكيد تغيير حجم الصورة ، وتحقق أنه شكل إذا كنت تستطيع.كانت هناك حالات من الملفات الخبيثة التي تم يخدمها غير قصد المضيفين - على سبيل المثال ، GIFAR الضعف يسمح لك لإخفاء برنامج java الخبيثة في ملف GIF, والتي سوف تكون بعد ذلك قادرة على قراءة ملفات تعريف الارتباط في السياق الحالي وإرسالها إلى موقع آخر عبر الموقع البرمجة الهجوم.تغيير حجم الصور عادة ما يمنع هذا ، كما munges جزءا لا يتجزأ من التعليمات البرمجية.في حين أن هذا الهجوم قد تم إصلاحها من خلال JVM بقع بسذاجة تخدم ما يصل الملفات الثنائية دون الغسل عليها يفتح لك ما يصل إلى مجموعة كاملة من نقاط الضعف.

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

معظم تطبيقات هي الخيار الاول

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

لا أعتقد أن الفضاء كثيرا من قضية...تيرابايت محركات الأقراص بضع مئات من الدولارات الآن.

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

لصناعة السيارات في تغيير الحجم, حاول يماغيماغيك...انها تستخدم في العديد من كبرى محتوى مفتوح المصدر/صور نظم إدارة...وأعتقد أن هناك بعض .صافي امتداد لذلك.

هناك نوع من النهج الهجين في SQL Server 2008 يسمى filestream نوع البيانات الذي كان تحدث عن RunAs راديو #74, الذي هو نوع من مثل أفضل من كلا العالمين.معظم الناس ليس لديهم 2008 otion, ولكن إذا كنت تفعل هذا الخيار يبدو باردا جدا

هذا هو أساسا أفعل.

  1. متجر صورة تم تحميلها في دليل مؤقت أو الذاكرة.
  2. عملية الصورة قبل تخزينها بشكل دائم.2.1.التصحيحات اللون 2.2.ضغط 2.3.إنشاء عدة نسخ على أساس أبعاد الصورة 2.4.إعادة تسمية مع .xl, .إل جي،.md, .sm الخ.اللواحق
  3. حزمة معالجة كافة ملفات صورة (من ملف واحد) داخل مجلد مع اسم المجلد كما id والتي سيتم تخزينها في قاعدة البيانات في أي صف/الوثيقة جنبا إلى جنب مع image file name (أو قد تكون عشوائية الاسم مثل اسم الصورة).
  4. إنشاء yyyy/mm/d path المجلد إذا لا وجود لها.على سبيل المثال 2016/08/21.تذكر أن الطريق وتخزينها في قاعدة بيانات على نفس الوثيقة في الصف.
  5. تتحرك الصورة id المجلد path المجلد.(مسار المجلد قد يكون موجودا في /فار/على شبكة الإنترنت محتوى المجلد.)
  6. مسح المخزن المؤقت الذاكرة أو حذف الملفات المؤقتة.

عندما تحتاج إلى الوصول إلى أي الصورة المذكورة في مستند لديك مسار معرف المجلد من على الصور.على سبيل المثال /var/web-content/{{path}}/{{id}}/image-file-name.sm.jpg

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

نحن نستخدم A.وأود أن وضعه على محرك أقراص مشترك (إلا إذا كنت لا تخطط تشغيل ملقم واحد أو أكثر).

إذا كان الوقت عندما يأتي هذا لن الحجم بالنسبة لك فيمكنك التحقق من آليات التخزين المؤقت.

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

ميزة أخرى هي قاعدة البيانات الخاصة بك النسخ الاحتياطي/النسخ المتماثل ستكون وحشية.

الخيار الاول

مرة واحدة تحميل الصورة يمكنك التحقق من الشكل وحجمه قبل الحفظ.هناك عدد من .صافي نماذج التعليمات البرمجية لتغيير حجم الصور على http://www.codeproject.com.على سبيل المثال: http://www.codeproject.com/KB/cs/Photo_Resize.aspx

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

حسنا, لدي مشروع مماثل حيث يمكن للمستخدمين تحميل الملفات على الخادم.بموجب وجهة نظري ، خيار) هو الحل الأفضل نظرا لأنها أكثر مرونة.ما يجب عليك فعله هو تخزين الصور في مجلد محمي مصنفة حسب الدلائل.الدليل الرئيسي يجب أن تقام من قبل المسؤول عن المحتوى يجب أن لا تشغيل البرامج النصية (مهم جدا) و (قراءة, كتابة) محمية لمدة لا يكون accesible في طلب http.

آمل أن يساعد هذا لك.

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

إذا كانت الملفات كبيرة أو تتطلب ثابت التحرير ، وخاصة من البرامج مثل مكتب, ثم الخيار هو أفضل رهان.

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

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

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