ডেটাবেস দ্রুত সূচনা(ভিত্তি Laravel ডেটাবেস উপাদান)

webman/database হল illuminate/database ভিত্তিক একটি কার্যক্রম, যা সংযোগ পুল ফাংশন যোগ করেছে, সমন্বয় এবং অ-সমন্বয় পরিবেশের সাথে সমর্থন করে, ব্যবহার লারাভেলের সাথে সমান।

ডেভেলপাররা অন্যান্য ডেটাবেস উপাদান ব্যবহার করা অধ্যায়টি দেখে ThinkPHP অথবা অন্যান্য ডেটাবেস ব্যবহার করতে পারেন।

নোট
বর্তমান গাইডটি webman-v2 সংস্করণের জন্য, যদি আপনি webman-v1 সংস্করণ ব্যবহার করেন, তাহলে v1 সংস্করণ গাইড দেখুন।

ডেটাবেস ইনস্টলেশন

composer require -W webman/database illuminate/pagination illuminate/events symfony/var-dumper

ইনস্টলেশনের পরে আপনাকে restart করতে হবে(reload অকার্যকর)

টিপ
webman/database হল laravel এর illuminate/database এর উপর নির্ভরশীল, তাই ইনস্টলেশনের সময় illuminate/database এর নির্ভরশীল প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ইনস্টল হবে।

নোট
যদি পেজিনেশন, ডেটাবেস ইভেন্ট, SQL লগের প্রয়োজন না হয়, তাহলে শুধুমাত্র নীচেরটি চালান
composer require -W webman/database

ডেটাবেস কনফিগারেশন

config/database.php


return [
    // ডিফল্ট ডেটাবেস
    'default' => 'mysql',

    // বিভিন্ন ডেটাবেস কনফিগারেশন
    'connections' => [
        'mysql' => [
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'test',
            'username'    => 'root',
            'password'    => '',
            'unix_socket' => '',
            'charset'     => 'utf8',
            'collation'   => 'utf8_unicode_ci',
            'prefix'      => '',
            'strict'      => true,
            'engine'      => null,
            'options' => [
                PDO::ATTR_EMULATE_PREPARES => false, // যখন swoole অথবা swow ড্রাইভার হিসেবে ব্যবহৃত হয় তখন এটি আবশ্যক
            ],
            'pool' => [ // সংযোগ পুল কনফিগারেশন
                'max_connections' => 5, // সর্বাধিক সংযোগের সংখ্যা
                'min_connections' => 1, // ন্যূনতম সংযোগের সংখ্যা
                'wait_timeout' => 3,    // সংযোগ পুল থেকে সংযোগ পেতে অপেক্ষা করার সর্বাধিক সময়, টাইমআউট হলে একটি ব্যতিক্রম ঘটবে। শুধুমাত্র সমন্বয় পরিবেশে কার্যকর
                'idle_timeout' => 60,   // সংযোগ পুলে সংযোগের সর্বাধিক নির্জন সময়, টাইমআউট হলে এটি বন্ধ করে পুনরুদ্ধার করবে, যতক্ষণ না সংযোগের সংখ্যা min_connections হয়ে যায়
                'heartbeat_interval' => 50, // সংযোগ পুলের হার্টবিট পরীক্ষার সময়, সেকেন্ডে, 60 সেকেন্ডের কম হওয়ার পরামর্শ দেওয়া হয়
            ],
        ],
    ],
];

pool কনফিগারেশন ব্যতীত, অন্যান্য কনফিগারেশন লারাভেলের সাথে একই।

সংযোগ পুল সম্পর্কে

  • প্রতিটি প্রক্রিয়ার নিজস্ব সংযোগ পুল রয়েছে, প্রক্রিয়াগুলির মধ্যে সংযোগ পুল শেয়ার করা হয় না।
  • সমন্বয় খোলা না থাকলে, ব্যবসা প্রকল্পের মধ্যে সারিবদ্ধভাবে কার্যকর হয়, কোন সমান্তরাল তৈরি হয় না, তাই সংযোগ পুলে সর্বাধিক শুধুমাত্র ১টি সংযোগ থাকবে।
  • সমন্বয় খোলা হলে, ব্যবসা প্রক্রিয়ানুসারে সমান্তরালভাবে কার্যকর হয়, সংযোগ পুল প্রয়োজন অনুযায়ী সংযোগের সংখ্যা গতিশীলভাবে সমন্বয় করবে, সর্বাধিক max_connections এর চেয়ে বেশি নয়, ন্যূনতম min_connections এর চেয়ে কম নয়।
  • যেহেতু সংযোগ পুলের সর্বাধিক সংযোগ সংখ্যা max_connections তাই যখন ডেটাবেস অপারেশনের সমন্বয় সংখ্যা max_connections এর চেয়ে বেশি হয়, তখন কিছু সমন্বয় অপেক্ষায় থাকবে, সর্বাধিক wait_timeout সেকেন্ড অপেক্ষা করবে, অতিবাহিত হলে ব্যতিক্রম ঘটবে।
  • নির্জন অবস্থায় (যা সমন্বয় এবং অ-সমন্বয় পরিবেশ অন্তর্ভুক্ত), সংযোগ idle_timeout সময়ের পরে পুনরুদ্ধার করা হবে, যতক্ষণ না সংযোগের সংখ্যা min_connections (যা ০ হতে পারে) হয়ে যায়।

ডেটাবেস ব্যবহার উদাহরণ

<?php
namespace app\controller;

use support\Request;
use support\Db;

class UserController
{
    public function db(Request $request)
    {
        $default_uid = 29;
        $uid = $request->get('uid', $default_uid);
        $name = Db::table('users')->where('uid', $uid)->value('username');
        return response("hello $name");
    }
}

আমরা দেখছি, ব্যবহার লারাভেলের সাথে একই, Db::table() পদ্ধতি ব্যবহার করে ডেটাবেস পরিচালনা করা।