۱۳۸۸/۰۶/۱۰

ذخيره سازي فايل‌ها در ديتابيس يا استفاده از فايل سيستم متداول؟


اگر به ساز و كار شيرپوينت مايكروسافت دقت كنيد، همه چيز را داخل ديتابيس ذخيره مي‌كند (از اطلاعات ركوردها گرفته تا فايل‌ها و غيره). حال شايد اين سؤال مطرح شود كه براي ذخيره سازي فايل‌هايي با تعداد بيش از يك ميليون عدد، استفاده از ديتابيس مناسب است يا فايل سيستم متداول. براي پاسخ به اين سؤال بايد به نكات ذيل توجه داشت:

- هر نوع عملياتي كه بر روي فايل‌ها صورت گيرد، بستن، بازكردن و غيره، نيازمند اعمالي در سطح سيستم عامل است (براي مثال بررسي سطح دسترسي لازم براي انجام اين‌كارها).
- هر گونه عملياتي بر روي فايل‌ها نيازمند يك حداقل قفل گذاري بر روي آن‌ها است كه اين نيز مصرف CPU قابل توجهي را سبب خواهد شد.
- تمامي اعمال ذكر شده كل سرور و تمامي سرويس‌هاي در حال اجرا را تحت تاثير قرار داده و بازدهي آن‌ها‌را كاهش مي‌دهند.
- حتي سيستم عامل‌ها نيز از يك file system database جهت مديريت اعمال خود استفاده مي‌كنند اما اين روش براي مديريت ميليون‌ها و ميلياردها فايل بهينه سازي نشده است.
- ذخيره سازي ميليون‌ها و ميلياردها فايل به تدريج سبب ايجاد fragmentation قابل توجهي شده و اين مورد نيز بر روي كارآيي تاثير منفي خواهد گذاشت (همچنين اين مورد بر روي طول عمر تجهيزات ذخيره سازي داده‌ها تاثير منفي دارند).
- تهيه پشتيبان و بازگرداندن ميليون‌ها فايل بسيار زمانگير است (براي مثال جابجايي يك فايل يك مگابايتي بسيار سريعتر است از جابجايي 100 فايل 10 كيلوبايتي).
- مديريت تغييرات و همچنين بررسي اينكه چه شخصي چه فايلي را قرار داده، حذف كرده يا تغيير داده است در حالت استفاده از file system مشكل است.
- به صورت پيش فرض عموما مباحث replication و امثال آن‌ توسط روش استفاده از file system خصوصا با تعداد بالاي فايل، پشتيباني نمي‌شود.
- در حالت استفاده از file system ، برنامه‌هاي وب بايد دسترسي write بر روي يك سري پوشه داشته باشند كه اين مورد هميشه از ديدگاه امنيتي مساله ساز بوده و مشكل آفرين.
- كرش file system مساوي است با كرش سيستم عامل و بازگشت اين‌ها زمان‌بر خواهد بود.

با توجه به اين نكات استفاده از ديتابيس براي ذخيره سازي تعداد زيادي فايل، مزاياي زير را به همراه خواهد داشت:

- اكثر سيستم‌هاي ديتابيسي امروزي براي كار با حجم عظيمي از داده‌ها به حد بلوغ خود رسيده‌اند.
- هنگام استفاده از ديتابيس براي ذخيره سازي فايل‌ها ديگر سر و كار ما با ميليون‌ها فايل نخواهد بود و حداكثر چند فايل ديتابيس و ملحقات آن مانند لاگ فايل، كل سيستم را تشكيل مي‌دهند.
- فايل‌هاي ديتابيس براي مثال SQL Server ، هميشه توسط SQL Server در حالت باز قرار داشته و مباحث قفل‌گذاري بر روي فايل‌هاي ديتابيس و بررسي سطح دسترسي و غيره توسط سيستم عامل در اين‌جا به حداقل خود مي‌رسد.
- در اين حالت بار سيستم عامل شما تنها سيستمي است كه مشغول سرويس دهي اطلاعات ديتابيس‌هاي شما است.
- جستجوي فايل‌ها، حتي جستجو در محتواي اين فايل‌هاي ذخيره شده در يك ديتابيس بسيار سريعتر از روش file system مي‌باشد. امكان استفاده از كوئري‌هاي SQL انعطاف پذيري خاصي را به اين سيستم‌ها خواهند داد (براي مثال قابليت full text search مربوط به SQL server امكان جستجو بر روي ركوردهايي با محتواي pdf را نيز پس از انجام اندكي تنظيمات، دارا مي‌باشد).
- هنگام كار با ديتابيس مباحث تراكنشي نقش بسيار حائز اهميتي را بازي مي‌كنند اما عموما سيستم عامل‌ها در اين زمينه نيازمند كار و برنامه نويسي قابل توجهي هستند (اين قابليت به ويندوز ويستا اضافه شده است).
- كرش يك ديتابيس عموما سبب كرش سيستم عامل يا حتي كرش ساير ديتابيس‌هاي موجود نخواهد شد.
- امكان تهيه پشتيبان از ديتابيس‌ها و بازيابي آن‌ها ساده است. (حداقل از بازيابي ميليون‌ها فايل ساده‌تر است)
- امكانات replication به صورت پيش فرض در اكثر سيستم‌هاي ديتابيسي امروزي مهيا است.
- امكان ثبت وقايع و مديريت اطلاعات افزوده شده به ديتابيس، از طريق نرم افزارهايي كه براي اين كار نوشته خواهند شد (يا حتي امكانات توكار اين برنامه‌ها) از هر لحاظ نسبت به روش file system برتري دارد.
- امكانات سوئيچ كردن به ديتابيسي ديگر در شبكه در صورت كرش يك نود، مهيا است و پيش بيني شده است.
- براي استفاده از يك ديتابيس توسط يك برنامه وب، نيازي به داشتن دسترسي write بر روي هيچ فولدري وجود ندارد كه اين خود يك مزيت امنيتي مهم است و همچنين امكان محدود كردن سطوح دسترسي به فايل‌هاي ذخيره شده در ديتابيس با برنامه‌هاي نوشته شده نيز ساده‌تر است. (البته در اين‌جا مسلما منظور از ديتابيس، ديتابيس Access نيست و SQL Server يا MySQL مد نظر هستند)