-
August 23rd, 2013, 19:46
#1
عضو جدید
سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده
سلام و خسته نباشید
من یک سایت گزارشگیری و تحلیل گری دارم که با زبان PHP و پایگاه داده MySQL برنامه نویسی شده.
این سایت فقط یک کاربر دارد اما پایگاه داده اش در مجموع حدود 1 میلیارد رکورد دارد و دارای دو جدول 300 میلیون رکوردی و نرخ افزایش روزانه 5 میلیون رکورد است.
روی سرور MySQL آن گزارش گیری های پیچیده انجام می شود که مصرف بسیار بالای CPU را در بر دارد.
متاسفانه زمان بعضی از گزارش ها به 6 ساعت هم می رسد اما ما نهایتا 60 ثانیه می خواهیم.
این سایت هم اکنون روی سرور با 20 گیگ رم و حدود 2.7 پردازنده 4 هسته ای Xeon پشتیبانی می شود.
قیمت برای ما اهمیتی ندارد، فقط می خواهیم سرعت گزارش دهی کاهش پیدا کند.
آیا راهکار سخت افزاری برای کاهش زمان گزارش دهی، با توجه به اینکه فقط یک پردازش را یک نفر انجام می دهد، دارید؟
بیشتر منایعی که MySQL مصرف می کند مخصوصا در مواقع JOIN زدن، CPU است اما هر پردازش بیشتر از 2.7 مصرف ندارد.
به نظر من چون بزرگترین سایت دنیا (فیس بوک) از پایگاه داده MySQL استفاده می کند، خود MySQL نباید اینقدر ضعیف باشد!!!
اما وقتی سه جدول که هر کدام حدود 1 میلیون رکورد دارد را LEFT JOIN می زنم چند ساعت طول می کشد، این غیر طبیعی نیست؟
البته در صورت نیاز می توانیم کل پایگاه داده را به سیستم قوی تر تغییر دهیم!
آیا راهکار سخت افزاری برای کاهش زمان گزارش دهی، با توجه به اینکه فقط یک پردازش را یک نفر انجام می دهد، دارید؟
منتظر جوابتان هستم
باتشکر
-
-
August 23rd, 2013 19:46
# ADS
-
August 23rd, 2013, 20:31
#2
عضو انجمن
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده
دوست عزیز بحث سخت افزار به تنهایی مطرح نیست !
باید در کدهاتون تجدید نظری صورت پذیرد ..... مثلا اگر هر بار قرار است رکورد های تکراری را بازیابی کنید ، این رکورد ها در تمپی قرار گیرند که نیاز نباشد کوئری های اضافه به سمت دیتا بیس انجین ارسال شود
چیزی که من تو صحبت هاتون متوجه میشم اینه که کدهاتون به احتمال زیاد مناسب برای اینکار نیستند........
درسته فیس بوک از چنین امکاناتی استفاده میکنه اما فراموش نکنید که اونها فریم ورک ها و برنامه نویسی های خاص خود را دارند ......
-
-
August 23rd, 2013, 21:02
#3
عضو جدید
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده
ممنون از پاسختان
اما قطعا من مطمئن هستم که مشکل کد نویسی ندارم که در این بخش سوالم رو مطرح کردم.
برای مثال LEFT JOIN کردن سه جدول حتی از داخل phpmyadmin نیز چند ساعت زمان می برد!!!
-
-
August 23rd, 2013, 22:54
#4
عضو انجمن
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده
-
-
August 23rd, 2013, 23:08
#5
عضو انجمن
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده
به نظر من هم این مشکل بیشتر مربوط به ساختار داده هست data structure که باید بازبینی بشه. به این موارد توجه کنید :
۱. موتور دیتابیس چیست؟ InnoDB? Xtreme? MyISAM?
۲. آیا داده ها قابلیت پارتیشن شدن رو دارن؟ اگر بله حتما بکنید. پارتیشنینگ روی سیستم ما با ۱۶۰ میلیون داده زمان سرچ ها رو ۳ برابر کاهش داد
۳. در هنگام JOIN کردن از چه متدی برای مچ کردن استفاده شده؟ sq1.data1 = sq2.data1 ? یا از foreign key?
۴. امکان کش کردن قسمتی از اطلاعات در php buffer هست که جوین نرم افزاری انجام بشه؟
۵. امکان آرشیو کردن قسمتی از تیبل بزرگ ۱ میلیاردی شما هست؟
۶. با داشتن ۶۴ گیگ رم می تونید کل اطلاعات رو در رم بخونید و زمان دسترسی رو شدیدا کاهش بدید (تقریبا ۱۰ برابر)
کلا باید ساختار داده شما بررسی بشه ... و ضمنا مای اس کیو ال یک نرم افزار threaded درست و حسابی نیست باید از apache lucene Or apache Solr OR استفاده کنید این کار شما big data هست.
در facebook از mysql به شکل grid - clustered database استفاده می شه.... یعنی یک کوئری می دونه که کدوم سرور حاوی کدوم اطلاعات هست و می ره از اون می پرسه.
----------------------------------------------------------
-
تعداد تشکر ها از camelian77 به دلیل پست مفید
-
August 23rd, 2013, 23:13
#6
عضو دائم
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده
چون در مورد نرا افزاری اطلاع دقیقی ندارم نظری نمی دهم
ولی از نظر سخت افزاری استفاده از کلاسترینگ چند سرور و یا استفاده از رایانش ابری برای شما موثر خواهد بود
-
-
August 23rd, 2013, 23:14
#7
عضو انجمن
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده
اگر واقعا نمی شه کل دیتابیس رو تغییر داد پیشنهاد من استفاده از سرور با ۱۲۸ گیگ رم + ۱۶ سی پی یو و خوندن کل داستان در memcache هست
----------------------------------------------------------
-
تعداد تشکر ها از camelian77 به دلیل پست مفید
-
August 23rd, 2013, 23:49
#8
عضو انجمن
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده

نوشته اصلی توسط
EmRa228
سلام و خسته نباشید
من یک سایت گزارشگیری و تحلیل گری دارم که با زبان PHP و پایگاه داده MySQL برنامه نویسی شده.
این سایت فقط یک کاربر دارد اما پایگاه داده اش در مجموع حدود 1 میلیارد رکورد دارد و دارای دو جدول 300 میلیون رکوردی و نرخ افزایش روزانه 5 میلیون رکورد است.
روی سرور MySQL آن گزارش گیری های پیچیده انجام می شود که مصرف بسیار بالای CPU را در بر دارد.
متاسفانه زمان بعضی از گزارش ها به 6 ساعت هم می رسد اما ما نهایتا 60 ثانیه می خواهیم.
این سایت هم اکنون روی سرور با 20 گیگ رم و حدود 2.7 پردازنده 4 هسته ای Xeon پشتیبانی می شود.
قیمت برای ما اهمیتی ندارد، فقط می خواهیم سرعت گزارش دهی کاهش پیدا کند.
آیا راهکار سخت افزاری برای کاهش زمان گزارش دهی، با توجه به اینکه فقط یک پردازش را یک نفر انجام می دهد، دارید؟
بیشتر منایعی که MySQL مصرف می کند مخصوصا در مواقع JOIN زدن، CPU است اما هر پردازش بیشتر از 2.7 مصرف ندارد.
به نظر من چون بزرگترین سایت دنیا (فیس بوک) از پایگاه داده MySQL استفاده می کند، خود MySQL نباید اینقدر ضعیف باشد!!!
اما وقتی سه جدول که هر کدام حدود 1 میلیون رکورد دارد را LEFT JOIN می زنم چند ساعت طول می کشد، این غیر طبیعی نیست؟
البته در صورت نیاز می توانیم کل پایگاه داده را به سیستم قوی تر تغییر دهیم!
آیا راهکار سخت افزاری برای کاهش زمان گزارش دهی، با توجه به اینکه فقط یک پردازش را یک نفر انجام می دهد، دارید؟
منتظر جوابتان هستم
باتشکر
توصیه من به شما اینه :
استفاده از سروری با حد اقل ۲ سی پی یو فیزیکی Intel E5-2687W و ۲۵۶ گیگ رم + هارد SSD که سخت افزار قدرتمندی برای این کار به حساب میاد
استفاده از نسخه های Enterprise MySQL
استفاده از Nginx + php-fpm
استفاده از لینوکس توزیع Ubuntu یه جای CentOS
کانفیگ بدون کنتزل پنل و بسیار سبک
-
-
August 24th, 2013, 02:07
#9
عضو جدید
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده

نوشته اصلی توسط
mojiz
ایندکس هاتون درست هست؟
بله، علاوه بر ایندکس، از partitioning و Engine مناسب هم استفاده کردم.
-
-
August 24th, 2013, 02:21
#10
عضو جدید
پاسخ : سخت افزار و تنظیمات مورد نیاز برای افزایش سرعت MySQL با 1 میلیارد داده
۱. موتور دیتابیس چیست؟ InnoDB? Xtreme? MyISAM?
در بعضی جدول ها MyISAM در بعضی دیگر InnoDB ولی سعی کردم در جدول های دارای رکورد میلیونی از InnoDB استفاده کنم.
۲. آیا داده ها قابلیت پارتیشن شدن رو دارن؟ اگر بله حتما بکنید. پارتیشنینگ روی سیستم ما با ۱۶۰ میلیون داده زمان سرچ ها رو ۳ برابر کاهش داد
بله، جدول های بزرگ پارتیشن شدند ولی جدول 1 میلیونی خیر! یک میلیون نیاز به پارتیشن داره؟
۳. در هنگام JOIN کردن از چه متدی برای مچ کردن استفاده شده؟ sq1.data1 = sq2.data1 ? یا از foreign key?
از JOIN معمولی
کد PHP:
SELECT * FROM `k` LEFT JOIN `j` USING(`k1`)
۴. امکان کش کردن قسمتی از اطلاعات در php buffer هست که جوین نرم افزاری انجام بشه؟
در این مورد بیشتر توضیح می دید؟
۵. امکان آرشیو کردن قسمتی از تیبل بزرگ ۱ میلیاردی شما هست؟
منظورتون از آرشیو کردن دقیقا چیه؟
۶. با داشتن ۶۴ گیگ رم می تونید کل اطلاعات رو در رم بخونید و زمان دسترسی رو شدیدا کاهش بدید (تقریبا ۱۰ برابر)
اگر واقعا نمی شه کل دیتابیس رو تغییر داد پیشنهاد من استفاده از سرور با ۱۲۸ گیگ رم + ۱۶ سی پی یو و خوندن کل داستان در memcache هست
چطوری این کار رو انجام بدم؟
باید از apache lucene Or apache Solr OR استفاده کنید
در مورد ویژگی های اینا یه توضیح می دید؟
مثلا سرعت ورود رکورد در ثانیه
در facebook از mysql به شکل grid - clustered database استفاده می شه.... یعنی یک کوئری می دونه که کدوم سرور حاوی کدوم اطلاعات هست و می ره از اون می پرسه.
وقتی می خواد ببینه دوستای من چه مطالبی نوشتن که به من نشون بده حتما JOIN استفاده کردن دیگه، اونم JOIN دو جدول چند میلیارد رکوردی!!!!!!
نمیشه یه کاری کرد مثل فیس بوک قدرتمند بشه؟
-