آیا باید فایل را در دیتابیس ذخیره کرد؟ اگر آره چه دیتابیسی؟

یه سوالی که توی طراحی نرم افزار پیش میاد اینه که اگر قرار باشه وب اپلیکیشن فایل آپلود کنه و ذخیره کنه باید توی دیتابیس ذخیره بشه یا نه در یک دایرکتوری بمونه؟ اگر در یک دایرکتوری بمونه بعدا که یکی قرار شد از توی نرم افزار اونو دانلود کنه بک اند نرم افزار چطور باید اونو پیدا کنه؟ اگر فایل حجیم بود داستان چیه؟ اگر قراره فایل ها توی دیتابیس ذخیره بشن از چه دیتابیسی باید استفاده بشه؟ MySQL, Postgresql, MongoDB یا چی؟

از آخر بگم. بهترین راه حل برای ذخیره سازی فایل توی یک وب اپلیکیشن معمولی اینه که فایل رو توی دیتابیس ذخیره نکنیم و مسیر آپلود فایلها رو توی دیتابیس ذخیره کنیم مثلا یه فولدر /doc کنار پروژه هست که وقتی فایل رو میخایم دانلود کنیم بک اند URLROOT رو به اول این دایرکتوری میچسبونه و فایل رو دانلود میکنید. توضیحات خوبی توی این لینک هست.

حالا فرض کنید میخاید فایل رو توی دیتابیس به صورت بایناری ذخیره کنید. نیازمندی پروژه اینه که باید ذخیره بشه که این یه سری pros and cons داره:

چرا باید فایل توی دیتابیس ذخیره بشه؟

1.اگر به صورت دوره ای از دیتابیس بک آپ گرفته بشه فایلها هم توش هست

2.اگر توی دیتابیس ذخیره نشه و لینک دیتابیس پاک شه فایل ها بی صاحب orphaned میشن

3.اگر توی دیتابیس ذخیره نشه آپدیت شدن داکیومنت ها سخت میشه و البته با ذخیره سازی توی دیتابیس ACID هم هست

چرا نباید توی دیتابیس ذخیره بشن؟ به دلایل زیاد

1.اگر حجم فایل از حدی زیادتر بشه دیگه باید بریم سمت دیتابیس های خاص چون هر دیتابیس ساپورت نمیکنه

2.حجم دیتابیس زیاد میشه و توی پرفورمنس query ها به شدت تاثیر میزاره

3.ذخیره سازی فایل توی دیتابیس به صورت بایناری و استفاده از دیتابیس های خاص به دانش بیشتری احتیاج داره و البته زمان توسعه زیاد میشه

جزئیات بیشتر رو توی این لینک ببینین

از چه دیتابیسی باید استفاده کنیم؟

MongoDB دیتابیس Non-relational و NoSQL هست. Postgres و MySQL دیتابیس Relational پس اگر روابط بین دیتاها زیاده و در یک کلام جدولهاتون با هم رابطه دارن سمت MongoDB نرید. اگر یه اپلیکیشن ساده دارین که کارش ذخیره سازی فایلهای خیلی حجیم و دانلود اونهاست سمت Mongo برید. البته اونجا باید از افزونه GridFS هم استفاده کنید که جزئیات توی این لینک هست.

چرا نباید سمت Mongo بریم؟

1.پیاده سازی سخت و پیچیده و زمانبر

2.درصورت جدولهای رابطه ای

3.درصورتی که query هایی مثل JOIN داریم

4.در صورت جدولهای normalize شده

و… لینک های زیر هم دلایل بیشتری آوردن

لینک 1

لینک 2

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *