


PHP-Methode zur Implementierung der Datenbank-Sharding-Erweiterung
Im Internetzeitalter sind Daten zu einem der wichtigsten Vermögenswerte eines Unternehmens geworden. Da der Bedarf an Datenspeicherung und -verarbeitung weiter wächst, ist die Datenbankerweiterung für viele Unternehmen zu einer unumgänglichen Entscheidung geworden. Wenn eine einzelne Datenbank die Anforderungen des Unternehmens nicht erfüllen kann, wird Datenbank-Sharding zu einer effektiven Erweiterungslösung.
Datenbank-Sharding bezeichnet die horizontale Aufteilung einer Datenbank in mehrere unabhängige Bibliotheken, wobei jede Bibliothek einen Teil der Daten speichert, wodurch die Belastung einer einzelnen Bibliothek verringert und die Systemleistung verbessert wird. In tatsächlichen Anwendungsszenarien wird das Datenbank-Sharding im Allgemeinen in zwei Methoden unterteilt: vertikales Sharding und horizontales Sharding. In diesem Artikel wird hauptsächlich die von PHP implementierte horizontale Sharding-Erweiterungsmethode vorgestellt.
- Die Grundidee des horizontalen Datenbank-Shardings
Zunächst müssen die Daten nach bestimmten Regeln in verschiedene Shards aufgeteilt werden. Spezifische Partitionierungsregeln können entsprechend den Geschäftsanforderungen formuliert werden:
- Bereichsbasiertes Sharding: Sharding basierend auf dem Wert einer bestimmten Spalte, um sicherzustellen, dass der in jedem Shard gespeicherte Datenbereich unabhängig voneinander ist
- Basierend auf Hash-Sharding: Führen Sie eine Hash-Operation für den Wert einer bestimmten Spalte durch, um einen Wert zu erhalten, und verteilen Sie den Wert dann auf verschiedene Shards, um sicherzustellen, dass die in jedem Shard gespeicherten Daten ungefähr ausgeglichen sind.
Nach der Aufteilung der Shards muss die Verbindungsschicht geändert werden, damit sie entsprechend dem Shard, in dem sich die Daten befinden, die entsprechende Datenbank für den Zugriff auswählen kann. Insbesondere muss die Verbindungsschicht die relevanten Informationen jedes Fragments aufzeichnen, z. B. Fragmentkapazität, Fragmentstartwert, Fragmentendwert usw., und Schnittstellen für die Verwendung durch die Geschäftsschicht verfügbar machen.
Schließlich muss die Business-Schicht gemäß den Partitionierungsregeln Lese- und Schreibanforderungen an die Datenbank an die entsprechenden Shards senden. Die Datenbankoperation in der Geschäftsschicht ist eigentlich eine Kapselung der Verbindungsschicht. Sie muss die entsprechende Datenbank gemäß den Sharding-Regeln auswählen, um CRUD-Operationen durchzuführen.
- So implementieren Sie eine Datenbank-Sharding-Erweiterung in PHP
In PHP können Sie PDO verwenden, um eine Sharding-Erweiterung der MySQL-Datenbank zu erreichen. Im Einzelnen müssen Sie die folgenden Schritte ausführen:
2.1 Erstellen einer PDO-Verbindung
Beim Erstellen einer PDO-Verbindung müssen Sie auf einige Details achten. Zunächst muss die PDO-Verbindung die relevanten Konfigurationsinformationen der Hauptbibliothek und die Liste der Shard-Bibliotheken angeben. Zweitens müssen Sie das Attribut PDO::ATTR_ERRMODE auf PDO::ERRMODE_EXCEPTION setzen, damit Sie PDO-Ausnahmen erfassen und behandeln können. Abschließend müssen Sie das Attribut PDO::ATTR_EMULATE_PREPARES auf false setzen, damit eine echte Vorverarbeitung erreicht werden kann.
Der Beispielcode lautet wie folgt:
// 主库配置信息 $masterConfig = [ 'dsn' => 'mysql:host=127.0.0.1;port=3306;dbname=test', 'username' => 'root', 'password' => 'root', ]; // 分片库列表 $shardConfigList = [ [ 'dsn' => 'mysql:host=127.0.0.1;port=3306;dbname=test_shard_0', 'username' => 'root', 'password' => 'root', ], [ 'dsn' => 'mysql:host=127.0.0.1;port=3306;dbname=test_shard_1', 'username' => 'root', 'password' => 'root', ], ]; // 创建PDO连接 $pdo = new PDO($masterConfig['dsn'], $masterConfig['username'], $masterConfig['password'], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ]);
2.2 Shard-Abfrage ausführen
Bei der Durchführung von Datenbankoperationen in einer Anwendung müssen die Daten den entsprechenden Shards gemäß den Partitionierungsregeln zugeordnet werden. Typischerweise sind die Strukturen in einer Reihe von Shard-Bibliotheken gleich, nur die Daten unterscheiden sich. Wenn Sie eine Shard-Abfrage durchführen, können Sie daher zunächst die Shard-Informationen von der Hauptbibliothek abrufen und die Abfrageanforderung basierend auf den Shard-Informationen an die entsprechende Shard-Bibliothek weiterleiten.
Der Beispielcode lautet wie folgt:
// 获取分片信息 $sql = 'SELECT * FROM `shard_info` WHERE shard_id = ?'; $stmt = $pdo->prepare($sql); $stmt->execute([$shardId]); $info = $stmt->fetch(PDO::FETCH_ASSOC); if (!$info) { throw new RuntimeException('Shard not found'); } // 创建分片PDO连接 $pdoShard = new PDO($info['dsn'], $info['username'], $info['password'], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ]); // 执行查询 $sql = 'SELECT * FROM `table` WHERE `key` = ?'; $stmt = $pdoShard->prepare($sql); $stmt->execute([$key]); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
2.3 Ausführen von Shard-Transaktionen
Bei der Durchführung verteilter Transaktionen müssen die Vorgänge mehrerer beteiligter Shards als Ganzes behandelt werden. Insbesondere kann ein zweiphasiges Festschreibungsprotokoll verwendet werden, um Konsistenz bei verteilten Transaktionen zu erreichen.
Unter anderem erfordert die erste Phase_Vorbereitungsphase das Senden von Vorbereitungsanforderungen an alle beteiligten Shards, um die entsprechende Transaktions-ID zu erhalten. Nachdem alle Shards erfolgreiche Antworten zurückgegeben haben, müssen Commit-/Abort-Anfragen an alle Shards gesendet werden, um die Transaktion festzuschreiben oder rückgängig zu machen.
Der Beispielcode lautet wie folgt:
// 开始分布式事务 $pdo->beginTransaction(); try { // 准备分片事务 $xid = uniqid(); $prepares = []; foreach ($shardConfigList as $shardConfig) { $pdoShard = new PDO($shardConfig['dsn'], $shardConfig['username'], $shardConfig['password'], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, ]); $pdoShard->beginTransaction(); $stmt = $pdoShard->prepare('INSERT INTO `table` (`key`, `value`) VALUES (?, ?)'); $stmt->execute([$key, $value]); $prepares[] = [$pdoShard, $xid]; } // 提交分片事务 foreach ($prepares as [$pdoShard, $xid]) { $stmt = $pdoShard->prepare('PREPARE TRANSACTION ?'); $stmt->execute([$xid]); } foreach ($prepares as [$pdoShard, $xid]) { $stmt = $pdoShard->prepare('COMMIT PREPARED ?'); $stmt->execute([$xid]); } // 提交整个事务 $pdo->commit(); } catch (Exception $ex) { // 回滚分片事务 foreach ($prepares as [$pdoShard, $xid]) { $stmt = $pdoShard->prepare('ROLLBACK PREPARED ?'); $stmt->execute([$xid]); } // 回滚整个事务 $pdo->rollback(); }
- Zusammenfassung
Datenbank-Sharding ist eine effektive Erweiterungslösung, die dabei helfen kann, das Problem der hohen Auslastung einer einzelnen Datenbank zu lösen. In PHP kann PDO verwendet werden, um eine Shard-Erweiterung der MySQL-Datenbank zu erreichen. Der spezifische Vorgang umfasst das Erstellen einer PDO-Verbindung, das Ausführen von Shard-Abfragen und das Ausführen von Shard-Transaktionen. In praktischen Anwendungen muss auf die Regeln der Datenpartitionierung und Änderungen an der Verbindungsschicht sowie auf die Konsistenz verteilter Transaktionen geachtet werden.
Das obige ist der detaillierte Inhalt vonPHP-Methode zur Implementierung der Datenbank-Sharding-Erweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.
