دسته: مانگو دی بی

  • تدریس خصوصی MySQL برای PHP

    تدریس خصوصی MySQL برای PHP

    با اینکه این روزها سیستم های مدیریت پایگاه داده noSQL خیلی ترند تر هست ولی همچنان خیلی جاها نیاز هست که ما با سیستم های قدیمی و البته محبوب مثل MySQL کار کنیم. قدرت پایگاه داده های رابطه ای زمانی مشخص میشه که شما بخواید با داده های شدیدا رابطه ای کار کنید. مای اس کیو ال یه سیستم مدیریت پایگاه داده رابطه ای هست. اگر نیاز به یادگیری بصورت آموزش خصوصی MySQL دارید میتونید با من با شماره ۰۹۱۹۹۶۵۶۶۹۳ تماس بگیرید تا یادگیری کار با پایگاه داده با MySQL رو بهتون آموزش بدم.

    در این دوره چیا یاد میگیریم؟

    مای اس کیو ال از زبان SQL یا Structured Query Language استفاده میکنه که پرسش هایی که داره رو از دیتابیس انجام بده. در این دوره ما قصد داریم با استفاده از زبان برنامه نویسی PHP به شما یاد بدیم که چطور به دیتابیس وصل بشید و کارهایی مثل ذخیره و بازیابی داده و کارهای پیچیده تر مثل join ها و… رو انجام بدید. این دوره پیش نیاز دوره ی کار با datatables هست و با یادگیری اون قطعا راه برای ایجاد اپلیکیشن های پیچیده که دارای استوریج داده هستند باز میشه واستون.

    بعد از این دوره شما قادر خواهید بود که نیازهای خودتون رو بعنوان یک برنامه نویس متوسط رفع کنید و با کسب تجربه در آینده نزدیک کارهای خفن تری که تو ذهنتون هست رو انجام بدید.

    در این دوره با مباحث زیر بصورت عملی کار خواهید کرد:

    • دیتابیس چیه و چرا بوجود اومد؟
    • نصب MySQL
    • نصب GUI های معروف مثل PHPMyAdmin یا Table Plus
    • آشنایی با مفاهیم اولیه مثل جدول، سطر، ستون، پرسش و…
    • کامنت گذاری در MySQL
    • دستورات ساخت دیتابیس و جدول
      • ساخت و حذف دیتابیس
      • ساخت و حذف و اصلاح جدول
      • آشنایی با انواع داده در MYSQL
      • آشنایی با داده های مختلف برای تاریخ و زمان
      • انواع محدودیت یا constraint ها
      • فهرست گذاری یا INDEX
      • کلید های اولیه یا PRIMARY KEY
      • کلید های خارجی یا FOREIGN KEY
      • محدودیت CHECK در MySQL
    • واکشی داده با دستور SELECT
    • محدود کردن داده ی انتخاب شده با دستور WHERE
      • کار با دستور HAVING
      • کار با دستور EXISTS
      • کار با دستورات ANY و ALL
    • ترکیب چند عبارت با دستور های AND، OR و NOT
    • مرتب کردن داده با دستور ORDER BY
    • چک کردن مقادیر NULL
    • وار کردن داده ی جدید به دیتابیس با دستور INSERT
    • وارد کردن به جدول با انتخاب از جدول دیگه با دستور INSERT INTO SELECT
    • بروزرسانی داده ی قدیمی با دستور UPDATE
    • حذف ریکورد ها از دیتابیس با دستور DELETE
    • واکشی تعداد محدودی داده با دستور LIMIT
    • پیدا کردن حداقل و حداکثر روی یه ستون با دستورهای MIN و MAX
    • گرفتن تعداد سطر ها، جمع و میانگین با دستورهای AVG، COUNT و SUM
    • جستجو در فیلدها با دستور LIKE و Wildcard ها
    • استفاده از دستور IN برای جستجوی چند مقدار مختلف در یک ستون
    • کار با دستور BETWEEN برای جستجو در بازه روی یک فیلد از دیتابیس
    • مفهوم Alias ها و کار با اونها
    • ترکیب جدول ها با هم با استفاده از JOIN و آموزش انواع جوین ها:
      • INNER JOIN
      • LEFT JOIN
      • RIGHT JOIN
      • CROSS JOIN
      • جوین به جدول فعلی یا همون self join
      • UNION ها که البته جوین حساب نمیشن!
    • کار با دستور مهم GROUP BY برای گروه زدن بر اساس فیلدها
    • کار با دستور CASE
    • کار با عملگر ها
    • کار با VIEW ها در MySQL
    • کار با توابع یا Functions
    • آموزش کار با Stored Procedure ها
    • آموزش کار با Stored Function ها
    • آموزش کار با Trigger ها در SQL
    • آشنایی با ORM ها

    آیتم های فوق رو برای اینکه صفر تا ۱۰۰ از مای اس کیو ال رو یاد بگیرید نوشتم. ولی اگر شما نیاز به آموزش مقدماتی دارید میشه بخشی از مفاهیم بالا رو میشه ازشون رد شد. برای مشاوره و اطلاعات بیشتر در مورد دوره ها با من تماس بگیرید.

  • نصب MongoDB و استفاده در لاراول

    اگه قصد دارید به MongoDB روی بیارید کاره بدی نمیکنید ولی یکم دنگ و فنگ داره این قضیه. توی این پست میخوام تجربه خودم رو از مهاجرت از مای اس کیو ال به مانگو دی بی رو بگم. البته خیلی تجربه عمیقی نیست و فعلا در حد معرفی و نحوه نصب و رفع مشکلات اولیه میگم. بعد ها به جاهای خفنش رسیدم بازم در مورد اونا هم میگم.

    توجه: همه کارایی که من میگم روی Ubuntu 18.04.3 تست شده و بقیه جاها رو نمیدونم.

    بعد از اینکه لاراول رو نصب کردید خیلی راحت با دستور زیر مانگو رو هم نصب کنید (البته برای این بخش بهتره از طریق داکیومنت مانگو دی بی پیش برید).

    sudo apt-get install -y mongodb-org 

    معروف ترین پکیجی که لاراولی ها برای کار با مانگو باهاش کار میکنن jenssegers/laravel-mongodb هست که میتونید نصبش کنید ولی قبلش باید یکار دیگه هم بکنید و اون هم اینه که درایور PHP برای مانگو رو نصب کنید. من چند تا راه رو رفتم و این پست از داکیومنت PHP واسم جواب داد. در واقع اگه PECL داشته باشید خیلی راحت با این کامند کارتون راه میفته:

    sudo pecl install mongodb

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

    sudo service mongod start

    اگه دستور بالا بدون هیچ پیامی اجرا شد ینی کارتون درسته. بعد باید وارد اینترفیس مانگو بشید و یه یوزر بسازید. برای این کار mongo رو تایپ کنید و اینتر کنید. یه دیتابیس به صورت زیر بسازید.

    use test

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

    show dbs

    حالا با دستور زیر میتونید یوزر های این دیتابیس رو ببینید:

    db.getUsers()

    توجه کنید که db نباید اسم دیتابیستون باشه و همین db باید باشه. اگه یوزری ندارید باید بسازیدش. برای این کار این شکلی میتونید عمل کنید:

    db.createUser({user:'admin', pwd:'Aa123', roles: [{role:"readWrite", db:"test"}]})

    و حالا برید کانکشن دیتابیس رو توی فایل database.php بسازید. و بعدش دیفالت کانکشن رو هم تغییر بدید.

    'mongodb' => [
        'driver'   => 'mongodb',
        'host'     => env('DB_HOST', 'localhost'),
        'port'     => env('DB_PORT', 27017),
        'database' => 'test',
        'options'  => [
            'database' => 'admin' 
        ]
    ],
    'default' => env('DB_CONNECTION', 'mongodb'),

    من یوزر و پسورد رو هم اینجا گذاشتم و اررور داد. شما اون یکی دو تا رو توی فایل .env بذارید.

    DB_CONNECTION=mongodb
    DB_HOST=localhost
    DB_PORT=27017
    DB_DATABASE=test
    DB_USERNAME=admin
    DB_PASSWORD=Aa123

    و حالا php artisan migrate کنید. ایشالا که همه چی اوکی باشه.

    اگه از قبل دیتابیس مانگو دی بی دارید و میخواید ایمپورتش کنید یه راه ساده استفاده از روش زیر هست که کل کالکشن هاتون رو ایمپورت میکنه:

    mongorestore --db test ./orgdictionary

    استفاده از Eloquent در لاراول با MongoDB

    اگه میخواید از Eloquent توی لاراول استفاده کنید باید مدل هاتون رو از Eloquent پکیج اسکتند کنید. بعنوان مثال برای مدل Post بصورت زیر عمل کنید:

    use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
    class Post extends Eloquent
    {

    }

    حالا میتونید توی کنترلرتون از App\Post::all() و… استفاده کنید. البته برای جدول یوزر باید یه حرکت بیشتر هم بکنید و اون اینه:

    use Illuminate\Contracts\Auth\Authenticatable;
    use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
    
    use Illuminate\Auth\Authenticatable as AuthenticableTrait;
    class User extends Eloquent implements Authenticatable
    {
         use Notifiable;
         use AuthenticableTrait;
    {

    این باعث میشه که توی مرحله Auth هم به اررور نخورید و مثل حالت معمولی با Auth::attempt لاگین کنید.

  • nodejs در مقابل php

    اخیرا مجبور شدم روی یک پروژه چت آنلاین کار کنم که یک موتور چت داره و یک سری ریکوئست رو میگیره و جواب مناسب رو میده…  با php و فریمورک لاراول (♥) و وب سرور آپاچی شروع کردم  برای هرچه بهینه تر شدن موتور از روش comet استفاده کردم که یک درخواست رو تا دریافت درخواست بعدی به تاخیر میندازه و خلاصه به روشی خلاقانه باعث پایین اومدن حجم درخواست ها به سرور و در عین حال real time شدن کامل برنامه میشه. واضحه که با این حجم read و write که توی همچین سیستمی وجود داره، mysql گزینه مناسبی برای مدیریت داده ها نیست و بخاطر همین از همون اول از mongodb بعنوان یک سیستم مدیریت پایگاه داده noSQL استفاده کردم…

    تا اینجا یه موتور چت (chat engine) با لاراول و مانگو دارم… برای تست ، ۲۰ کاربر با سشن های مختلف روش فعال کردم که هر کدوم دارن چت میکنن و بیشتره تایم رو هم گوش میکنن و منتظر دریافت پیام طرف مقابلن… با ۲۰ تا کاربر با اینکه منابع نسبتا بالایی از سرور استفاده میشد ولی سرعت جواب ها قابل قبول بود… وقتی تعداد کلاینت های سیستم پایین هست بالطبع تعداد درخواست هایی که برای سیستم میاد هم پایین خواهد بود و مشکلی پیش نمیاد… اما وقتی تعداد کلاینت ها رو ۱۰۰ برابر کردم… بووووم… سیستم ترکید☺

    اینجا بود که به ضعیف بودن php و یه وب سرور مثل آپاچی ایمان آوردم… یه چرخی تو اینترنت زدم و مقاله هایی رو خوندم که دقیقا حرف الان من رو تایید میکردن… کم کم با پدیده ای به نام nodejs آشنا شدم… syntax و داکیومنت خوبش باعث شد که سمتش برم و موتور چت رو ببرم روی node…

    گرچه تحقبق روی پروژه انقد طولانی شد که شرکت، پروژه رو شکست خورده تلقی کرد و رفتم روی پروژه ی بعدی… ولی به شما پیشنهاد میکنم اشتباه من رو تکرار نکنید و اگه سیستم مشابهی رو برای کارتون نیاز دارید به node بعنوان یک گزینه خوب نگاه کنید… یه مقایسه قشنگه node و php رو هم توی این لینک ببینید. موفق باشید 🙂