PDA

View Full Version : استفاده بهینه از mysql



houtanal
پنج شنبه 29 مرداد 1383, 21:03 عصر
من یه پروژه دارم که کانکشن های زیادی با mysql داره با توجه به پست برادر اینپرایز در بخش asp.net کسی مقاله یا نظری در این مورد نداره؟

oxygenws
پنج شنبه 29 مرداد 1383, 21:43 عصر
خوب تا نفهمیم کارتون چیه که نمی شه چیزی گفت، شاید اگر بیشتر توضیح بدید بهتر باشه.

houtanal
جمعه 30 مرداد 1383, 09:55 صبح
تاپیک رو بخون کلا منظورم اینه که چطور یشه از mysql بهتر استفاده کرد تا سربار کمتری ایجادکنه و در کار سرور اختلال ایجاد نکنه

مهدی کرامتی
جمعه 30 مرداد 1383, 10:29 صبح
1- سعی کن یک کانکشن به سرور ایجاد کنی، و در اکثر مبادلات از اون استفاده کنی. کانکشنهای متعدد از یک برنامه واحد فقط بار رو بیشتر میکنه.

2- ...

houtanal
جمعه 30 مرداد 1383, 11:01 صبح
سعی کن یک کانکشن به سرور ایجاد کنی، و در اکثر مبادلات از اون استفاده کنی. کانکشنهای متعدد از یک برنامه واحد فقط بار رو بیشتر میکنه.
منظور شما اینه که در هر صفحه تنها یک بار به بانک وصل شوم(خوب نفهمیدم)منظور شما mysql_pconnect بود؟
در ضمن قبلا هم البته سئوال کرده بودم آیا mysql_close همانند mysql_free_result حافظه را از پرس و جو ها پاک می کند؟
من می خوام بدونم در برنامه نویسی از چه تکنیک هایی باید استفاده کرد تا سر بار زیادی بر روی سرور ایجاد نشه

oxygenws
جمعه 30 مرداد 1383, 11:53 صبح
به هیچ عنوان از mysql_pconnect استفاده نکن :) (از اونجایی که از من هاست داری، اگر در سرور من از این استفاده کنی، باهاش به عنوان mysql_connect برخورد می شه :D )

houtanal
جمعه 30 مرداد 1383, 16:38 عصر
به این کد توجه کنید


$selected=explode(":",$selected);
for($count=0;$count<count($selected)-1;$count++){
$query="SELECT * FROM elib WHERE title='$selected[$count]'";
$result=mysql_query($query) or die(mysql_error());
echo "ok";
mysql_free_result($result);
}
از آنجایی که تعداد عناصر آرایه ممکن است خیلی زیاد باشد آیا mysql_free_result خود وقت گیر نخواهد بود و سر بار زیادی ایجاد نخواهد کرد؟آیا راهی برای جلوگیری هست یا mysql_free_result کار می کند؟

oxygenws
جمعه 30 مرداد 1383, 17:24 عصر
من دقیقا کار این کدتون رو نمی دونم ولی شاید کد زیر براتون بهتر (بهینه تر) کار کنه.


$selected=explode(":",$selected);
$query="SELECT * FROM elib WHERE title='$selected[0]'"
for($count=1;$count<count($selected)-1;$count++){
$query="OR title='$selected[$count]'";
}
$result=mysql_query($query) or die(mysql_error());
echo "ok";
mysql_free_result($result);


موفق باشید، امید

houtanal
جمعه 30 مرداد 1383, 19:00 عصر
نه این پرس و جو بدردم نمی خوره چون به هیچ شزطی احتیاج ندارم من باید بر اساس تعدادخانه های متغییر selected چند رکورد را (همه با هم) اتخاب کنم

oxygenws
جمعه 30 مرداد 1383, 19:29 عصر
من منظور صحبتتون رو نفهمیدم، به هر حال، اگر می گین به درد نمی خوره، خوب لابد نمی خوره :)
خوب شاید بهتر باشه تفاوت زمان اجرای برنامه تون در حالتی که mysql_free_result داشته باشه و نداشته باشه رو تست کنید.

Inprise
شنبه 31 مرداد 1383, 02:29 صبح
من یه پروژه دارم که کانکشن های زیادی با mysql داره

من خیلی بعید میدونم پروژهء مبتنی بر وبی که داری اینقدر Load ایجاد کنه که با مشکل مواجه بشی ، اما محض احتیاط :

الف- این مسئله ربطی به MySQL نداره . مربوطه به PHP .
ب- حتی الامکان سعی کن از یک مدل مبتنی بر Offline DataSet استفاده کنی . یعنی تا حد ممکن یکبار اطلاعاتی که محتملا" نیازشون خواهی داشت رو بگیر - مثلا" بصورت XML - و دفعات بعدی صرفا" اونها رو جستجو کن ، این برای PHP واقعا" راه حل خوبیه .
ج- MySQL بانک قدرتمند و سریعی هست ، با جستجوهای متعدد مشکلی پیدا نمیکنی ؛ نکته ای که حقیر بهش اشاره کرده مربوط هست به فرآیند Login . به ازای ایجاد هر اتصال به بانک ، یکبار فرایند Login اتفاق می افته که این واقعا" فشار زیادی به بانک تحمیل میکنه ؛ اگر کد MySQL رو بخونی یا مرورش کنی خیلی راحت این رو متوجه میشی .

بنده قبلآ" اینکار رو نکرده بودم اما بعد از کشف نقطه ضعف اخیر روی MySQL که به کاربران اجازه میده "بدون نیاز به وارد کردن پسورد" از یک اکانت استفاده کنن ( احتمالا" Root ) و بعد از مرور بخشهائی از کد مذکور به این نتیجه رسیدم که باید برای اتصال به MySQL یه فکر خیلی جدی کرد ؛ هر چند کدهای مربوط به بخش Login خوب نوشته شدن ، اما حداقل به عقیده ء شخصی من معماری چند ریسمانی چندان جالبی نداره ؛ حتی تو همین سایت برنامه نویس با ترافیک نه چندان بالا ( در مقابل سایتهای فوق العاده شلوغ ) چند باری با عدم در دسترس بودن بانک اطلاعاتی مواجه شدم ( سایت - سرور و وب سرور هیچ مشکلی نداشتند ، در تمامی موارد صرفا" اتصال به بانک ممکن نبود ) ، در مورد ترافیکهای واقعا" زیاد حتما ماجرا جدی تره .

علیرغم تمام مطالب فوق MySQL بدون توجه به توانائی یا کارائی یا امکانات ، صرفا از دیدگاه سرعت و چابکی ، سالها از M$ SQL و اوراکل جلو تره .

موفق باشید :)

houtanal
شنبه 31 مرداد 1383, 10:53 صبح
نتیجه اخلاقی:؟برم XML یاد بگیرم؟
حقیقتش پروژه من یک پرتال (CMS) است که برای گروه های کاری دانشجویی نوشته شده و شامل ماژول های زیادی هست بر روی وب سرور لوکال مشکل ندارم چون بچه های خودمون اونقدری نیستن که نشه بهشون جواب نداد اما زمانی که این اطلاعات به روی وب می ره با توجه به نوعش بازدید کننده خیلی زیادی خواهد داشت من تا جایی که تونستم سعی کردم در بسیاری موارد از کار با فایلها استفاده کنم.ولی وجود کلاس ها و include شدن کلاس ها در صفحات خودش باعث کندی پاسخگویی برنامه می شود (و همون طور هم که می دونین بدون کلاس ها نمی شه یه پروژه دست و حسابی در اورد(reuse!reuse!reuse!))
حالا اگر در مواردی تعداد درخواست ها زیاد بشه چون بخش اعظمی از اطلاعات داره از بامک اطلاعاتی استفاده می کنه تعداد صفحاتی که در خواست لاگین به بانک رو می کنند خیلی بالا میره.واضح است که تعداد پرس و جو ها هم زیاد خواهد شد.
اگر مشکل include شدن کلاس ها و همچنین تعداد حلقه های زیاد و استفاده از سیستم فایل رئ کنار بذازیم
بزرگترین مشکل من اینه که با این همه کاربر و تعداد زیاد صفحات چه کار کنم که با پیغام خطا هایی مثل زمانی که همین فوروم شلوغ می شود مواجه نشوم؟