PDA

View Full Version : سوال: فشرده سازی صفحات برای بانک



milade
سه شنبه 08 مرداد 1387, 07:20 صبح
سلام
من می خوام صفحاتم رو وقتی توی بانک اطلاعاتی ذخیره می کنم فشرده کنم بعد ذخیره .
در ضمن نمی خوام صفحه تغییر کنه.
کسی نظری داره
ممنون
بای

SalarSoft
سه شنبه 08 مرداد 1387, 11:50 صبح
اولا اینکه ذخیره سازی مطالب طولانی رو نباید تو دیتابیس ذخیره کنید. چون باعث افزایش بیش از حد حجم دیتابیستون میشه. فایل گزینه بهتریه.

برای فشرده سازی هم می تونید از GZipStream استفاده کنی.

www.codeproject.com/KB/files/GZipStream.aspx
http://www.geekpedia.com/tutorial190_Zipping-files-using-GZipStream.html

milade
چهارشنبه 09 مرداد 1387, 06:18 صبح
سلام
ولی گوگل چگونه این کار رو می کنه؟؟؟؟؟
بای

Behrouz_Rad
چهارشنبه 09 مرداد 1387, 06:45 صبح
اولا اینکه ذخیره سازی مطالب طولانی رو نباید تو دیتابیس ذخیره کنید. چون باعث افزایش بیش از حد حجم دیتابیستون میشه. فایل گزینه بهتریه.
لطفا این قسمت رو بیشتر توضیح بده چون به هر حال جمله ی اشتباهی هست. اگر منظور دیگه ای داری لطفا بگو.

Amir Taghavi
چهارشنبه 09 مرداد 1387, 10:50 صبح
من بخش خبر سایت هایی که نوشتم رو اینطور طراحی کردم که متن خبر رو در یک فایلی با پسوندی که نشه بصورت مستقیم با browser بازش کرد ذخیره می کنم (مثلا" 10.news) که 10 همون id خبره.

شاید منظور دوستمون چنین چیزیه.

SalarSoft
چهارشنبه 09 مرداد 1387, 12:52 عصر
لطفا این قسمت رو بیشتر توضیح بده چون به هر حال جمله ی اشتباهی هست. اگر منظور دیگه ای داری لطفا بگو.
خب کلمه "ذخیره سازی" اضافی افتاده بود.

منظور من هم مشخصه، ذخیره کردن مطالب طولانی و حجیم ( حجیم به معنی بیش از 4 تا 10 کیلوبایت) در دیتابیس منطقی نیست و بهترین گزینه ذخیره اطلاعات در فایله.

دلیلشم مشخصه، باعث افزایش بیمورد حجم دیتابیس میشه و کاهش سرعت fetch .

خود عمل فشرده سازی هم به نوبه خود صحیح نیست و در طولانی مدت کاهش سرعت سایتتون رو به دنبال داره، البته اگه performance براتون مهم باشه.

shahab_ksh
چهارشنبه 09 مرداد 1387, 13:08 عصر
منظور من هم مشخصه، ذخیره کردن مطالب طولانی و حجیم ( حجیم به معنی بیش از 4 تا 10 کیلوبایت) در دیتابیس منطقی نیست و بهترین گزینه ذخیره اطلاعات در فایله.


تمام سایت های بزرگ خبری دنیا از همین روش استفاده می کنن و اصولا استفاده از بانک اطلاعاتی برای همین نوع کارها هستش این که متون رو در فایلها ذخیره کردن با اصول نگهداری و سازمان دهی اطلاعات همخوانی نداره شما فایلهای باینری بزرگ رو توی دیتابس هم ذخیره کنید مشکلی پیش نمیاد چه رسد به متون پیش پا افتاده ای مثل چند کیلو بایت یا چند مگ

milade
پنج شنبه 10 مرداد 1387, 06:17 صبح
خوب دوستان من حتما و حتما باید توی دیتابس ذخیره کنم اگه راه حلی هست که این کار رو کنم بگید
چون اطلاعاتی که میخوام ذخیره کنم حساسه و نباید کاربر لینک برای اون لینک داشته باشه و بانک اطلاعاتی بهترین گزینه است البته بعضی مواقع باید نشون کاربر بدم که اون دیگه به خودم بستگی داره
ممنون
بای

SalarSoft
پنج شنبه 10 مرداد 1387, 09:46 صبح
تمام سایت های بزرگ خبری دنیا از همین روش استفاده می کنن و اصولا استفاده از بانک اطلاعاتی برای همین نوع کارها هستش این که متون رو در فایلها ذخیره کردن با اصول نگهداری و سازمان دهی اطلاعات همخوانی نداره شما فایلهای باینری بزرگ رو توی دیتابس هم ذخیره کنید مشکلی پیش نمیاد چه رسد به متون پیش پا افتاده ای مثل چند کیلو بایت یا چند مگ
بینید دوست من ، کسی با ذخیره سازی دیتا در دیتابیس مخالف نیست. حالا می خواد این دیتا متن باشه و خیلی زیاد هم باشه. بالعکس تعدادی از دیتابیس ها برای ذخیره سازی داده های بزرگ بهینه سازی شده اند.
صحبت من در این زمینه نیست. مسئله تو بررسی شرایت و انتخاب بهترین گزینه است.

سر صحبت من با این دوستمون بود که مسلما نمی خوان یه سایت خبری بزرگ و یا یه بنگاه اطلاعاتی بزرگ ایجاد کنن. (این مسئله از سوال ایشون مشخصه که اطلاعات کافی در این زمینه ندارند)
پس اینطور برداشت می شه که تو یه هاست معمولی داشتن یک دیتا بیسی که مرتبا افزایش حجم پیدا می کنه در هاستینگ هایی که اجازه افزایش حجم دیتابیس رو تا 20mb هم نمیدن به صرفه نیست. (اگه منظور این دوستمون یه چیز دیگست بگن)
بهتر بود کمی بیشتر تامل می کردید و فقط با دیدن مطلب سریعا پاسخ نمیدادید.


خوب دوستان من حتما و حتما باید توی دیتابس ذخیره کنم اگه راه حلی هست که این کار رو کنم بگید
چون اطلاعاتی که میخوام ذخیره کنم حساسه و نباید کاربر لینک برای اون لینک داشته باشه و بانک اطلاعاتی بهترین گزینه است البته بعضی مواقع باید نشون کاربر بدم که اون دیگه به خودم بستگی داره
ممنون
بای

خب فقط ذخیره کن، مطلب دیگه ای هم نیست! اگر باز هم خواستی فشرده کنی از کد زیر که تو لینک هایی که داده بودم هست استفاده کن.



public static string Zip(string value)
{
//Transform string into byte[]
byte[] byteArray = new byte[value.Length];
int indexBA = 0;
foreach (char item in value.ToCharArray())
{
byteArray[indexBA++] = (byte)item;
}

//Prepare for compress
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.Compression.GZipStream sw = new System.IO.Compression.GZipStream(ms,
System.IO.Compression.CompressionMode.Compress);

//Compress
sw.Write(byteArray, 0, byteArray.Length);
//Close, DO NOT FLUSH cause bytes will go missing...
sw.Close();

//Transform byte[] zip data to string
byteArray = ms.ToArray();
System.Text.StringBuilder sB = new System.Text.StringBuilder(byteArray.Length);
foreach (byte item in byteArray)
{
sB.Append((char)item);
}
ms.Close();
sw.Dispose();
ms.Dispose();
return sB.ToString();
}

public static string UnZip(string value)
{
//Transform string into byte[]
byte[] byteArray = new byte[value.Length];
int indexBA = 0;
foreach (char item in value.ToCharArray())
{
byteArray[indexBA++] = (byte)item;
}

//Prepare for decompress
System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArray);
System.IO.Compression.GZipStream sr = new System.IO.Compression.GZipStream(ms,
System.IO.Compression.CompressionMode.Decompress);

//Reset variable to collect uncompressed result
byteArray = new byte[byteArray.Length];

//Decompress
int rByte = sr.Read(byteArray, 0, byteArray.Length);

//Transform byte[] unzip data to string
System.Text.StringBuilder sB = new System.Text.StringBuilder(rByte);
//Read the number of bytes GZipStream red and do not a for each bytes in
//resultByteArray;
for (int i = 0; i < rByte; i++)
{
sB.Append((char)byteArray[i]);
}
sr.Close();
ms.Close();
sr.Dispose();
ms.Dispose();
return sB.ToString();
}

milade
جمعه 11 مرداد 1387, 07:08 صبح
اقا ممنون
ولی یه خورده توضیح بدید(اخه من vb کار می کنم)
یا کدهاش رو برگردونید به vb
در ضمن شما درست می گید حجم خیلی می خواد بالا بره
ولی من مجبورم(ایا این بهترین روش برای فشرده سازیه؟
ممنون
بای

SalarSoft
جمعه 11 مرداد 1387, 09:51 صبح
ایا این بهترین روش برای فشرده سازیه؟
نه، ساده ترین روش برای دات نته.
می تونی از ابزارهای رایگان SharpZipLib استفاده کنی:
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx

دانلود:
http://www.icsharpcode.net/OpenSource/SharpZipLib/DownloadLatestVersion.asp?what=BinDoc
مثالها:
http://www.icsharpcode.net/OpenSource/SharpZipLib/DownloadLatestVersion.asp?what=SourceSamples
راهنما:
http://www.icsharpcode.net/OpenSource/SharpZipLib/DownloadLatestVersion.asp?what=Help

برای کار با GZipStream تو vb.net
http://www.visual-basic5.de/vbclassic/dotnet/compression.htm
http://aspalliance.com/1287_Compression_and_Decompression_of_Files_using_ Visual_Basic_2005.4

milade
جمعه 13 دی 1387, 13:19 عصر
با سلام خدمت همه دوستان
بالاخره بعد از چند ماه جدل راضی شدم یه سرور اختصاصی بگیرم .
مثاله من اینجاس که نمیتونم از کامپوننت استفاده کنم (نمیخوام)
مثاله من فعلا فشرده سازی نیست
بلکه الان قصد حذف موارد بیهوده مثل &nbsp; هست و البته همون طور که قبلا گفتم نباید صفحه تغییر کنه .
یا مثلا فضاهای خالی که بین > < هست و حذف هم بشن مثاله ای نیست
اگه دوستان راه حلی دارن کمک کنن (کلاسی ، چیزی)
با تشکر از همه دوستان

iman_ad
جمعه 13 دی 1387, 14:01 عصر
اول اینکه متن به صورت html ذخیره کن، دوم قبل از ذخیره تمام فواصل بین تگهای html حذف کن، کار سختی نیست از کلاس string کمک بگیر

milade
جمعه 13 دی 1387, 14:05 عصر
اینو که میدونستم D:
اما یه مشکل هست اون هم حذف فواصل تگها !
مشکل اینه که اگه کاربر توی متن وارد کرده باشه > < برنامه اون رو هم شناسایی و فضا رو حذف میکنه که این طور نباید بشه ;)