ورود

View Full Version : ذخیره عکس و فایل ورد در دیتابیس



h1and1saman
چهارشنبه 23 تیر 1395, 22:28 عصر
سلام به همه دوستان
یه سوال خیلی مهم دارم خواهشا کمک کنید .یه مدت سوال میکنم جوابی نمیگیرم
من یه اتوماسیون نوشتم که از بانک sql براش استفاده کردم
همراه هر نامه ای عکسی پیوست میشه و یک فایل ورد هست .من برای اینکار عکس ها رو درون پوشه ای و فایل های ور رو هم درون پوشه دیگه ای میریزم .ولی از اینکار میترسم چون هم دسترسی بهش راحت ممکنه و هم اینکه امکان حذف و .... وجود داره
می خواستم سوال کنم اگه این اطلاعات رو تو جدولی تو sql بریزم سرعت پایین نمیاد(گفته شده که ریختن فایل موجب کم شدن سرعت کار با دیتابیس میشه و اگه میشه تا چه محدودیتی‌میشه اینکارو کرد.یعنی چندتا فایل یا چقدر حجم )
و اگه میشه تاثیرش چقدره؟خیلی زیاده؟ و راه حلی هم برا این موضوع هست ایا
.یا اینکه تامین امنیت پوشه ها که استفاده میکنم .

خواهشا هرکی هرچی‌میدونه کمک کنه . پروژه ام لنگ همین سواله

pezhvakco
پنج شنبه 24 تیر 1395, 09:14 صبح
اگر با SQL 2008 کار می کنید FileStream
اگر با SQL 2012 به بالا کار می کنید FileTable

h1and1saman
پنج شنبه 24 تیر 1395, 09:37 صبح
ممنون ولی خیلی خلاصه بود کاش درد مورد کاهش سرعت یا دیگر مسائل هم یکم توضیح میدادید . تا چه میزان ذخیره عکس روی سرعت تاثیر زیادی نمیزاره

pezhvakco
پنج شنبه 24 تیر 1395, 10:01 صبح
خیلی خلاصه بود

هر کدام از این دو تا چند برگ نوشته است
ولی برای خیلی خلاصه نبودن =>

1)
FILESTREAM موتور دیتابیس اس کیوال سرور را با سیستم فایل NTFS یکپارچه می‌کند؛ به این صورت که داده‌های BLOB از نوع

varbinary(max) را به صورت فایل بر روی سیستم ذخیره خواهد کرد. سپس با استفاده از دستورات T-SQL می‌توان این فایل‌ها را ثبت،


حذف، به روز رسانی، جستجو و بک آپ گیری کرد. این قابلیت نیز از فیلدهای varbinary(max) استفاده می‌کند؛ اما اکنون ویژگی و برچسب


FILESTREAM به این نوع فیلدها الصاق خواهد شد. FILESTREAM data باید در FILESTREAM filegroups ذخیره شوند.


FILESTREAM filegroups در حقیقت همان پوشه‌های فایل سیستم می‌باشند. به آن‌ها data containers نیز گفته می‌شوند که مرزی هستند


بین ذخیره سازی داده‌ها در فایل سیستم و در دیتابیس.


خوبی ها:
الف) اختصاص یافتن قسمتی از بافر SQL Server به این امر.
ب) با توجه به قرار گرفتن داده‌های BLOB‌ در دیتابیس ، transaction log قابل توجهی تولید خواهد شد. (+)
ج) بیش از 2GB را نمی‌توان در فیلدهایی از نوع varbinary(max) ذخیره کرد.
د) به روز رسانی BLOB ها سبب ایجاد fragmentation می‌شود.


بدی ها:
الف) سیستم transaction مختص به خود را داشته، به همین جهت سبب رشد غیر منطقی حجم فایل transaction log دیتابیس اصلی نمی‌شوند.
ب) هنگام به روز رسانی فیلدهایی از این دست، صرفا ایجاد یا حذف یک فایل مد نظر است؛ بنابراین fragmentation ایجاد شده در این حالت بسیار کمتر از روش استفاده از فیلدهایی از نوع varbinary(max) می‌باشد.
ج) استفاده از NT system cache جهت کش کردن اطلاعات که سبب بالا بردن بازدهی بانک اطلاعاتی خواهد شد.
د) از buffer pool اس کیوال سرور در این حالت استفاده نشده (مطابق قسمت ج) و این حافظه جهت امور روزمره‌ی اس کیوال سرور کاملا مهیا خواهد بود.
ه) محدودیت 2GB فیلدهایی از نوع varbinary(max) با توجه به ذخیره سازی این نوع BLOBs در فایل سیستم، دیگر وجود نخواهد داشت.


2)
FileTable از ویژگی‌های نوین SQL Server 2012 است که تکمیل‌کننده‌ى FileStream است. FileTable آمیزشی از FileStream با

hierarchyid و سیستم فایل ویندوز برای ارائه‌ى توانایی‌های نوین مدیریت BLOB در SQL Server است. FileTable همان‌گونه که از دو


واژه‌ى تشکیل‌دهنده‌اش پیداست؛ هم‌زمان یک جدول و یک سیستم فایل معمولی است.
FileTable به هر روی یک جدول از پایگاه‌داده‌های SQL Server است با یک تفاوت که ساختار آن از پیش تعریف‌شده است. ستون‌های


FileTable و نوع داده‌ى آن از پیش توسط SQL Server مشخص شده است

*** همیشه بهترین راه رسیدن به خواسته و پرسش = جستجو ***
https://msdn.microsoft.com/en-us/library/ff929144.aspx

و خیلی بیشتر در همین سایت و دیگر سایت های پارسی