PDA

View Full Version : ذخیره فایل ها در database



seven7777777
جمعه 02 بهمن 1388, 10:02 صبح
سلام
من تو برنامم فایل های مختلف رو به صورت byte[] در فیلدی از نوع varbinary(max) قرار می دم . حالا چند تا مشکل دارم :
1. زمان ثبت این داده من خیلی طولانیه ، گاهی چند ده ثانیه می شه . آیا راهی برای سریعتر ثبت کردن هست ؟
2. برای فایل های طولانی مثلا 300 مگ به بالا هم بعد از مدتی یه پیغام Timeout Expired می ده .

the timeout period elapsed prior to completion of the operation or the server is not responding . the statement has benn terminated.
3. گاهی حتی تبدیل فایل به byte[] هم طولانی میشه ، در حالی که گاهی همون فایل رو خیلی سریع تبدیل می کنه . آیا تو کار من اشکالی هست ؟

اگه کسی می دونه مخصوصا اساتید لطفا کمک کنین چون پروژش force major هست .

seven7777777
جمعه 02 بهمن 1388, 10:08 صبح
راستی کد تبدیل فایل من به byte[] به شکل زیره :


public static byte[] Generate_Byte_File(string filePath)
{
byte[] fByte = null;
FileInfo fInfo = new FileInfo(filePath);
long numBytes = fInfo.Length;
FileStream fStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
BinaryReader bReader = new BinaryReader(fStream);
fByte = bReader.ReadBytes(Convert.ToInt32(numBytes));
bReader.Close();
fStream.Close();
return fByte;
}

در ضمنفایل رو به صورت معمولی ثبت می کنم یعنی با command و parameters.add .

hamidreza20
جمعه 02 بهمن 1388, 14:11 عصر
سلام دوست عزیز

دیتا بیست چیه؟ اگه sql sever 2005 است حتما یه نگاهی به ورژن 2008 بینداز تنوع داده ای اون زیاد شده شاید کار ساز باشه.

التماس دعا....

mohammadi4net
جمعه 02 بهمن 1388, 14:32 عصر
قبل از ریختن تو دیتابیس فایلهارو فشرده می کنید؟
شاید اصلا نیاز نباشه که فایل هایی با حجم زیاد تو دیتاتبیس ذخیره بشه ، یکم درباره کارکرد برنامه توضیح بدین شاید روش بهتری بهتون معرفی شد.

seven7777777
جمعه 02 بهمن 1388, 18:39 عصر
سلام
بله ، از sql 2005 استفاده می کنم . در ضمن همونطور که گفتم قضیه force major و زمان من خیلی کمه . دیگه وقت نیست که برم سراغ 2008 .

ببینید قضیه از این قراره که برنامه باید یک سری اسناد که هر چیزی از متن تا فیلم میشه باشه رو ذخیره و مدیریت کنه . من تصمیم گرفتم به دلایلی از db استفاده کنم . حالا به مشکلاتی که بالا گفتم برخوردم . فایل ها رو با تابع پست دوم مستقیما تبدیل به byte[] کرده و در db به روش معمولی ذخیره می کنم . البته در db جدولشو از جدول اطلاعات وابسته دیگه مثل عنوان و موضوع و ... جدا کردم .
تا در موقع جستجو واکشی به مشکل برنخورم . هیچ فشرده سازی انجام ندادم . البته درست هم نمی دونم که این فشرده سازی چه جوریه !!!

اساتید هم اکنون نیازمند یاری سبزتان هستیم !؟!؟!؟!

seven7777777
جمعه 02 بهمن 1388, 21:08 عصر
سلام
مشکل timeout expired فکر کنم حل شد . من خاصیت timeout کامندم رو 3600 گذاشتم . فکر کنم ماله همون بود .

اما مشکلات اول و سوم هم فکر کنم فهمیدم مال چیه . مال اینه که دفعه اول که می زنم میره از هارد می خونه و البته کش هم می کنه . سری بعد که من می زنم از کش می خونه و برای همین سریعتره .

حالا با این تفاسیر اگه درست مشکلات رو فهمیده باشم میشه اساتید راه حلشو اگه هست بگن ، البته لطفا . مثلا روشی هست که فایل رو قبلا داخل کش آورد و بعد استفاده کرد ؟ یا هر روشی که این پروسه رو سرعت بده !!!!

seven7777777
شنبه 03 بهمن 1388, 20:59 عصر
با عرض پوزش از همه اساتید و با توجه به منشور اخلاقی یا باید یه پست جدید می زدم برای سوالم و یا یه پست بی محتوا به همین یکی اضافه می کردم تا بیاد بالا .

لطفا اگه کسی اطلاعاتی داره کمک کنه !!!

seven7777777
دوشنبه 05 بهمن 1388, 19:21 عصر
برای صرفه جویی مضمون این پست مثل پست قبلیه . البته این بار آخره ، اگه کسی جواب نداد دیگه پست بی محتوا نمی زنم .
خوب حتما سوالم یا جواب نداره و یا کسی بلد نیست دیگه ( اونم تو این همه آدم و اساتید که تو سایتن )

mohammadi4net
دوشنبه 05 بهمن 1388, 20:13 عصر
1. زمان ثبت این داده من خیلی طولانیه ، گاهی چند ده ثانیه می شه . آیا راهی برای سریعتر ثبت کردن هست ؟
2. برای فایل های طولانی مثلا 300 مگ به بالا هم بعد از مدتی یه پیغام Timeout Expired می ده .
3. گاهی حتی تبدیل فایل به byte[] هم طولانی میشه ، در حالی که گاهی همون فایل رو خیلی سریع تبدیل می کنه . آیا تو کار من اشکالی هست ؟


حالا با این تفاسیر اگه درست مشکلات رو فهمیده باشم میشه اساتید راه حلشو اگه هست بگن ، البته لطفا . مثلا روشی هست که فایل رو قبلا داخل کش آورد و بعد استفاده کرد ؟ یا هر روشی که این پروسه رو سرعت بده !!!!
هیچ روشی وجود نداره که سرعت این کار براتون زیاد کنه خیلی هم کد هاتون رو بهینه کنید نهایتا 20% سرعت بیشتر بشه که بازهم مشکل شمارو حل نمی کنه چون روش کارتون کلا اشتباه است (نظر من)
وقتی با فایلهای حجیم کار می کنید نباید اونرا داخل دیتابیس ذخیره کنید شما 100 ها مگا بایت داده رو می خونید و داخل رم می ریزید بعد این حجم داده رو به sql server انتقال می کنید و... شما کار زیادی از منابع سیستم (ram,Cpu,...) می کشید و نتیجه کارتون زمان بر می شه البته این اتفاق هم موقع خوندن اطلاعات پیش میاد.

mohammadi4net
دوشنبه 05 بهمن 1388, 20:43 عصر
قبلا یک نفر پیشنهاد طراحی نرم افزار چابخونه رو بهم داد چندین بخش برای چابخانه وجود داره
ثبت سفارش -> دریافت عکس های مورد نیاز -> طراحی -> ارسال برای چاپ-> تحویل به مشتری و ...
هر قسمت کار توسط یک نفر و توسط چندین کامپیوتر انجام می شد، صاحب چابخانه می خواست بدونه که سفارش مشتری در چه مرحله و چقدر از کارش انجام شده و امور مالی و...
البته طرف پیگر پیشنهادش دیگه نشد و من هم پروژه رو تحلیل نکردم. فقط تو ذهنم بررسی کردم که فایل های فتوشاپ ممکنه تا 100 مگا بایت حجم داشته باشه و من نمی تونم اونو روی دیتابیس ذخیره کنم و این مجهولات هنوز تو ذهنم مونده ، به خاطر همین خوشحال میشم اگه بتونم کمکتون کنم.
دو روش به ذهن من می رسه
1. fttp
2. map network drive