رفع الوسائط على قاعدة بيانات MongoDB باستخدام Express.js

السلام عليكم يا اخوان

أعمل على مشروع باستخدام Node.js وExpress.js وأستخدم قاعدة بيانات MongoDB وتطلَّب مني أن أضيف إليه خاصية لرفع الوسائط على قاعدة البيانات ولكن قبل أن أضيفها أردت أن أعرف ما هي أفضل طريقة لرفع الوسائط كالصور مثلًا على قاعدة بيانات مونجو؟

هل:

أنشئ مجلد خاص داخل المشروع ثم تُحفظ الصور عليه ويتم حفظ مساراتها فقط داخل قاعدة البيانات

أم:

يُحفظ الكود المصدري للصور مباشرة داخلها!

مع ذكر محاسن وعيوب كل منهما، وإذا توفرت طريقة ثالثة لا بأس من ذكرها أيضًا.


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

رغم ذلك، هنالك طريقة أخرى لحفظ هاته الصور، وهي بتكويدها وحفظها كسلاسل نصية مكودة/مشفرة في قواعد البيانات، ولكل من الطريقتين ميزات وعيوب نذكر منها:

عيوب الطريقة الأولى - استخدام أقراص التخزين لحفظها بشكلها Binary:

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

ميزاتها:

  • لامحدودية التخزين
  • تشكل ضغطا أقل على قواعد البيانات
  • معتمدة وأكثر احترافية
  • قابلة الأرشفة من محركات البحث
  • لا تأخذ مساحة من قواعد البيانات

أما عن عيوب الطريقة الثانية - حفظها كسلاسل مشفرة مثل Encoded base64 strings:

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

ميزاتها:

  • سهلة وسريعة للتطبيق

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

أشكرك كثيرا يا أخ عدنان كفيت ووفيت جزاك الله خيرًا