Maison > cadre php > Laravel > Comment séparer la lecture et l'écriture dans Laravel

Comment séparer la lecture et l'écriture dans Laravel

WBOY
Libérer: 2023-05-20 19:44:35
original
931 Les gens l'ont consulté

Laravel est un framework PHP populaire qui fournit de nombreuses fonctionnalités et outils puissants pour développer et maintenir des applications Web. L'une des fonctionnalités clés est la séparation de la lecture et de l'écriture de la base de données. Cet article explique comment implémenter la séparation en lecture et en écriture dans les applications Laravel.

Qu'est-ce que la séparation lecture-écriture ?

Dans la conception d'applications traditionnelles, les applications envoient généralement toutes les opérations de base de données à un seul serveur de base de données. Cela signifie que la lecture et l'écriture des données doivent être effectuées via le même serveur de base de données. Dans les applications à fort trafic, cela peut entraîner une charge excessive sur le serveur de base de données, entraînant de mauvaises performances. Par conséquent, une solution consiste à introduire une séparation en lecture et en écriture dans la base de données.

La séparation de lecture et d'écriture de base de données est un moyen de séparer les opérations de lecture des opérations d'écriture. En règle générale, les applications envoient des opérations de lecture au serveur de base de données maître et des opérations d'écriture au serveur de base de données esclave. De cette manière, dans des conditions de concurrence élevée, le serveur de base de données ne supporte plus toutes les charges de lecture et d'écriture, améliorant ainsi les performances et l'évolutivité.

Pourquoi devons-nous séparer la lecture et l'écriture de la base de données ?

Dans les applications à fort trafic, les opérations de base de données sont un processus très chronophage. De plus, si le serveur de base de données devient un goulot d'étranglement, les performances de l'ensemble de l'application se dégraderont. Le fractionnement lecture-écriture de la base de données améliore les performances et l'évolutivité en déchargeant les opérations de lecture sur un ou plusieurs serveurs esclaves en plus du serveur de base de données maître.

Comment parvenir à la séparation de la lecture et de l'écriture ?

Dans les applications Laravel, la séparation lecture-écriture peut être activée en apportant des modifications à la configuration de la base de données. Voici quelques étapes :

  1. Configurer la connexion à la base de données

Dans le fichier config/database.php, vous pouvez trouver des informations de configuration sur la connexion à la base de données. Ici, vous pouvez définir les paramètres de connexion du serveur de base de données maître :

'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,
  ],
],
Copier après la connexion
  1. Ajouter une connexion esclave

Pour activer la séparation lecture-écriture, vous devez ajouter une connexion esclave. Une connexion esclave peut être créée en copiant les mêmes paramètres que la connexion maître, en modifiant simplement le nom d'hôte et les informations d'identification de la connexion.

'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,
  ],
],
Copier après la connexion
  1. Configuration du service de base de données

Vous pouvez définir le nom du service de base de données et les informations de configuration du serveur esclave dans le fichier config/database.php. Ici, vous pouvez utiliser un tableau pour définir plusieurs serveurs esclaves, chacun avec son propre nom d'hôte et ses propres informations d'identification.

'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',
      ],
  ],
],
Copier après la connexion
  1. Sélectionnez un esclave

Dans l'application, vous pouvez en sélectionner un parmi plusieurs esclaves en utilisant :

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

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

Ou vous pouvez sélectionner manuellement un esclave en utilisant :

// 获取读取的模型
$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();
Copier après la connexion

Résumé

Configuration La séparation en lecture-écriture peut améliorer les performances de l'application et l'évolutivité en distribuant les opérations de lecture dans une application aux serveurs esclaves. Dans une application Laravel, la méthode pour réaliser la séparation lecture-écriture est simple. Il vous suffit de modifier la configuration de la connexion à la base de données et d'ajouter une connexion esclave. Les serveurs esclaves peuvent ensuite être sélectionnés à l'aide du générateur de requêtes et d'Eloquent ORM.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal