Heim >Backend-Entwicklung >PHP-Tutorial >Design und Praxis des horizontalen Shardings von Datenbanken: Anwendung in der PHP-Programmierung

Design und Praxis des horizontalen Shardings von Datenbanken: Anwendung in der PHP-Programmierung

WBOY
WBOYOriginal
2023-06-23 09:54:061711Durchsuche

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:

  1. Welches Feld soll als Sharding-Feld verwendet werden?
  2. Die Granularität des Shardings.
  3. So bewahren Sie die Konsistenz fragmentierter Daten.
  4. So gehen Sie mit Shard-übergreifenden Abfrageproblemen um.

Lassen Sie uns diese Probleme einzeln lösen.

  1. Auswahl des Sharding-Schlüssels

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.

  1. Sharding-Granularität

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.

  1. Konsistenz der Sharding-Daten

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.

  1. Umgang mit Shard-übergreifenden Abfrageproblemen

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:

  1. Zuerst müssen wir die ShardingSphere-Abhängigkeit in der Composer.json-Konfigurationsdatei hinzufügen:

"require": {
"php": "^7.2.5",
"sharding- sphere/sharding-proxy": "^5.3",
"sharding-sphere/sharding-core": "^5.3"
}

  1. Dann muss die Startlogik von ShardingSphere zum PHP-Code hinzugefügt werden. Am Beispiel von MySQL müssen wir dem Startcode Folgendes hinzufügen:

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);

  1. Schließlich müssen wir entsprechende Sharding-Regeln schreiben, die auf spezifischen Geschäftsbedingungen basieren.

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!

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