لینک کوتاه
سه شنبه , 23 دی 1393
5 دیدگاه
به لطف سایت وبشمار(webshomar.com) لازم شد بنچ مارکی روی رکوردهای نسبتا بالا(دومیلیون رکورد) روی دیتابیس محبوب mysql و postgresql انجام بدهم
مشخصات
mysql 5.5
postgresql 9.1
debian 7 os
ram 4gig
cpu Intel Core i5-2430M CPU @ 2.40GHz
این بنچ مارک روی سیستم شخصی خودم انجام شد و ساختار دیتابیس های هر دو مشابه بود و داده ها کاملا شبیه هم بودند
در تیبل از فیلد های int , char , varchar , smallint استفاده شده بود
مختصر نتایج این بنچ مارک به شرح زیر خدممتان ارائه میگردد
در دستورات select عادی با چندین condition دیتابیس mysql با اختلاف جزئی در حد یک دهم و یک صدم سریعتر از pg بود
اما نیاز سایت وبشمار ایجاب میکرد کوئریهای سنگین محاسباتی روی رکوردها انجام گیرد
دستوراتی شمارشی مثل select count(*) با چندیدن condition با برتری قابل ملاحضه ای با pgsql بود در تستی که انجام شد pgsql در 3.4 ثانیه و mysql در 6.4 ثانیه کوئری را به انجام رساند
در کوئری هایی که شامل دستور count و group by بود برتری با pgsql بود نتیجه کوئری در pgsql در 3.8 ثانیه و در mysql با 7.9 ثانیه به انجام رسید
در کوئری هایی که شامل دستور count(distinct field)بود برتری با mysql بود نتیجه یک کوئری در pgsql با 9.8 ثانیه و در mysql با 5.1 ثانیه به انجام رسید
اما در کوئری هایی که شامل distinct بدون استفاده از count بود برتری با pgsql بود با 2.6 ثانیه در حالیکه mysql در 4.6 ثانیه کوئری را به انجام رساند
در نهایت پیشنهاد میکنم بررسی کنید اگر قرار هست وبسایت شما داده های محاسباتی را ذخیره کند و لازم باشد محاسباتی روی داده ها انجام گیرد مثلا تعداد رکورد ها در سیستم هایی چون آمارگیر و انجمن و شبکه اجتماعی و امثالهم پیاده سازی کنید از postgresql استفاده کنید و اگر هم قرار هست سیستم های خبری و محتوایی پیاده سازی کنید از mysql استفاده کنید
اگر هم احساس میکنید رکوردهای شما هیچ وقت به میلیون رکورد نمیرسد از mysql استفاده کنید که سریعتر هست .
دقت کنید به طور مثال اگر سایت شما در هر دقیقه یک رکورد جدید به دیتابیس اضافه کند , بعد از دو سال به یک میلیون رکورد میرسد !!
پس حتما چشم انداز فعالیت سایتی که پیاده میکنید را بررسی کنید .
با تشکر رضا شیخله
لینک کوتاه
یکشنبه , 25 خرداد 1393
4 دیدگاه
برای ارسال ایمیل با smtp ابتدا به مدیریت سی پنل خود بروید و یک ایمیل بسازید . فرض میکنیم ایمیل شما
info@example.com میباشد .
اطلاعات smtp شما میشود
یوزر info@example.com
پسورد ~ همان پسوری که برای اکانت ایمیل قرار دادید
سرور میل mail.example.com
پورت معمولا 25
حالا به صفحه اکستنشن Yii بروید (http://www.yiiframework.com/extension/smtp-mail )
از گوشه سمت راست فایل اکستنشن را بگیرید و در پوشه مورد نظر یعنی در آدرس protected/extensions قرار بدید .
حال فایل config/main.php را باز کنید و در آرایه components اضافه کنید .
'components'=>array(
'Smtpmail'=>array(
'class'=>'application.extensions.smtpmail.PHPMailer',
'Host'=>"mail.example.com",
'Username'=>'info@example.com',
'Password'=>'yourpass',
'Mailer'=>'smtp',
'Port'=>25,
'SMTPAuth'=>true,
),
),
اکنون برای ارسال ایمیل میتوانید هر جا از دستور زیر استفاده کنید
$from = 'info@example.com';
$to = 'example@gmail.com';
$subject = "این عنوان ایمیل است";
$message = "این متن ایمیل است";
$mail=Yii::app()->Smtpmail;
$mail->SetFrom($from, 'From NAme');
$mail->Subject = $subject;
$mail->MsgHTML($message);
$mail->AddAddress($to, "");
if(!$mail->Send())
echo "Mailer Error: " . $mail->ErrorInfo;
else
echo "Message sent!";
به همین سادگی !
لینک کوتاه
سه شنبه , 20 اسفند 1392
4 دیدگاه
خب اینم عیدی سال جدید من به شما
یک مثال برای پیاده سازی تکنیک comet چت رومها .
کافیه فایلها رو دانلود کنید و در یک پوشه از هاستتون قرار بدید .
بدون نیاز به دیتابیس میتونید یک محیط چت ساده بسازید :)
میتونید از لینکهای زیر دانلود کنید .
[دانلود]
[لینک دانلود دوم]
# ببخشید که توضیحات زیادی نمیدم ، یه خورده سرم شلوغه ، سورس کدها گویا هستن ، سوالی بود مطرح کنید در خدمتم .
لینک کوتاه
چهارشنبه , 25 بهمن 1391
5 دیدگاه
کلمه استاتیک از اسمش پیداست یعنی ایستا و بدون تغییر و ما میخواییم از این خاصیت استفاده بهینه کنیم .
فرض کنید یک تابع قرار هست بسازید که اطلاعات کاربر فعلی رو از دیتابیس بخونه .
function currentUser()
{
@session_start();
$user_id = (int) $_SESSION['user_id'];
$qr = mysql_query("SELECT * FROM `user` WHERE `id`={$user_id} ");
$result = mysql_fetch_row($qr);
return $result;
}
حال در جای جای اسکریپت از تابع currentUser استفاده میکنید .
مثلا یه جا برای گرفتن نام کاربر فعلی ، یه جا برای نمایش ایمیل و ...
مساله ای که اینجا مطرح هست این است که با هر بار استفاده از تابع currentUser دستور کوئری اجرا خواهد شد پس به تعداد تکرار این تابع
دستور کوئری تکراری خواندن اطلاعات اجرا خواهد شد و این یک کار بیخود هست .
خب با کمک یک متغییر استاتیک این مساله رو حل میکنیم :)
تابع بالا رو به شکل زیر بنویسید
function currentUser()
{
static $result ;
if( ! empty($result))
return $result;
@session_start();
$user_id = (int) $_SESSION['user_id'];
$qr = mysql_query("SELECT * FROM `user` WHERE `id`={$user_id} ");
$result = mysql_fetch_row($qr);
return $result;
}
دستور بالا را بررسی کنید ، ساده است ، با اولین بار استفاده از تابع ، متغییر result بررسی میشه که آیا خالی هست یا خیر که مسلماً در اولین بار
فاقد مقدار خواهد بود ، در خطهای پائین این متغییر ست میشود و برای دفعات بعد مقدار ست شده برگردانده میشود و نیازی نیست کوئری اجرا شود .
به همین سادگی :)
لینک کوتاه
سه شنبه , 05 دی 1391
36 دیدگاه
توی چندین انجمن تاپیک هایی رو دیدم که افرادی که تازه برنامه نویسی رو شروع کرده اند ، عنوان میکردند که برای استارت یک پروژه نمیدونن از کجا شروع کنن ، منم فرصت رو غنیمت شمردم و این 10 قدم رو برای شروع تا پایان یک پروژه پیشنهاد میکنم .
قدم اول : مشخص کردن ایده ، هدف
قدم دوم : بررسی امکانات مورد نیاز
قدم سوم : طراحی UI برنامه (رابط گرافیکی)
قدم چهارم : پیاده سازی دیتابیس روی کاغذ
قدم پنجم : پیاده سازی دیتابیس و جداول
قدم ششم : شروع کد نویسی
قدم هفتم : بازنگری نهایی
قدم هشتم : بارگزاری سایت
قدم نهم : تائید نهایی
قدم دهم : افزایش اطلاعات
در ادامه در مورد هر کدام توضیحاتی میدهم .
ادامه مطلب ...