Rumah rangka kerja php ThinkPHP Bagaimana untuk melaksanakan operasi sub-pangkalan data mendatar pangkalan data dalam ThinkPHP6?

Bagaimana untuk melaksanakan operasi sub-pangkalan data mendatar pangkalan data dalam ThinkPHP6?

Jun 12, 2023 am 11:39 AM
thinkphp Cawangan pangkalan data Sub perpustakaan mendatar

Dengan pengembangan skala perniagaan, jumlah data yang perlu diproses oleh pangkalan data juga semakin meningkat, menyebabkan satu pangkalan data menghadapi tekanan. Pada masa ini, kami perlu melaksanakan operasi sub-pangkalan data mendatar pangkalan data untuk menyebarkan data ke dalam pangkalan data yang berbeza, dengan itu meningkatkan prestasi dan kebolehskalaan sistem. Artikel ini akan memperkenalkan cara untuk melaksanakan operasi pemecahan mendatar pangkalan data dalam ThinkPHP6.

1. Apakah sub-pangkalan data mendatar pangkalan data?

Pecahan mendatar pangkalan data ialah proses penyebaran data dalam satu pangkalan data kepada berbilang pangkalan data. Kami boleh membahagikan data kepada pangkalan data yang berbeza mengikut peraturan tertentu (seperti mengikut ID pengguna atau tempoh masa), dengan itu mengurangkan tekanan beban pada satu pangkalan data. Pada masa yang sama, apabila jumlah data adalah besar, sharding mendatar juga boleh meningkatkan kecekapan pertanyaan dan meningkatkan keselamatan data.

2. Pelaksanaan sub-pustaka mendatar dalam ThinkPHP6

Dalam ThinkPHP6, kita boleh melaksanakan sub-pustaka mendatar dengan menggunakan perisian tengah pangkalan data. Letakkan perisian tengah pangkalan data dalam sambungan MySQL ThinkPHP6 untuk mengawal sub-pangkalan data.

  1. Pasang Thinkswoole

Dalam ThinkPHP6, Thinkswoole digunakan sebagai perisian tengah pangkalan data. Kita perlu memasang Thinkswoole dalam projek.

Tambahkan maklumat versi ThinkSwoole pada fail composer.json, dan kemudian gunakan komposer untuk memasangnya.

  1. Ubah suai konfigurasi pangkalan data

Mula-mula cari fail config/database.php dan gantikan sambungan MySQL dengan sambungan Swoole. Komen maklumat sambungan MySQL asal:

// 'mysql' => [
    //     // 默认数据连接标识
    //     'default' => env('database.driver', 'mysql'),
    //     // 数据库连接信息
    //     'connections' => [
    //         'mysql' => [
    //             // 数据库类型
    //             'type' => 'mysql',
    //             // 主机地址
    //             'host' => env('database.hostname', '127.0.0.1'),
    //             // 数据库名
    //             'database' => env('database.database', ''),
    //             // 用户名
    //             'username' => env('database.username', 'root'),
    //             // 密码
    //             'password' => env('database.password', ''),
    //             // 端口
    //             'hostport' => env('database.hostport', '3306'),
    //             // 数据库连接参数
    //             'params' => [],
    //             // 数据库编码默认采用utf8
    //             'charset' => 'utf8',
    //             // 数据库表前缀
    //             'prefix' => env('database.prefix', ''),
    //             // 数据库调试模式
    //             'debug' => env('database.debug', true),
    //             // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    //             'deploy' => 0,
    //             // 数据库读写是否分离 主从式有效
    //             'rw_separate' => false,
    //             // 读写分离后 主服务器数量
    //             'master_num' => 1,
    //             // 指定从服务器序号
    //             'slave_no' => '',
    //             // 是否严格检查字段是否存在
    //             'fields_strict' => true,
    //             // 数据集返回类型
    //             'resultset_type' => 'array',
    //             // 自动写入时间戳字段
    //             'auto_timestamp' => false,
    //             // 时间字段取出后的默认时间格式
    //             'datetime_format' => false,
    //             // Builder类
    //             'builder' => '',
    //             // Query类
    //             'query' => '\think\db\Query',
    //             // 是否需要进行SQL性能分析
    //             'sql_explain' => false,
    //         ],
    //     ],
    // ],
Salin selepas log masuk

Tambah maklumat sambungan Swoole:

 // swoole
    'swoole' => [
        // 默认数据连接标识
        'default' => 'swoole',
        // 数据库连接信息
        'connections' => [
            'swoole' => [
                // 数据库类型
                'type' => 'mysql',
                // 服务器地址
                'hostname' => [
                    '127.0.0.1:3305',
                    '127.0.0.1:3306',
                ],
                // 数据库名
                'database' => 'test',
                // 用户名
                'username' => 'root',
                // 密码
                'password' => '',
                // 端口
                'hostport' => '',
                // 数据库连接参数
                'params' => [],
                // 数据库编码默认采用utf8mb4
                'charset' => 'utf8mb4',
                // 数据库表前缀
                'prefix' => '',
                // 数据库调试模式
                'debug' => true,
                // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
                'deploy' => 0,
                // 数据库读写是否分离 主从式有效
                'rw_separate' => false,
                // 读写分离后 主服务器数量
                'master_num' => 1,
                // 指定从服务器序号
                'slave_no' => '',
                // 自动写入时间戳字段
                'auto_timestamp' => false,
                // 时间字段取出后的默认时间格式
                'datetime_format' => 'Y-m-d H:i:s',
                // Builder类
                'builder' => '',
                // Query类
                'query' => '\think\db\Query',
                // 是否需要进行SQL性能分析
                'sql_explain' => false,
            ],
        ],
    ],
Salin selepas log masuk

Dalam kod di atas, kami menentukan dua alamat pelayan (127.0.0.1:3305 dan 127.0.0.1:3306 ) , ini adalah untuk melaksanakan sub-perpustakaan berbilang nod data. Nama pangkalan data, nama pengguna, kata laluan dan maklumat lain kekal tidak berubah.

  1. Buat perisian tengah pangkalan data

Buat perisian tengah pangkalan data Db.php dalam direktori apl/perisian tengah dan tambah kod berikut:

rreee

Buat di sini Perisian tengah yang dipanggil Db dicipta. Dalam kaedah pemegang, mula-mula dapatkan tatasusunan ID pelayan permintaan semasa. Kemudian bandingkan alamat pelayan ini dengan alamat sedia ada dalam kumpulan sambungan $cons Jika alamat tersebut tidak wujud, tambahkannya ke kumpulan sambungan. Akhir sekali, ikat kumpulan sambungan $conns ke contoh bekas. Dalam kaedah getServerIds, kita boleh menetapkan nama ID pelayan, yang lalai kepada uid.

  1. Daftar middleware

Tambahkan kod berikut pada config/middleware.php:

<?php
namespace appmiddleware;

use thinkRequest;
use thinkContainer;

class Db
{
    public function handle(Request $request, Closure $next)
    {
        $serverIds = $this->getServerIds($request);
        //定义一个连接池
        $conns = [];
        foreach($serverIds as $sid) {
            $sid = $request->$sid;
            if(empty($conns[$sid])) {
                $conns[$sid] = Container::getInstance()
                                         ->make('db')->connect($sid);
            }
        }
        Container::getInstance()->bind('db', function() use ($conns) {
            return $conns;
        });
        return $next($request);
    }

    protected function getServerIds(Request $request)
    {
        return ['uid'];
    }
}
Salin selepas log masuk

Kod ini digunakan untuk mendaftar middleware Db middleware kami kepada senarai aktiviti pelaksanaan perisian tengah.

  1. Melaksanakan operasi sub-perpustakaan

Seterusnya, kami akan melaksanakan operasi sub-perpustakaan mendatar dalam model. Di sini kita mengambil jadual pengguna sebagai contoh ID pengguna dibahagikan kepada 100,000 dan 100,000 sebagai had pangkalan data Ini bermakna data dengan ID pengguna antara 0 dan 100,000 disimpan dalam pangkalan data, dan seterusnya, sehingga pengguna. ID berada dalam Data antara 900,000 dan 1 juta disimpan dalam pangkalan data ke-10.

return [
    ...
    appmiddlewareDb::class,
];
Salin selepas log masuk

Di sini kami mentakrifkan 10 sambungan pangkalan data, setiap sambungan mewakili serpihan pangkalan data, mencapai tujuan sharding mendatar. Kemudian kami mentakrifkan kaedah getTableName untuk mendapatkan nama jadual data yang sepadan dengan model semasa. Kira sambungan pangkalan data yang perlu diakses berdasarkan nilai ID kunci utama dalam model dan kembalikan gabungan sambungan pangkalan data dan nama jadual data.

Ringkasan:

Artikel ini memperkenalkan operasi sub-pustaka mendatar dalam ThinkPHP6. Apabila perniagaan terus berkembang dan skala data meningkat, sharding mendatar boleh meningkatkan prestasi sistem dan kebolehskalaan, serta meningkatkan keselamatan data. Dalam ThinkPHP6, anda boleh menggunakan middleware Thinkswoole dan kaedah lain untuk melaksanakan operasi sub-perpustakaan mendatar.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan operasi sub-pangkalan data mendatar pangkalan data dalam ThinkPHP6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menjalankan projek thinkphp Bagaimana untuk menjalankan projek thinkphp Apr 09, 2024 pm 05:33 PM

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

Terdapat beberapa versi thinkphp Terdapat beberapa versi thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Bagaimana untuk menjalankan thinkphp Bagaimana untuk menjalankan thinkphp Apr 09, 2024 pm 05:39 PM

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

Mana yang lebih baik, laravel atau thinkphp? Mana yang lebih baik, laravel atau thinkphp? Apr 09, 2024 pm 03:18 PM

Perbandingan prestasi rangka kerja Laravel dan ThinkPHP: ThinkPHP umumnya berprestasi lebih baik daripada Laravel, memfokuskan pada pengoptimuman dan caching. Laravel berfungsi dengan baik, tetapi untuk aplikasi yang kompleks, ThinkPHP mungkin lebih sesuai.

Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk melaksanakan tugas tak segerak Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk melaksanakan tugas tak segerak Nov 22, 2023 pm 12:01 PM

"Cadangan Pembangunan: Cara Menggunakan Rangka Kerja ThinkPHP untuk Melaksanakan Tugas Asynchronous" Dengan perkembangan pesat teknologi Internet, aplikasi Web mempunyai keperluan yang semakin tinggi untuk mengendalikan sejumlah besar permintaan serentak dan logik perniagaan yang kompleks. Untuk meningkatkan prestasi sistem dan pengalaman pengguna, pembangun sering mempertimbangkan untuk menggunakan tugas tak segerak untuk melaksanakan beberapa operasi yang memakan masa, seperti menghantar e-mel, memproses muat naik fail, menjana laporan, dsb. Dalam bidang PHP, rangka kerja ThinkPHP, sebagai rangka kerja pembangunan yang popular, menyediakan beberapa cara mudah untuk melaksanakan tugas tak segerak.

Bagaimana untuk memasang thinkphp Bagaimana untuk memasang thinkphp Apr 09, 2024 pm 05:42 PM

Langkah pemasangan ThinkPHP: Sediakan persekitaran PHP, Komposer dan MySQL. Buat projek menggunakan Komposer. Pasang rangka kerja dan kebergantungan ThinkPHP. Konfigurasikan sambungan pangkalan data. Hasilkan kod aplikasi. Lancarkan aplikasi dan lawati http://localhost:8000.

Bagaimanakah prestasi thinkphp? Bagaimanakah prestasi thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP ialah rangka kerja PHP berprestasi tinggi dengan kelebihan seperti mekanisme caching, pengoptimuman kod, pemprosesan selari dan pengoptimuman pangkalan data. Ujian prestasi rasmi menunjukkan bahawa ia boleh mengendalikan lebih daripada 10,000 permintaan sesaat, dan digunakan secara meluas dalam tapak web dan sistem perusahaan berskala besar seperti JD.com dan Ctrip dalam aplikasi praktikal.

Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk pembangunan API Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk pembangunan API Nov 22, 2023 pm 05:18 PM

Cadangan pembangunan: Cara menggunakan rangka kerja ThinkPHP untuk pembangunan API Dengan pembangunan berterusan Internet, kepentingan API (Antara Muka Pengaturcaraan Aplikasi) telah menjadi semakin menonjol. API ialah jambatan untuk komunikasi antara aplikasi yang berbeza Ia boleh merealisasikan perkongsian data, panggilan fungsi dan operasi lain, dan menyediakan pembangun kaedah pembangunan yang agak mudah dan pantas. Sebagai rangka kerja pembangunan PHP yang sangat baik, rangka kerja ThinkPHP adalah cekap, berskala dan mudah digunakan.

See all articles