Rumah  >  Artikel  >  rangka kerja php  >  Cara mengasingkan bacaan dan penulisan dalam laravel

Cara mengasingkan bacaan dan penulisan dalam laravel

WBOY
WBOYasal
2023-05-20 19:44:35905semak imbas

Laravel ialah rangka kerja PHP popular yang menyediakan banyak ciri dan alatan berkuasa untuk membangun dan menyelenggara aplikasi web. Salah satu ciri utama ialah pengasingan pangkalan data baca dan tulis. Artikel ini akan memperkenalkan cara melaksanakan pemisahan baca dan tulis dalam aplikasi Laravel.

Apakah itu pemisahan baca-tulis?

Dalam reka bentuk aplikasi tradisional, aplikasi biasanya menghantar semua operasi pangkalan data ke pelayan pangkalan data tunggal. Ini bermakna kedua-dua membaca dan menulis data perlu dilakukan melalui pelayan pangkalan data yang sama. Dalam aplikasi trafik tinggi, ini boleh menyebabkan beban berlebihan pada pelayan pangkalan data, mengakibatkan prestasi yang lemah. Oleh itu, satu penyelesaian adalah dengan memperkenalkan pemisahan baca dan tulis pangkalan data.

Pengasingan baca dan tulis pangkalan data ialah cara untuk memisahkan operasi baca daripada operasi tulis. Biasanya, aplikasi menghantar operasi baca ke pelayan pangkalan data induk dan operasi tulis ke pelayan pangkalan data hamba. Dengan cara ini, dalam keadaan konkurensi yang tinggi, pelayan pangkalan data tidak lagi menanggung semua beban baca dan tulis, dengan itu meningkatkan prestasi dan kebolehskalaan.

Mengapa kita perlu mengasingkan pangkalan data membaca dan menulis?

Dalam aplikasi trafik tinggi, operasi pangkalan data adalah proses yang sangat memakan masa. Selain itu, jika pelayan pangkalan data menjadi halangan, prestasi keseluruhan aplikasi akan merosot. Pemisahan baca-tulis pangkalan data meningkatkan prestasi dan kebolehskalaan dengan memunggah operasi baca kepada satu atau lebih pelayan hamba sebagai tambahan kepada pelayan pangkalan data induk.

Bagaimana untuk mencapai pemisahan membaca dan menulis?

Dalam aplikasi Laravel, pemisahan baca-tulis boleh didayakan dengan membuat perubahan pada konfigurasi pangkalan data. Berikut ialah beberapa langkah:

  1. Mengkonfigurasi sambungan pangkalan data

Dalam fail config/database.php, anda boleh mendapatkan maklumat konfigurasi tentang sambungan pangkalan data. Di sini, anda boleh mentakrifkan parameter sambungan pelayan pangkalan data induk:

'connections' => [
  'mysql' => [
      'driver'      => 'mysql',
      'host'        => env('DB_HOST', 'localhost'),
      'database'    => env('DB_DATABASE', 'forge'),
      'username'    => env('DB_USERNAME', 'forge'),
      'password'    => env('DB_PASSWORD', ''),
      'charset'     => 'utf8mb4',
      'collation'   => 'utf8mb4_unicode_ci',
      'prefix'      => '',
      'strict'      => false,
      'engine'      => null,
  ],
],
  1. Tambah sambungan hamba

Untuk mendayakan pemisahan baca-tulis, anda perlu menambah hamba sambungan. Sambungan hamba boleh dibuat dengan menyalin parameter yang sama seperti sambungan induk, hanya menukar nama hos dan bukti kelayakan sambungan.

'connections' => [
  'mysql' => [
      'driver'      => 'mysql',
      'host'        => env('DB_HOST', 'localhost'),
      'database'    => env('DB_DATABASE', 'forge'),
      'username'    => env('DB_USERNAME', 'forge'),
      'password'    => env('DB_PASSWORD', ''),
      'charset'     => 'utf8mb4',
      'collation'   => 'utf8mb4_unicode_ci',
      'prefix'      => '',
      'strict'      => false,
      'engine'      => null,
  ],

  'mysql_read' => [
      'driver'      => 'mysql',
      'host'        => env('DB_READ_HOST', 'localhost'),
      'database'    => env('DB_READ_DATABASE', 'forge'),
      'username'    => env('DB_READ_USERNAME', 'forge'),
      'password'    => env('DB_READ_PASSWORD', ''),
      'charset'     => 'utf8mb4',
      'collation'   => 'utf8mb4_unicode_ci',
      'prefix'      => '',
      'strict'      => false,
      'engine'      => null,
  ],
],
  1. Mengkonfigurasi perkhidmatan pangkalan data

Anda boleh menentukan nama perkhidmatan pangkalan data dan maklumat konfigurasi pelayan hamba dalam fail config/database.php. Di sini, anda boleh menggunakan tatasusunan untuk mentakrifkan berbilang pelayan hamba, setiap satu dengan nama hos dan bukti kelayakannya sendiri.

'connections' => [
  'mysql' => [
      'driver'      => 'mysql',
      'host'        => env('DB_HOST', 'localhost'),
      'database'    => env('DB_DATABASE', 'forge'),
      'username'    => env('DB_USERNAME', 'forge'),
      'password'    => env('DB_PASSWORD', ''),
      'charset'     => 'utf8mb4',
      'collation'   => 'utf8mb4_unicode_ci',
      'prefix'      => '',
      'strict'      => false,
      'engine'      => null,
  ],

  'mysql_read' => [
      'driver'      => 'mysql',
      'host'        => env('DB_READ_HOST', 'localhost'),
      'database'    => env('DB_READ_DATABASE', 'forge'),
      'username'    => env('DB_READ_USERNAME', 'forge'),
      'password'    => env('DB_READ_PASSWORD', ''),
      'charset'     => 'utf8mb4',
      'collation'   => 'utf8mb4_unicode_ci',
      'prefix'      => '',
      'strict'      => false,
      'engine'      => null,
  ],
],

'service' => [
  'mysql' => [
      'write' => 'mysql',
      'read'  => [
          'mysql_read',
      ],
  ],
],
  1. Pilih hamba

Dalam aplikasi, anda boleh memilih satu daripada berbilang hamba menggunakan:

// 获取读取的模型
$model = new Post;

// 从所有从服务器中随机选择一个
$results = $model->on('mysql_read')->inRandomOrder()->get();

Sebagai alternatif anda boleh menggunakan Kaedah berikut digunakan untuk memilih pelayan hamba secara manual:

// 获取读取的模型
$model = new Post;

// 手动选择第一个从服务器
$config = config('database.connections.mysql_read');
$conn = DB::connection('mysql_read');
$conn->setPdo($conn->createConnector($config)->connect());
$results = $model->setConnection($conn)->inRandomOrder()->get();

Ringkasan

Mengkonfigurasi pemisahan baca dan tulis boleh mengedarkan operasi baca dalam aplikasi kepada pelayan hamba, dengan itu meningkatkan prestasi dan ketersediaan aplikasi. Dalam aplikasi Laravel, kaedah untuk mencapai pemisahan baca-tulis adalah mudah Anda hanya perlu menukar konfigurasi sambungan pangkalan data dan menambah sambungan hamba. Pelayan hamba kemudiannya boleh dipilih menggunakan pembina pertanyaan dan Eloquent ORM.

Atas ialah kandungan terperinci Cara mengasingkan bacaan dan penulisan dalam laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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