PDA

View Full Version : سوال: دیتابیس انجمن برنامه نویس چطوری طراحی شده که کوئری ها با سرعت بسیار بالا اجرا می شن؟



idocsidocs
جمعه 18 شهریور 1390, 02:57 صبح
توی انجمن برنامه نویس حداقل چند میلیون پست و تاپک وجود داره و هر دقیقه دیتابیس ها با پستهای جدید آپدیت می شن.

لطفا بگید که چطور می شه سرعت دیتابیس هامون رو در حد دیتابیس این فروم بالا ببریم؟

اگر منبعی سراغ دارید لطفا لینکش رو برام بفرستید.

binyaft
جمعه 18 شهریور 1390, 13:46 عصر
خوبه کدش هست! بگیرید بخونید !
کش کردن یه راهش هست! نه یه سیستم کش ساده!
بستگی به سرور هم داره دیگه!

idocsidocs
جمعه 18 شهریور 1390, 14:09 عصر
کش کردن یه راهش هست! نه یه سیستم کش ساده!
بستگی به سرور هم داره دیگه!
کش کردن برای سیستمهایی که مرتب آپدیت می شن خیلی سخته. فکر نکنم بشه به راحتی از سیستم های کش ساده استفاده کرد. مگر اینکه روی یه اصول مشخص اینکار رو کرد.

بنظرم بیشتر روی دیتابیس کار کردن.

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

Unique
شنبه 19 شهریور 1390, 02:18 صبح
راستش نمیدونم vBulletin چطوری عمل میکنه یا دوستان چطوری بهینش کردن !
اما عواملی که موثر هستند به ترتیب اولویت اینها هستند :

1. web server ، اگه شما همه مراحل پائین را انجام داده باشین اما MySql هاست و Php و همینطور Apache به اصطلاح وب مستر ها خوب config نشده باشه ، شما کلا به مشکل بر میخوری ، یادمون باشه توی Linux اصل config خوب سرویس ها هستش!
2. پیکربندی و index خوب دیتابیس ، شما اگه بهترین query را بنویسی اما دیتابیس را خوب پیکر بندی و index بر اساس نیاز ها ! نکرده باشی نتیجه خوبی نمیگیری
3. استفاده از query مناسب ، stored procedure ها و view های خوب ، این سومی تاثیرش خیلی مشهوده ، شما با یک query بد میتونی خیلی از performance کار بیاری پائین ، البته یادمون باشه عامل 2 ما را در نوشتن query خوب خیلی یاری میکنه !
4. Cache کردن ، شما بایستی با توجه به آماری که از نمایش صفحات و دیگر اطلاعات بدست میاری ، یک سیستم cach مناسب برای سایت بنویسی تا اطلاعاتی که ثابت موندن هر بار از دیتابیس فراخونی نشن
5. استفاده از تکنولوژی هایی نظیر AJAX که باعث میشن شما کمترین درخواست و در واقع بده و بستان را با web server داشته باشی

idocsidocs
شنبه 19 شهریور 1390, 02:45 صبح
1. web server ، اگه شما همه مراحل پائین را انجام داده باشین اما MySql هاست و Php و همینطور Apache به اصطلاح وب مستر ها خوب config نشده باشه ، شما کلا به مشکل بر میخوری ، یادمون باشه توی Linux اصل config خوب سرویس ها هستش!
2. پیکربندی و index خوب دیتابیس ، شما اگه بهترین query را بنویسی اما دیتابیس را خوب پیکر بندی و index بر اساس نیاز ها ! نکرده باشی نتیجه خوبی نمیگیری
3. استفاده از query مناسب ، stored procedure ها و view های خوب ، این سومی تاثیرش خیلی مشهوده ، شما با یک query بد میتونی خیلی از performance کار بیاری پائین ، البته یادمون باشه عامل 2 ما را در نوشتن query خوب خیلی یاری میکنه !
4. Cache کردن ، شما بایستی با توجه به آماری که از نمایش صفحات و دیگر اطلاعات بدست میاری ، یک سیستم cach مناسب برای سایت بنویسی تا اطلاعاتی که ثابت موندن هر بار از دیتابیس فراخونی نشن
5. استفاده از تکنولوژی هایی نظیر AJAX که باعث میشن شما کمترین درخواست و در واقع بده و بستان را با web server داشته باشی
من دیتابیسم با 150 هزارتا ردیف کند می شه !
هم ایندکس کردم و هم کوئری بهینه استفاده می کنم. روی xampp تست می کنم.
آیا این امکان وجود داره که بخاطر اجرای کوئری روی لوکال هاست همچین مشکلی برام پیش اومده باشه؟

MMSHFE
شنبه 19 شهریور 1390, 09:52 صبح
بستگي به اين داره كه منظورتون از Query بهينه چي باشه. براي مثال، تا جايي كه ميشه، پيشنهاد شده از Sub-Query استفاده نكنيد (استفاده از دو Query جداگانه خيلي بهتر از Sub-Query هست). ضمناً سورس كد vBulletin رو ميتونيد از اينجا (http://dl.p30vel.ir/vBulletin.Suite.v4.1.4.Beta.1..Nulled.zip) دريافت و بررسي كنيد.

AMIBCT
شنبه 19 شهریور 1390, 10:09 صبح
بهینه‌سازی بانک اطلاعاتی یک تخصص مجزا است
و اینکه بخواهید در این زمینه موفق شوید نیاز است که در این مورد مطالعه‌ی زیادی داشته باشید

مثلا یک موضوع خیلی ساده که در MySQL باید توجه کنید:
انتخاب موتور ذخیره‌سازی InnoDB و MyISAM بسته به نیازی که دارید باید صورت بگیره
در جدول‌هایی که بیشتر خوانده می‌شوند تا نوشته باید از MyISAM استفاده کنید مثلا جدول کاربران که در هر درخواست حتما خوانده می‌شود ولی خیلی کم نوشته می‌شود

نکته‌های از این دست بسیار زیاده و همون طور که گفتم خیلی باید مطالعه کنید

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

یکی از مهم‌ترین نیازها در بهینه‌سازی، جستجوی سریع است
جستجو در تعداد زیادی ردیف اگه هوشمندانه نباشه، به تنهایی سرور رو از دسترس خارج خواهد کرد

تکیه کردن بر امکانات پایگاه داده برای جستجوهای سنگین و حجیم کار درستی نیست
برای این کار باید از ابزارهای ویژه‌ی جستجو که به Search Server شهرت دارن استفاده کنید
یکی از بهترین گزینه‌ها برای MySQL و PHP سیستم Sphinx است

A B C D
شنبه 19 شهریور 1390, 11:01 صبح
تاجاییکه میدونم فرومها ازکش نتایج و جدولهای کمکی استفاده میکنن.
جدول کمکی یعنی مثلا ممکنه آپدیت ها رو موقتا در جدول دیگری درج کنن و بعد به تعداد خاصی که رسید یا در زمانی که ترافیک سایت کم بود به جدول اصلی منتقل میکنن. این کار رو بخاطر این انجام میدن که موقع آپدیت، جدول باید قفل بشه (Write lock یا قفل انحصاری) که در نتیجه هیچکس نمیتونه تا زمان اتمام این عملیات چیزی رو از جدول بخونه.
ضمنا قدرت و منابع سرور هم که به کنار. فکر نکنید میشه روی یه هاست اشتراکی درپیت یه فروم پرترافیک راه انداخت.

idocsidocs
شنبه 19 شهریور 1390, 13:21 عصر
بستگي به اين داره كه منظورتون از Query بهينه چي باشه. براي مثال، تا جايي كه ميشه، پيشنهاد شده از Sub-Query استفاده نكنيد (استفاده از دو Query جداگانه خيلي بهتر از Sub-Query هست). ضمناً سورس كد vBulletin رو ميتونيد از اينجا (http://dl.p30vel.ir/vBulletin.Suite.v4.1.4.Beta.1..Nulled.zip) دريافت و بررسي كنيد. البته بحث من فقط روی این فروم نیست. کلا می خوام بدونم که چطور می شه جدولهایی طراحی کرد که سرعت بالایی داشته باشن. و چندان نمی خوام روی فرومها کار کنم.

تاجاییکه میدونم فرومها ازکش نتایج و جدولهای کمکی استفاده میکنن.
جدول کمکی یعنی مثلا ممکنه آپدیت ها رو موقتا در جدول دیگری درج کنن و بعد به تعداد خاصی که رسید یا در زمانی که ترافیک سایت کم بود به جدول اصلی منتقل میکنن. این کار رو بخاطر این انجام میدن که موقع آپدیت، جدول باید قفل بشه (Write lock یا قفل انحصاری) که در نتیجه هیچکس نمیتونه تا زمان اتمام این عملیات چیزی رو از جدول بخونه.
ضمنا قدرت و منابع سرور هم که به کنار. فکر نکنید میشه روی یه هاست اشتراکی درپیت یه فروم پرترافیک راه انداخت.
من الان از xampp استفاده می کنم، دلیل کم بودن اجرای کوئری ها می تونه قدرت کم کامپیوتر من نسبت به سرو باشه؟

بهینه‌سازی بانک اطلاعاتی یک تخصص مجزا است
و اینکه بخواهید در این زمینه موفق شوید نیاز است که در این مورد مطالعه‌ی زیادی داشته باشید

مثلا یک موضوع خیلی ساده که در MySQL باید توجه کنید:
انتخاب موتور ذخیره‌سازی InnoDB و MyISAM بسته به نیازی که دارید باید صورت بگیره
در جدول‌هایی که بیشتر خوانده می‌شوند تا نوشته باید از MyISAM استفاده کنید مثلا جدول کاربران که در هر درخواست حتما خوانده می‌شود ولی خیلی کم نوشته می‌شود

نکته‌های از این دست بسیار زیاده و همون طور که گفتم خیلی باید مطالعه کنید

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

یکی از مهم‌ترین نیازها در بهینه‌سازی، جستجوی سریع است
جستجو در تعداد زیادی ردیف اگه هوشمندانه نباشه، به تنهایی سرور رو از دسترس خارج خواهد کرد

تکیه کردن بر امکانات پایگاه داده برای جستجوهای سنگین و حجیم کار درستی نیست
برای این کار باید از ابزارهای ویژه‌ی جستجو که به Search Server شهرت دارن استفاده کنید
یکی از بهترین گزینه‌ها برای MySQL و PHP سیستم Sphinx است
اگر نکات بیشتری دارید لطفا مطرح کنید.

AMIBCT
شنبه 19 شهریور 1390, 13:48 عصر
موارد خیلی هست

برای شروع پیشنهاد می‌کنم راهنمای MySQL بخش هفتم رو که به بهینه‌سازی اختصاص داره مطالعه کنید ( حدود 70 صفحه )

بعدش هم راهنمای تخصصی InnoDB
http://downloads.mysql.com/docs/refman-5.6-en.a4.pdf

idocsidocs
شنبه 19 شهریور 1390, 13:51 عصر
برای شروع پیشنهاد می‌کنم راهنمای MySQL بخش هفتم رو که به بهینه‌سازی اختصاص داره مطالعه کنید ( حدود 70 صفحه ) پی اچ پی یه منوال داره که می شه دانلود کرد و بصورت آفلاین خوند، ایا mysql هم منوالی داره که بشه دانلودش کرد و از روش خوند؟

AMIBCT
شنبه 19 شهریور 1390, 14:01 عصر
بله:
http://dev.mysql.com/doc

فقط هیتلر شکن می‌خواد

idocsidocs
شنبه 19 شهریور 1390, 17:44 عصر
بله:
http://dev.mysql.com/doc

فقط هیتلر شکن می‌خواد
یه یه فایل 10 مگی گرفتم، ولی نتونستم قسمت مورد نظر رو پیدا کنم. می شه بگید از سه بخش زیر کدوم یکی رو باید دانلود کنم؟ من بخش 2 رو دانلود کردم.
1-MySQL Reference Manual (for GA releases)
2-MySQL Reference Manual (for development releases)
3- MySQL Reference Manual (other releases and translations)
4-InnoDB Documentation

armsoftpc
شنبه 19 شهریور 1390, 22:57 عصر
به نام خدا
با سلام
لطفا مدیران انجمن هم به این تاپیک پاسخی بدهند و بگند چه طوری هزاران پست ، تاپیک و کاربر همزمان با هم در سایت لود می شه با این سرعت بالا!!!
چون همون طور که می دونید ویبولتین هم یک انجمن بسیار سنگین است و سرعت در آن کم است.

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

AMIBCT
شنبه 19 شهریور 1390, 23:53 عصر
پیدا کردن این فایل‌های مشهور روی اینترنت کار سختی نیست
اگه هیتلر شکن هم نداشته باشید ( چه طوری توی اینترنت کار می‌کنید ؟ )
با جستجوی اسم فایل به نتیجه خواهید رسید

مثلا برای راهنمای MySQL

http://www.4shared.com/document/AdYLHs4D/refman-55-ena4.html

بخش Optimization

اون بخش دوم که شما دانلود کردید مربوط به نسخه‌ی در حال توسعه هست
که اون هم باید این بخش رو داشته باشد

شاید شماره‌ی بخشش عوض شده باشه

idocsidocs
یک شنبه 20 شهریور 1390, 00:06 صبح
Optimizationهمچین بخشی نداره. احتمالا Optimization یکی از زیر بخشهای اون 4 بخش هست که نوشتم.

اطلاعات بیشتری در این مورد ندارید؟


لطفا مدیران انجمن هم به این تاپیک پاسخی بدهند و بگند چه طوری هزاران پست ، تاپیک و کاربر همزمان با هم در سایت لود می شه با این سرعت بالا!!!اگر مدیران در این مورد توضیح بدن که خیلی عالیه.

AMIBCT
یک شنبه 20 شهریور 1390, 09:33 صبح
من دیشب همین فایل بالایی که لینکش رو در 4shared دادم دانلود کردم

بخش هفتمش مثل فایل‌های قدیمی Optimization هست و مواردش نسبت به اون نسخه‌ی قبلی که من داشتم بیشتر هم شده

نمی‌دونم شما چی دانلود کردید. ولی فکر می‌کنم خوب دقت نمی‌کنید اونجا هم باید همین بخش باشه

فرق مورد اول و دوم که در فهرست بالا دادید
نسخه‌ی MySQL هست
که اولی مربوط به نسخه‌ی فعلی
و دومی مربوط به نسخه‌ی در حال توسعه
سومی هم که برای زبان‌های مختلف هست

idocsidocs
یک شنبه 20 شهریور 1390, 10:23 صبح
من دیشب همین فایل بالایی که لینکش رو در 4shared دادم دانلود کردم
مرسی از راهنماییتون.

دوتان کسی تا حالا روی لوکال زمان اجرای یه کوئری روی جدولی که بالای 1 میلیون ردیف داشته باشه رو تست کرده؟ لطفا نتیجه تستش رو اعلام کنه.

AMIBCT
یک شنبه 20 شهریور 1390, 13:29 عصر
یکی از مواردی که در مستندات بالا هست
همین موضوع است

بستگی دارد پرس و جو روی چه فیلدهایی باشد و چه فیلدی برگشت داده شود

اگر فیلد مورد جستجو و فیلد بازگشتی هر دو Index شده باشند، در یک میلیون رکورد با 19 مقایسه مورد دلخواه پیدا و بازگردانده می‌شود
اگر فیلد جستجو Index نشده باشد، کل جدول باید جستجو شود( Full Table Scan ) و بسته به قدرت سخت‌افزار زمان خواهد برد
اگر جدول MyISAM باشد در زمانی که MySQL در حال Full Table Scan است هیچ مقداری نمی‌تواند روی جدول ذخیره شود و این می‌شه دلیلی برای قفل شدن سایت

تا جایی که ممکن است با بهینه‌سازی بانک اطلاعاتی و نوشتن هوشمندانه و آگاهانه‌ی Queryها از Full Table Scan باید جلوگیری کرد

binyaft
یک شنبه 20 شهریور 1390, 15:19 عصر
به نام خدا
با سلام
لطفا مدیران انجمن هم به این تاپیک پاسخی بدهند و بگند چه طوری هزاران پست ، تاپیک و کاربر همزمان با هم در سایت لود می شه با این سرعت بالا!!!
چون همون طور که می دونید ویبولتین هم یک انجمن بسیار سنگین است و سرعت در آن کم است.
اگر لینک شو ایمیل کنید یا بذارید بهتر بود ، تا بتونیم از این سایت که ما رو تحریم کرده دانلود کنیم.یا شما که هیلتر شکن دارید اون برای ما آپلود کنید.
موفق باشید.

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

مهدی کرامتی
دوشنبه 15 آبان 1391, 15:52 عصر
ما برای جستجو در دیتابیس سایت از یک سیستم Offload Search به نام Sphinx Search استفاده کرده ایم.