Heim > PHP-Framework > Laravel > Hauptteil

So trennen Sie Lesen und Schreiben in Laravel

WBOY
Freigeben: 2023-05-20 19:44:35
Original
829 Leute haben es durchsucht

Laravel ist ein beliebtes PHP-Framework, das viele leistungsstarke Funktionen und Tools zum Entwickeln und Verwalten von Webanwendungen bietet. Eines der Hauptmerkmale ist die Trennung von Datenbank-Lesen und -Schreiben. In diesem Artikel wird erläutert, wie die Lese- und Schreibtrennung in Laravel-Anwendungen implementiert wird.

Was ist Lese-Schreib-Trennung?

Beim herkömmlichen Anwendungsdesign sendet die Anwendung normalerweise alle Datenbankoperationen an einen einzelnen Datenbankserver. Das bedeutet, dass sowohl das Lesen als auch das Schreiben von Daten über denselben Datenbankserver erfolgen muss. Bei Anwendungen mit hohem Datenverkehr kann dies zu einer übermäßigen Belastung des Datenbankservers und damit zu einer schlechten Leistung führen. Daher besteht eine Lösung darin, eine Lese- und Schreibtrennung für die Datenbank einzuführen.

Die Lese- und Schreibtrennung in der Datenbank ist eine Möglichkeit, Lesevorgänge von Schreibvorgängen zu trennen. Normalerweise senden Anwendungen Lesevorgänge an den Master-Datenbankserver und Schreibvorgänge an den Slave-Datenbankserver. Auf diese Weise trägt der Datenbankserver unter Bedingungen hoher Parallelität nicht mehr alle Lese- und Schreiblasten, wodurch Leistung und Skalierbarkeit verbessert werden.

Warum müssen wir das Lesen und Schreiben der Datenbank trennen?

In Anwendungen mit hohem Datenverkehr sind Datenbankoperationen ein sehr zeitaufwändiger Prozess. Wenn der Datenbankserver außerdem zu einem Engpass wird, nimmt die Leistung der gesamten Anwendung ab. Die Aufteilung von Datenbank-Lese- und Schreibvorgängen verbessert die Leistung und Skalierbarkeit, indem Lesevorgänge zusätzlich zum Master-Datenbankserver auf einen oder mehrere Slave-Server verlagert werden.

Wie erreicht man die Trennung von Lesen und Schreiben?

In einer Laravel-Anwendung kann die Lese-Schreib-Trennung aktiviert werden, indem Änderungen an der Datenbankkonfiguration vorgenommen werden. Hier sind einige Schritte:

  1. Datenbankverbindung konfigurieren

In der Datei config/database.php finden Sie Konfigurationsinformationen zur Datenbankverbindung . Hier können Sie die Verbindungsparameter des Hauptdatenbankservers definieren:

'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,
  ],
],
Nach dem Login kopieren
  1. Eine Slave-Verbindung hinzufügen

Um die Lese-/Schreibtrennung zu aktivieren, Sie müssen eine Slave-Verbindung hinzufügen. Eine Slave-Verbindung kann erstellt werden, indem dieselben Parameter wie die Master-Verbindung kopiert und lediglich der Hostname und die Anmeldeinformationen der Verbindung geändert werden.

'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,
  ],
],
Nach dem Login kopieren
  1. Datenbankdienst konfigurieren

Der Name des Datenbankdienstes und die Konfigurationsinformationen des Slave-Servers können in der Konfiguration/Datenbank definiert werden .php-Datei. Hier können Sie ein Array verwenden, um mehrere Slave-Server zu definieren, jeder mit seinem eigenen Hostnamen und seinen eigenen Anmeldeinformationen.

'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',
      ],
  ],
],
Nach dem Login kopieren
  1. Slave-Server auswählen

In der Anwendung können Sie mit der folgenden Methode einen von mehreren Slave-Servern auswählen:

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

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

Oder Sie können die folgende Methode verwenden, um manuell einen Slave-Server auszuwählen:

// 获取读取的模型
$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();
Nach dem Login kopieren

Zusammenfassung

Durch die Konfiguration der Lese-/Schreibtrennung können Lesevorgänge in der Anwendung auf „von“ verteilt werden des Servers, wodurch die Anwendungsleistung und Skalierbarkeit verbessert wird. In einer Laravel-Anwendung ist die Methode zur Lese-/Schreibtrennung einfach. Sie müssen lediglich die Datenbankverbindungskonfiguration ändern und eine Slave-Verbindung hinzufügen. Anschließend können Slave-Server mithilfe des Query Builders und Eloquent ORM ausgewählt werden.

Das obige ist der detaillierte Inhalt vonSo trennen Sie Lesen und Schreiben in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!