برنامههای کاربردی مبتنی بر SQL Server با استفاده از قابلیت FILESTREAM قادر خواهند بود که دادههای بدونساختار همچون اسناد و تصاویر را بر روی فایل سیستم ذخیره نمایند. برنامههای کاربردی میتوانند از APIهای Streaming غنی و عملکرد فایل سیستم نهایت استفاده را برده و در آنِ واحد هماهنگی تراکنشی را میان دادههای بدونساختار و دادههای ساختاریافته مربوطه حفظ نمایند.
FILESTREAM با ذخیره نمودن دادههای Binary Large Object یا به اختصار BLOB به صورت (Varbinary(max، به عنوان فایل بر روی فایل سیستم، SQL Server Database Engine را با یکی از فایل سیستمهای NTFS یا ReFS ادغام مینماید. دستورات Transact-SQL میتوانند دادههای FILESTREAM را Insert، Update، Query و Search نموده و Back up تهیه نمایند. رابطهای کاربری فایل سیستم Win32 دسترسی به دادهها را به صورت Streaming فراهم میآورند.
این نرمافزار از NT System Cache برای Cache نمودن دادههای فایل استفاده مینماید که این امر به کاهش تأثیرات منفی احتمالی دادههای FILESTREAM بر روی Database Engine کمک میکند. Buffer Pool متعلق به SQL Server مورد استفاده قرار نمیگیرد در نتیجه این حافظه بهمنظور پردازش Query در دسترس است.
FILESTREAM در هنگام نصب و یا ارتقا SQL Server، به طور خودکار فعال نمیشود. کاربر باید این نرمافزار را با استفاده از SQL Server Configuration Manager و SQL Server Management Studio فعال نماید. برای استفاده از FILESTREAM کاربر باید دیتابیس جدیدی ایجاد نموده و یا یک دیتابیس موجود را طوری تنظیم کند که دارای نوع خاصی از گروه فایلی (Filegroup) باشد. سپس جدول جدیدی ساخته و یا یکی از جداول موجود را طوری تنظیم نماید که دارای یک ستون (Varbinary(max با Attribute مختص به FILESTREAM باشد. پس از انجام دادن این مراحل، کاربر میتواند با استفاده از Transact-SQL و Win32 دادههای FILESTREAM را مدیریت نماید.
زمان مناسب استفاده از FILESTREAM
در SQL Server، BLOBها میتوانند دادههای (Varbinary(max استاندارد باشند که دادهها را در جداول ذخیره مینمایند، و یا
Objectهای (Varbinary(max مختص به FILESTREAM باشند، که دادهها را در فایل سیستم ذخیره میکنند. سایز و نوع استفاده از دادهها مشخص مینماید که کاربر باید از Storage دیتابیس استفاده نماید یا Storage فایل سیستم. اگر کاربر شرایط ذیل را دارا باشد، باید استفاده از FILESTREAM را مد نظر قرار دهد:
- میانگین سایز Objectهایی که درحال ذخیرهشدن هستند، از 1 مگابایت بیشتر باشد.
- Read فوری مهم باشد.
- کاربر درحال توسعه برنامههای کاربردی باشدکه برای Application Logic از Middle Tier استفاده مینمایند.
لازم به ذکر است که برای Objectهای کوچکتر، اغلب اوقات ذخیره نمودن BLOBهای Varbinary(max) در دیتابیس، عملکرد Streaming بهتری را به ارمغان میآورد.
نحوه کار FILESTREAM Storage
ذخیرهسازFILESTREAM بهصورت یک ستون (Varbinary(max پیادهسازی میشود که در آن دادهها بهصورت BLOB در فایل سیستم ذخیره میشوند. سایز این BLOBها فقط بهوسیلهی سایز Volume فایل سیستم محدود میشود. محدودیت (Varbinary(max استانداردِ سایز فایل که 2 گیگابایت میباشد، درمورد BLOBهایی که بر روی فایل سیستم ذخیره شدهاند صدق نمیکند.
برای تعیین اینکه یک ستون باید دادهها را بر روی فایل سیستم ذخیره کند، کاربر باید Attribute مختص به FILESTREAM را بر روی یک ستون (Varbinary(max تعیین نماید. این امر باعث میشود که Database Engine تمام دادههای مربوط به آن ستون را نه بر روی فایل دیتابیس، بلکه بر روی فایل سیستم ذخیره نماید.
دادههای FILESTREAM باید در گروههای فایل FILESTREAM ذخیره شوند. یک گروه فایلی FILESTREAM، گروه فایلی ویژهای است که بهجای خودِ فایلها، حاوی دایرکتوریهای فایل سیستم میباشد. به این دایرکتوریهای فایل سیستم، Data Container گفته میشود. Containerهای داده رابط کاربری میان Database Engine Storage و Storage فایل سیستم میباشد.
هنگام استفاده از ذخیرهساز FILESTREAM موارد زیر باید در نظر گرفته شوند:
- هنگامیکه جدولی حاوی یک ستون FILESTREAM باشد، هر ردیف باید یک ID مختص به ردیف Non-Null داشته باشد.
- میتوان چندین Container داده را به گروه فایلی FILESTREAM اضافه نمود.
- Containerهای دادههای FILESTREAM را نمیتوان توزیع کرد.
- هنگام استفاده از Failover Clustering گروههای فایلی FILESTREAM باید بر روی منابع دیسکی مشترک باشند.
- گروههای فایلی FILESTREAM میتوانند روی Volumeهای فشردهشده باشند.
مدیریت متمرکز با استفاده از FILESTREAM
از آنجا که FILESTREAM بهعنوان یک ستون (Varbinary(max پیادهسازی شده و مستقیماً با Database Engine ادغام میشود، اغلب ابزارها و کاربردهای مدیریت SQL Server بدون تنظیم (Modification) دادههای FILESTREAM عمل میکنند. برای مثال میتوان از تمام مدلهای پشتیبانگیری و بازیابی همراه با دادههای FILESTREAM استفاده نمود و از این دادهها همراه با دادههای ساختاریافته در دیتابیس پشتیبان گرفته میشود. اگر کاربر نخواهد دادههای FILESTREAM را با دادههای رابطهای پشتیبانگیری نماید، میتوان از یک پشتیبانگیری جزئی استفاده نمود تا گروههای فایلی FILESTREAM در نظر گرفته نشوند.
امنیت یکپارچه
در SQL Server با ارائه دسترسی به جداول یا ستونها، از دادههای FILESTREAM نیز همچون دیگر دادهها محافظت میگردد. اگر کاربری اجازهی دسترسی به ستون FILESTREAM را در یک جدول داشته باشد، میتواند فایلهای مربوطه را نیز باز کند.
تنها حساب کاربری که SQL Server تحت آن اجرا گردیده، اجازهی دسترسی به FILESTREAM Container را دارد. توصیه میشود به حسابهای کاربری دیگر اجازهی دسترسی به Container دادهها بخشیده نشود.
ــــــــــــــــــــــــــــــــــــــ
آشنایی با FILESTREAM در SQL Server – قسمت اول
آشنایی با FILESTREAM در SQL Server – قسمت دوم (پایانی)