Heim Backend-Entwicklung PHP-Tutorial PHP-Methode zur Implementierung der Datenbank-Sharding-Erweiterung

PHP-Methode zur Implementierung der Datenbank-Sharding-Erweiterung

May 16, 2023 am 08:36 AM
php 扩容 数据库分片

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.

  1. 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.

  1. 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,
]);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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();
}
Nach dem Login kopieren
  1. 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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

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

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

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.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

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

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

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

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

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

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

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

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

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

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

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

See all articles