PDA

View Full Version : استفاده از قابلیت FileStream برای به اشتراک گذاری فایلها در محیط شبکه



ali190
پنج شنبه 11 خرداد 1391, 09:19 صبح
باسلام و عرض خسته نباشید
من در حال نوشتن برنامه ای هستم که قرار هست با این نرم افزار از فایلهایی که دیگران به اشتراک میگذارند استفاده کنند و نیز بتونن خودشون فایل الصاق کنند
برای اینکه بتونم این کا رو انجام بدم روشهای متفاوتی وجود داره ، FTP ، ریموتینگ ، File Sharing ، ذخیره سازی فایل در دیتابیس و ...
من میخوام از روش ذخیره اسزی فایل در دیتابیس استفاده کنم
این کار رو با تعریف یک فیلد VARBINARY(MAX) و آپلود فایلها در جدول انجام دادم
شندیم که در SQL Server2008 قابلیتی به نام FileStream وجود داره
من اطلاعات کمی در موردش دارم
میخواستم سئوالاتم رو در این قمت مطرح کنم تا بتونم از تجربیات دوستان در این خصوص استفاده کنم
1) قابلی FileStream در یک تعریف ساده چیست و چه مزایا و معایبی نسبت به روش معمولی دارد؟
2) آیا برای بهره بردن از این روش نیاز به تنظیمات خاصی در سرور هست؟
3) آیا در این روش میشه از دستورات T-Sql هم استفاده نمود؟
4) آیا برای بهره گیری از این روش میبایست تغییرات در روش کدنویسی در محیط نرم افزار خود بدهیم؟
و ...
ممنون و متشکر
یاعلی

baktash.n81@gmail.com
پنج شنبه 11 خرداد 1391, 12:23 عصر
سلام

1- FileStream قابلیت نگهداری فابلها در خارج از فایل (یا فایلها همون mdf) بانک اطلاعاتی است. مزایا با حجیم شدن Mdf در روش قدیمی کارایی بانک کم می شد. در این روش فایلها درون یک فلدر خاص نگهداری می شن برای دسترسی به اونها از API های ویندوز استفاده می شه پس سریعتر از روش قبلی هست و هنگام کش کردن این فایلها از کش ویندوز استفاده می شه نه کش SQL Server و ....

2- بله باید این امکان رو موقع نصب SQL فعال کرده باشید اگر نکردید می تونید برید تو SQL Server Configuration Manager روی سرویس SQL کلیک راست کنید Properties و تب مربوط به FileStream و قابلیت رو فعال کنید ... سپس کد زیر رو اجرا کنید
USE MASTER
GO
EXEC sp_FILESTREAM_configure @enable_level = 3


بعد از اون باید فایل گروپ مخصوص فایل استریم رو برای بانک اطلاعاتیون بسازید ...

ALTER DATABASE [TEST_DB]
ADD FILEGROUP FG_2 CONTAINS FILESTREAM;
ALTER DATABASE [TEST_DB]
ADD FILE
(NAME = FS_FILESTREAM,FILENAME = N' C:\TEST_FS’
) TO FILEGROUP FG_2;


بعد هم باید جدول رو بسازید ...

USE TEST_DB
GO
CREATE TABLE FILETABLE
(
ID INT IDENTITY,
GUID UNIQUEIDENTIFIER ROWGUIDCOL NOTNULL UNIQUE,
DATA VARBINARY(MAX) FILESTREAM
);


3- بله می تونید استفاده کنید ...

4- فکر نمی کنم بستگی داره شما قبلا از varbinary برای نگهداری فایلها تون استفاده کرده باشید یا خیر ...

ali190
پنج شنبه 11 خرداد 1391, 16:41 عصر
سلام
ممنونم از توضیحات عالیتون
ببخشید در مورد سئوال چهارمم :
4) آیا برای بهره گیری از این روش میبایست تغییرات در روش کدنویسی در محیط نرم افزار خود بدهیم؟
من قبلاً با فیلد varbinary در SQL Server در VB6 کار کردم و درش فایل آپلود و دانلود کردم
میخواستم بدونم من که قبلاً این کار رو در ویبی شش انجام دادم آیا نیاز هست با فعال نمودن قابلیت FileStream تغییراتی هم در کدنویسیم اعمال کنم؟
راستی دستوراتی رو که در رابطه با سئوال شماره 2 من بود ارائه کردید رو در New Query اجرا میکنم
اما خطا داره و اجرا نمیشه!
ممنون میشم راهنماییم کنید
یاعلی

baktash.n81@gmail.com
شنبه 13 خرداد 1391, 09:06 صبح
در مورد سئوال چهارم ... نمی دونم خودت امتحان کن ...

در مورد Query اول اینو به جاش اجرا کن ... دیگه کدوم خطا داره و چه خطایی داره ...


USE master;
EXEC sys.sp_configure N'filestream access level', N'2'
GO
RECONFIGURE WITH OVERRIDE
GO

SReza1
سه شنبه 16 خرداد 1391, 09:04 صبح
به نظر من اين روش يكي دو تا ايراد داره :

1- اگه ركوردي پاك شه يا يك refresh rate حدود يك دقيقه فايل فيزيكي رو حذف و يا بروز مي‌كنه
2- چون همه فايلها را در يك فولدر مي‌ريزه براي تعداد زياد فايل خواندن فايل را كمي طول مي‌كشه اگه مي‌شد يك ساختار فولدري درختي براي ذخيره‌سازي استفاده كرد خوب بود.
3- كمي امنيتش پائين‌تر از روشي است كه مستقيم درون database ميريزيم. چون باز كردن فايل از بيرون database براي يك admin كه خيلي sql بلد نيست كار راحتيه.

در مجموع به نظرم روش خوبيه و فشار كمتري به SQL Server مي‌آره

يك سوال : ميشه در اطلاعات به صورت compress شده ذخيره شه ؟ مثلا zip بشه و يا روش ديگر؟

benyaminrahimi
دوشنبه 25 دی 1391, 18:20 عصر
sreza فایلاش بدون پسوند هستند یه ادمین به همین راحتی نمیتونه فایلو باز کنه اگه فقط یه پسوندو ذخیره کنه حرفت درسته ...

عیبش اینه که اگه محتویات این فولدر دستکاری بشه دیباگ کردنش سخته .. اگه این فولدر رو read only یا سیستم فولدر میکرد خیلی عالی میشد مثلا وقتی دیتا بیس atache تو اس کیو ال نمیشه کپی یا حذفش کرد

mashhadpix
دوشنبه 28 مرداد 1392, 12:06 عصر
بله باید این امکان رو موقع نصب SQL فعال کرده باشید اگر نکردید می تونید برید تو SQL Server Configuration Manager روی سرویس SQL کلیک راست کنید Properties و تب مربوط به FileStream و قابلیت رو فعال کنید ... سپس کد زیر رو اجرا کنید

سلام.
من موقع نصب اس کیو ال، FileStream فعال نکردم الان کجای Properties این را فعال کنم؟
ممنون میشم راهنمایی کنید.