PDA

View Full Version : گفتگو: فشرده سازی فایل ها در php



DelDard
چهارشنبه 18 اسفند 1395, 17:56 عصر
سلام دوستان برنامه نویس
برای فشرده سازی و آرشیو 6 تا کلاس (http://php.net/manual/en/refs.compression.php) تو سایت php که خب راستش تا حالا با هیچ کدوم کار نکردم و نمیدونم کدوم چه مزیت هایی نصبت به دیگری داره و برای نیاز من مناسبه.
لذا من به شما دوستانی که قبلا با این کلاس ها کار کردید توضیح میدم که دنبال چی هستم بعد ممنون میشم که شما بین این 6 تا اونی که مناسب تر هست رو بهم معرفی کنید.

یه نرم افزار اتوماسیونه که خب یه بخش بک آپ گیری داره. چند میلیون رکورد تو دیتابیس هست و چند صد هزار هم عکس (هر کدوم میانگین 2 مگا بایت) توی یه فولدر که به عنوان دیتا بیس فایل ها ازش استفاده میکنم. حالا وقتی کاربر (ادمین) دکمه بک آپ رو میزنه باید یه دامپ از دیتا بیس (نه به صورت شل کامند بلکه توسط php) گرفته بشه و کپی شه تو فولدر backup_tmp ذخیره شه بعد تمام عکسها توی همون فولدر backup_tmp یا یک فولدری توی اون ذخیره میشه و بعد کل فولدر backup_tmp که شامل یه فایل sql و تمام عکس ها هست فشرده شه و تحویل کاربر بشه.

حالا این وسط بحث اول طبیعتا کاهش حجم هست که خب اگه کمتر باشه بهتره ولی خب دغدغه اصلی نیست چون حالا 20 گیگ نه 30 گیگ فرقی هم نمیکنه چندان
اما بحث اصلی که خیلی مهمه استفاده از منابع سخت افزاری هست! که حین بک آپ یهو همه چی هنگ نکنه.
اینجا خیلی مهمه که ما از چه الگوریتمی برای گرد آوری بک آپ ها و تبدیل اونها به یک فایل فشرده شده استفاده میکنیم.


ممنون میشم شما دوستان حرفه ایی اگه پیشنهادی تجربه ایی یا توصیه ایی در این زمینه دارید بفرمایید.

Unique
پنج شنبه 19 اسفند 1395, 01:06 صبح
نمیدونم چرا میخوای با php از پایگاه backup بگیری در صورتی که mysqldump داری ! پشتیبان گیری با php به نظرم برای چنین حجمی از Database حماقته ! برای کاهش حجم فایل sql هم میتونی zip کنی که حجمش خیلی خیلی پایین میاد !
در مورد backup گیری عکس ها هم به نظرم باید HDD خوبی داشته باشی تا با سرعت بیشتری کار انجام بشه ! در ضمن zip کردن عکس ها هم ارزشی نداره و بهتره sql پایگاه که zip شده را فقط با عکس ها توی یک فایل archive کنی همین.

اما اگه نظر من را بخوای backup گیری کار php نیست ! با توجه به ابعاد کار یا سیستم local هست یا vps یا dedicatedک ه خوب میتونی جفت این کار ها را با نوشتن دستورات bash و توی shell انجام بدی ! راستی عموما backup گیری را توی ساعات مرده انجام میدن ! مثلا نیمه شب ها. اون مواقع زیاد حساسیت وجود نداره.

DelDard
پنج شنبه 19 اسفند 1395, 09:51 صبح
ممنون از پاسختون دوست گرامی


نمیدونم چرا میخوای با php از پایگاه backup بگیری در صورتی که mysqldump داری ! پشتیبان گیری با php به نظرم برای چنین حجمی از Database حماقته !

بله درست میفرمایید که بک آپ گیری با php حماقته، موافقم، ولی مساله اینجاست که ما دو جور بک آپ داریم یکی بک آپ کلی (از هر چی که هست) که خب اینو طبیعتا با توابعی از php که شل اجرا میکنند (مثل exec ) دستور mysqldump رو اجرا میکنیم. اما برخی مواقع هم باید از برخی بخش های دیتا بیس (به صورت گسسته) بک آپ تهیه شده مثلا میگه فقط از پرونده های مشتریانی که از تاریخ فلان تا فلان بالای فلان مبلغ خرید کردند بک آپ بگیر. خب ما اینجا نیاز به یه mysql query داریم که توسط php ارسال شه جواب ها رو بگیره و تو یه فایل (ترجیحا sql ) قرار بده که خب این هم البته میتونه همون حجم بالایی رو که اول گفتم داشته باشه. حالا سوال اینجاست با چه الگوریتمی باید این کار رو بکنیم که بار کمتری روی منابع سرور باشه؟ مثلا بک آپ گیری زمان بیشتری ببره ولی فشار کمتری به سرور بیاد تا وسط کار هنگ نکنه. بهینه ترین راه ممکن چیست؟


با توجه به ابعاد کار یا سیستم local هست یا vps یا dedicatedک ه خوب میتونی جفت این کار ها را با نوشتن دستورات bash و توی shell انجام بدی ! راستی عموما backup گیری را توی ساعات مرده انجام میدن

سیستم یه سرور هست که تو یه شبکه داخلی (آفلاین) یه شرکت قرار میگیره، یه سرور معمولی، متاسفانه درباره ویژگی های سخت افزاریش اطلاعی ندارم چون هنوز سرور رو نخریدن که بدونیم مثلا قدرت سخت افزاریش چقدره، قراره ما بشون بگیم چی بگیرن.
درباره ساعات مرده هم پیش نهاد خوبی بود و حتما توی قسمت راهنمای استفاده ذکر میکنم که این کارو انجام بدن


در مورد backup گیری عکس ها هم به نظرم باید HDD خوبی داشته باشی تا با سرعت بیشتری کار انجام بشه ! در ضمن zip کردن عکس ها هم ارزشی نداره و بهتره sql پایگاه که zip شده را فقط با عکس ها توی یک فایل archive کنی همین.

بله درسته عکس هارو به خاطر کاهش حجم نمیخام zip کنم صرفا به خاطر اینکه یک فایل به عنوان بک آپ به کاربر تحویل بشه (نه یک فولدر با هزاران فایل توش) میخام zip کنم. کاهش حجم برا mysql مد نظر بود که فرمودید همون کلاس ZipArchive بهتره. (که البته بحث اصلی حتی کاهش حجم هم نبود این بود که حین بک آپ گیری با php فشاری به سرور نیاد و همه چی هنگ نکنه)
درباره هارد دیسک هم شما مدل یا برند خاصی مد نظرتون هست که برای این کار ها مناسب باشه؟ اگه پیشنهاد بدین ممنون میشم

تشکر از پاسخ های جامع و خوبتون.

Unique
جمعه 20 اسفند 1395, 10:09 صبح
حالا سوال اینجاست با چه الگوریتمی باید این کار رو بکنیم که بار کمتری روی منابع سرور باشه؟ مثلا بک آپ گیری زمان بیشتری ببره ولی فشار کمتری به سرور بیاد تا وسط کار هنگ نکنه. بهینه ترین راه ممکن چیست؟
به نظرم اول باید تست کنی ببینی وضعیت سرور در زمان backup گیری چطوره و بعدش وارد بهین هسازی بشی ! اما به طور کلی اگه مشکلت اینه زمان query دادن و کار کردن php به مشکل بخوری. شما بر فرض اگه ۸ گیگ رم داشته باشی میتونی mysql را به شکلی تنظیم کنی که از سه گیگ بیشتر استفاده نکنه و php هم بیش از ۲ گیگ را مشغول نکنه ! اینجوری همیشه ۳ گیگ رم داری و سیستم هنگ نمیکنه ! البته اعداد فرضی هستند و بهتره با آزمایش و خطا و یا زیر نظر یک مدیر سیستم انجام بشه. پس وسواس توی query گرفتن شاید خیلی توی این موضوع بک آپ گیری با توجه به محدود کردن منابع سیستم اهمیتی پیدا نکنه !


رباره هارد دیسک هم شما مدل یا برند خاصی مد نظرتون هست که برای این کار ها مناسب باشه؟ اگه پیشنهاد بدین ممنون میشم
ببین. توی این موراد نباید خساست کرد. براشون توضیح بده با داشتن یک سرور خوب ضرر نمیکنن و CPU و RAM را بالا و با بهترین کیفیت بگیر. HDD همم حتما SCSI بگیر و خودت تست بگیر تا خیالت راحت بشه. در مورد Motherboard هم یک مدل خوب کافیه ! نیاز به ولخرجی نیست. گرافیک هم همون onboard کار را راه میندازه.

ولی باز ه میگم که بهتره با DATA تستی بررسی کنی.