Design und Praxis des horizontalen Shardings von Datenbanken: Anwendung in der PHP-Programmierung
Da die Datenmenge zunimmt, ist die Frage, wie die Datenbank besser verwaltet und optimiert werden kann, für jeden Entwickler zu einem Anliegen geworden. Unter diesen ist das horizontale Datenbank-Sharding eine sehr verbreitete Optimierungsmethode. In diesem Artikel werden Konzept, Prinzip, Design und Praxis des horizontalen Shardings von Datenbanken vorgestellt und der Schwerpunkt auf der Verwendung dieser Technologie in der PHP-Programmierung gelegt.
1. Das Konzept und Prinzip des horizontalen Shardings
Horizontales Sharding bezieht sich auf die horizontale Verteilung der Daten einer Tabelle in mehrere physische Tabellen entsprechend einem bestimmten Feld. Beispielsweise unterteilen wir eine Benutzertabelle entsprechend dem Wertebereich der Benutzer-ID in mehrere Tabellen, z. B. Benutzer_0, Benutzer_1, Benutzer_2 usw. Zu diesem Zeitpunkt müssen Sie beim Abfragen von Benutzerinformationen zunächst den Namen der Tabelle anhand der ID berechnen und dann in der entsprechenden Tabelle nach Daten suchen.
Die Hauptfunktion des horizontalen Shardings besteht darin, eine große Tabelle in kleine Tabellen aufzuteilen, um das Problem der geringen Abfrageeffizienz zu lösen, wenn eine einzelne Tabelle zu groß ist. Da die Daten verschiedener Tabellen außerdem unabhängig voneinander gespeichert werden, können eine verteilte Bereitstellung und eine Hochverfügbarkeitsverarbeitung problemlos durchgeführt werden.
2. Design des horizontalen Shardings
Beim Design des horizontalen Shardings müssen wir die folgenden Punkte berücksichtigen:
Lassen Sie uns diese Probleme einzeln lösen.
Die Auswahl des Sharding-Schlüssels ist der Schlüssel im horizontalen Sharding-Design, der sich direkt auf die Qualität des Sharding-Effekts auswirkt. Normalerweise wählen wir den Primärschlüssel oder den eindeutigen Index einer bestimmten Tabelle als Sharding-Schlüssel. Welches Feld als Sharding-Schlüssel ausgewählt werden soll, muss auf der Grundlage spezifischer Geschäftsbedingungen entschieden werden, z. B. Sharding basierend auf der Benutzer-ID, Sharding basierend auf dem Bestellstatus usw.
Nach der Auswahl des Sharding-Felds müssen wir auch die Sharding-Granularität berücksichtigen. Je feiner die Sharding-Granularität, desto kleiner wird das Datenvolumen einer einzelnen Tabelle und desto besser wird die Abfrageeffizienz. Die Granularität des Shardings darf jedoch nicht zu gering sein, und zu viele physische Tabellen sind der Datenbankverwaltung und -wartung nicht förderlich.
Nach dem Sharding müssen wir überlegen, wie wir verschiedene Daten unter demselben Sharding-Schlüssel in verschiedenen physischen Tabellen speichern und gleichzeitig die Konsistenz dieser Daten sicherstellen können. Es gibt zwei spezifische Implementierungsmethoden:
(1) Vertikales Sharding: Platzieren Sie verschiedene Felder in verschiedenen Tabellen. Beispielsweise werden die Basisinformationen und Bestellinformationen des Benutzers in verschiedenen Tabellen gespeichert. Der Vorteil dieser Methode besteht darin, dass das Problem der tabellenübergreifenden Verknüpfungen nicht berücksichtigt werden muss und außerdem das Problem der Datenkonsistenz zwischen tabellenübergreifenden Datensätzen vermieden wird.
(2) Horizontales Sharding: Verteilen Sie die Daten derselben Tabelle auf mehrere physische Tabellen. Der Vorteil dieser Methode besteht darin, dass sie die Hardwareressourcen voll ausnutzt und gleichzeitig das Problem einer übermäßigen Datenmenge in einer einzelnen Tabelle vermeidet. Es müssen jedoch Probleme bei tabellenübergreifenden Abfragen und der Datenkonsistenz berücksichtigt werden, und es müssen einige spezielle Technologien verwendet werden, um diese Probleme zu vermeiden.
Bei der Abfrage über Shards hinweg müssen wir zunächst die Liste der an der Abfrage beteiligten Shards ermitteln und dann Abfragevorgänge für diese Shards durchführen. Wenn die Abfragebedingungen den Shard-Schlüssel enthalten, kann die Abfrage direkt in der entsprechenden physischen Tabelle platziert werden. Wenn die Abfragebedingungen den Shard-Schlüssel nicht enthalten, muss die Abfrage in allen Shards ausgeführt werden, und dann werden die Ergebnisse zusammengeführt an den Kunden zurückgegeben. Dies kann zwar das Abfrageproblem über mehrere Shards hinweg lösen, erfordert jedoch höhere Ressourcenkosten und Zeitkosten.
3. Verwenden Sie PHP, um horizontales Sharding zu implementieren.
In PHP-Anwendungen können wir horizontales Sharding über Frameworks wie ShardingSphere und Doctrine ORM implementieren. Hier nehmen wir ShardingSphere als Beispiel, um vorzustellen, wie dieses Framework zur Implementierung von horizontalem Sharding verwendet wird.
ShardingSphere ist die erstklassige Open-Source-Middleware für verteilte Datenbanken in China und bietet zwei Versionen: Java und PHP. Die spezifische Implementierung ist wie folgt:
"require": {
"php": "^7.2.5",
"sharding- sphere/sharding-proxy": "^5.3",
"sharding-sphere/sharding-core": "^5.3"
}
use ShardingSphereShardingAutoConfiguration;
$parser = new ShardingSphereParserMySQLMySQLParser();
$executor = new ShardingSphereExecutorExecutorEngine();
$shardingConfig = new ShardingAutoConfiguration () ;
$shardingConfig->setDataSource($dataSource); // Datenquelle festlegen
$shardingConfig->setShardingRule($shardingRuleConfig); // Sharding-Regeln festlegen
$config = new ShardingSphereProxyCommandLineConfig();
$ Instanz = new ShardingSphereProxyShardingInstanceLoader($parser, $executor);
$instance->load($config, $shardingConfig);
Spezifische Sharding-Regeln müssen auf der Grundlage spezifischer Geschäftsszenarien formuliert werden. Beispielsweise kann für die Sharding-Regel der Benutzer-ID das Ergebnis der Division der Benutzer-ID durch 10 als Sharding-Schlüssel verwendet und dann basierend auf dem Ergebnis auf mehrere physische Tabellen verteilt werden.
Zu diesem Zeitpunkt haben wir alle Code-Implementierungen für die Verwendung von ShardingSphere zur Implementierung des horizontalen Shardings der Datenbank abgeschlossen.
Zusammenfassung
In diesem Artikel werden Konzept, Prinzip, Design und Praxis des horizontalen Sharding von Datenbanken vorgestellt und erläutert, wie das ShardingSphere-Framework zum Implementieren von horizontalem Sharding in der PHP-Programmierung verwendet wird. Durch horizontales Sharding können wir große Tabellen in kleine Tabellen aufteilen, die Abfrageeffizienz verbessern und die verteilte Bereitstellung und Hochverfügbarkeitsverarbeitung erleichtern.
Das obige ist der detaillierte Inhalt vonDesign und Praxis des horizontalen Shardings von Datenbanken: Anwendung in der PHP-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!