قاعدة بيانات سريعة البدء (مستندة إلى مكونات قاعدة بيانات Laravel)

webman/database تم تطويرها مستندة إلى illuminate/database مع إضافة ميزة تجمع الاتصال، وتدعم بيئات التعاون و غير التعاون، كما أن استخدامها متطابق مع Laravel.

يمكن للمطورين أيضًا الاطلاع على قسم استخدام مكونات قاعدة بيانات أخرى لاستخدام ThinkPHP أو قواعد بيانات أخرى.

تنبيه
الدليل الحالي هو إصدار webman-v2، إذا كنت تستخدم إصدار webman-v1، يرجى الاطلاع على دليل الإصدار v1

تثبيت قاعدة البيانات

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

بعد التثبيت، تحتاج إلى إعادة التشغيل (إعادة التحميل غير فعالة)

تلميح
يعتمد webman/database على illuminate/database الخاصة بـ Laravel، لذا يتم تثبيت حزم الاعتماد لـ 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، فإن بقية الإعدادات متطابقة مع Laravel.

حول تجمع الاتصال

  • كل عملية لديها تجمع اتصال خاص بها، ولا يتم مشاركة تجمعات الاتصال بين العمليات.
  • عند عدم تفعيل التعاون، يتم تنفيذ الأعمال داخل العملية في طابور، ولن يتم إنتاج تزامن، لذا سيكون هناك اتصال واحد كحد أقصى في تجمع الاتصال.
  • عند تفعيل التعاون، سيتم تنفيذ الأعمال داخل العملية بالتزامن، وسيتكيف تجمع الاتصال حسب الحاجة لضبط عدد الاتصالات، ولا يمكن أن يتجاوز max_connections، ولا يمكن أن يقل عن min_connections.
  • نظرًا لأن الحد الأقصى لعدد الاتصالات في تجمع الاتصال هو max_connections، عندما يتجاوز عدد عمليات قاعدة البيانات عدد max_connections، فسيكون هناك عمليات في طابور الانتظار، ويمكن أن تنتظر لفترة تصل إلى wait_timeout ثوانٍ، وإذا تجاوزت هذه المدة، سيتم إلقاء استثناء.
  • في حالة عدم النشاط (بما في ذلك بيئات التعاون وغير التعاون)، سيتم استرجاع الاتصالات بعد مرور idle_timeout من الزمن، حتى يصبح عدد الاتصالات هو min_connections (min_connections يمكن أن تكون 0).

مثال على استخدام قاعدة البيانات

<?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");
    }
}

كما نرى، فإن الطريقة المستخدمة متطابقة مع Laravel، حيث يتم استخدام Db::table() للتفاعل مع قاعدة البيانات.