Pangkalan Data Teragih (Pembina Pertanyaan 20)
Sokongan teragih
Lapisan akses data menyokong pangkalan data teragih, termasuk pengasingan baca-tulis Untuk mendayakan pangkalan data teragih, anda perlu mendayakan parameter penggunaan dalam fail konfigurasi pangkalan data:
return [ // 启用分布式数据库 'deploy' => 1, // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '192.168.1.1,192.168.1.2', // 数据库名 'database' => 'demo', // 数据库用户名 'username' => 'root', // 数据库密码 'password' => '', // 数据库连接端口 'hostport' => '', ];
Selepas mendayakan pangkalan data. Parameter nama hos ialah kunci Bilangan nama hos menentukan bilangan pangkalan data yang diedarkan Secara lalai, alamat pertama ialah pelayan utama.
Pelayan tuan dan hamba menyokong penetapan parameter sambungan yang berbeza, termasuk:
Parameter sambungan |
---|
nama pengguna |
port |
pangkalan data |
dsn |
charset |
Jika parameter pelayan master dan slave di atas adalah konsisten, anda hanya perlu menetapkan satu untuk parameter yang berbeza, anda boleh menetapkannya secara berasingan, contohnya:
return [ // 启用分布式数据库 'deploy' => 1, // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '192.168.1.1,192.168.1.2,192.168.1.3', // 数据库名 'database' => 'demo', // 数据库用户名 'username' => 'root,slave,slave', // 数据库密码 'password' => '123456', // 数据库连接端口 'hostport' => '', // 数据库字符集 'charset' => 'utf8', ];
Ingat, sama ada sama, atau setiap satu mesti ditetapkan.
Parameter pangkalan data yang diedarkan menyokong penggunaan takrif tatasusunan (biasanya untuk mengelakkan salah huraian berbilang akaun dan kata laluan), contohnya:
return [ // 启用分布式数据库 'deploy' => 1, // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' =>[ '192.168.1.1','192.168.1.2','192.168.1.3'], // 数据库名 'database' => 'demo', // 数据库用户名 'username' => 'root,slave,slave', // 数据库密码 'password' => ['123456','abc,def','hello'] // 数据库连接端口 'hostport' => '', // 数据库字符集 'charset' => 'utf8', ];
Pemisahan membaca dan menulis
Anda juga boleh menetapkan sama ada bacaan dan penulisan yang diedarkan pangkalan data dipisahkan, Secara lalai, baca dan tulis tidak dipisahkan, iaitu setiap pelayan boleh melakukan operasi baca dan tulis Untuk pangkalan data tuan-hamba, pemisahan baca dan tulis perlu ditetapkan melalui tetapan berikut :
'rw_separate' => true,
Dalam kes pemisahan baca dan tulis Secara lalai, konfigurasi pangkalan data pertama ialah maklumat konfigurasi pelayan induk, yang bertanggungjawab untuk menulis data Jika parameter master_num ditetapkan, ia boleh menyokong penulisan oleh berbilang pelayan induk (salah satu pelayan induk disambungkan secara rawak setiap kali). Alamat lain semuanya dari pangkalan data, bertanggungjawab untuk membaca data, dan bilangannya tidak terhad. Setiap kali anda menyambung ke pelayan hamba dan melakukan operasi baca, sistem akan memilih secara rawak daripada pelayan hamba. Setiap permintaan untuk sambungan pangkalan data yang sama hanya akan menyambungkan pelayan induk dan pelayan hamba sekali Jika pelayan hamba untuk permintaan tertentu tidak dapat disambungkan, ia akan bertukar secara automatik ke pelayan induk untuk operasi pertanyaan.
Jika anda tidak mahu membaca secara rawak, atau dalam beberapa kes pelayan hamba lain tidak tersedia buat sementara waktu, anda juga boleh menetapkan slave_no untuk menentukan pelayan tetap untuk operasi baca Nombor siri yang ditentukan oleh slave_no mewakili nombor siri alamat pangkalan data dalam nama hos, bermula dari 0.
Jika anda memanggil operasi CURD kelas atau model pertanyaan, sistem akan secara automatik menentukan sama ada kaedah yang dilaksanakan pada masa ini ialah operasi baca atau tulis dan secara automatik menyambung ke pelayan induk-hamba Jika anda menggunakan SQL asli. anda perlu memberi perhatian kepada peraturan lalai sistem: Operasi Tulis mesti menggunakan kaedah pelaksanaan pangkalan data, dan operasi baca mesti menggunakan kaedah pertanyaan pangkalan data Jika tidak, huru-hara baca dan tulis tuan-hamba akan berlaku.
Jika situasi berikut berlaku, pelayan utama akan disambungkan secara automatik:
1 Kaedah operasi tulis pangkalan data digunakan (laksana/masukkan/kemas kini/padam dan kaedah terbitan
2 kaedah dipanggil, ia akan menyambung secara automatik ke pelayan induk
3 Jika sambungan dari pelayan hamba gagal, ia akan menyambung secara automatik ke pelayan induk
4
5. Kaedah master/readMaster bagi pembina pertanyaan dipanggil Master Kerja penyegerakan data daripada pangkalan data tidak dilaksanakan dalam rangka kerja, dan pangkalan data perlu mempertimbangkan mekanisme penyegerakan atau replikasinya sendiri. Jika mungkin terdapat kelewatan penyegerakan selepas menulis data dalam jumlah data yang besar atau dalam keadaan khas, anda boleh menghubungi kaedah master() untuk menanyakan pangkalan data utama. Dalam persekitaran pengeluaran sebenar, mekanisme pelaksanaan yang diedarkan pangkalan data bagi banyak hos awan akan berbeza daripada pembangunan tempatan, tetapi biasanya dua kaedah berikut digunakan: Yang pertama: menyediakan IP tulis dan baca IP (biasanya ialah maya IP) untuk melaksanakan operasi pemisahan baca dan tulis pada pangkalan data; Jenis kedua: sentiasa mengekalkan IP yang sama untuk menyambung ke pangkalan data, dan penjadualan IP pemisahan baca dan tulis dalaman akan dilakukan (Alibaba Cloud menggunakan kaedah ini).Bacaan perpustakaan utama
Dalam beberapa kes, anda perlu membaca data terus dari pangkalan data utama Sebagai contoh, selepas data baru ditulis, data pangkalan data hamba tidak sempat disegerakkan Anda boleh menggunakan
Db::name('user') ->where('id', 1) ->update(['name' => 'thinkphp']); Db::name('user') ->master(true) ->find(1);
Namun, keadaan sebenar adalah jauh lebih rumit daripada ini, kerana anda tidak Jelas sama ada masih terdapat operasi pertanyaan yang berkaitan dalam kaedah berikutnya Pada masa ini, kita boleh mengkonfigurasi parameter konfigurasi read_master untuk membuka pangkalan data.
// 开启自动主库读取 'read_master' => true,
Selepas dihidupkan, sebaik sahaja kami melakukan operasi tulis pada jadual data tertentu, semua pertanyaan seterusnya kepada jadual dalam permintaan semasa akan menggunakan perpustakaan utama untuk membaca.