Heim > Backend-Entwicklung > PHP-Tutorial > So implementieren Sie Memcached-Datenbank-Sharding in PHP

So implementieren Sie Memcached-Datenbank-Sharding in PHP

王林
Freigeben: 2023-05-16 10:44:01
Original
1032 Leute haben es durchsucht

Mit der Entwicklung von Webanwendungen wird die Komplexität der Datenverarbeitung immer höher. Um eine bessere Skalierbarkeit und Leistung zu bieten, haben viele Anwendungen NoSQL-Datenbanken übernommen. Memcached ist ein beliebter NoSQL-In-Memory-Cache, der die Antwortzeit von Webanwendungen deutlich verbessern und gleichzeitig eine hohe Datenverfügbarkeit bieten kann.

Wenn Ihre Anwendung jedoch wächst, kann die Speicherkapazität einer einzelnen Instanz von Memcached an ihre Grenzen stoßen. In diesem Fall muss die Memcached-Datenbank-Sharding-Technologie verwendet werden, um die Daten auf mehrere Server zu verteilen. In diesem Artikel erfahren Sie, wie Sie Memcached-Datenbank-Sharding mit PHP implementieren.

Memcached-Server-Sharding

In Memcached wird eine Hash-Funktion verwendet, um die Schlüssel von Daten bestimmten Servern zuzuordnen. Die Hash-Funktion kann MD5, CRC32 usw. sein. Wenn Daten hinzugefügt oder aktualisiert werden, verwendet Memcached eine Hash-Funktion, um die Schlüssel zu berechnen und zu bestimmen, welcher Server verwendet werden soll. Wenn wir Memcached-Datenbank-Sharding verwenden, müssen wir Schlüssel mithilfe derselben Methode wie eine Hash-Funktion bestimmten Servern zuordnen. Dies kann durch Befolgen der Schritte erfolgen:

  1. Serverliste definieren
    Beim Memcached-Sharding müssen Daten auf mehreren Servern gespeichert werden. Wir können ein Array definieren, das die IP-Adresse und die Portnummer des Servers enthält. Zum Beispiel:

$servers = array(

'192.168.1.101:11211', // Server 1
'192.168.1.102:11211', // Server 2
'192.168.1.103:11211' // Server 3
Nach dem Login kopieren

);

  1. Hash-Wert berechnen
    Um die Daten zu hashen, wird eine Hash-Funktion verwendet. Memcached bietet mehrere integrierte Hash-Funktionen, darunter MD5 und CRC32. Wir können jeden davon verwenden, um den Hash-Wert zu berechnen. Zum Beispiel mit der MD5-Hash-Funktion:

$hash = md5('mykey');

  1. Server auswählen
    Der mit der Hash-Funktion berechnete Hash-Wert sollte dem tatsächlichen Memcached-Server zugeordnet werden. Dies kann durch die Aufteilung des Hashwerts in Intervalle erfolgen. Wenn es beispielsweise drei Server gibt, ordnen wir die Hashes den Bereichen 0–32, 33–64 und 65–96 zu. Befolgen Sie dazu die folgenden Schritte:
  • Berechnen Sie den Hash einer 32-Bit-Ganzzahl ohne Vorzeichen.
  • Teilen Sie diese Ganzzahl in Intervalle.
  • Ordnen Sie die Intervalle dem Server zu.

Implementieren Sie dies mit dem folgenden Code:

$hash = md5('mykey');
$hash_number = intval("0x".substr($hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers [$server_index ];

In diesem Beispiel ordnen wir „mykey“ zunächst mithilfe von MD5-Hashing einem Hashwert zu. Anschließend berechnen wir den 32-Bit-Ganzzahlwert ohne Vorzeichen und berechnen den Modul dieses Werts anhand der Länge des Serverarrays. Dadurch erhalten wir einen Serverindex und können diesen Index verwenden, um die richtige Server-IP-Adresse und Portnummer aus der Serverliste abzurufen.

  1. Daten speichern
    In diesem Schritt speichern wir die Daten auf dem Memcached-Server. Im Falle der Verwendung einer Serverliste müssen wir die Memcached-Klassen aus der Memcached-Erweiterungsbibliothek verwenden und ihnen die Serverliste übergeben. Gleichzeitig müssen wir auch den Hashwert und den Server aus dem vorherigen Schritt verwenden, um den tatsächlichen Server zu bestimmen, auf dem die Daten gespeichert sind. Zum Beispiel:

$memcached = new Memcached();
$memcached->addServers($servers);

$hash = md5('mykey');
$hash_number = intval("0x".substr( $ hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers[$server_index];

$memcached->setByKey($server, 'mykey', ' data ', 60);

In diesem Beispiel rufen wir zunächst die Methode addServers() der Memcached-Klasse mithilfe des Server-Arrays auf, um die Liste der zu verwendenden Server anzugeben. Anschließend verwenden wir den Hash und den Server, um die Methode setByKey() aufzurufen, um die Daten auf dem richtigen Server zu speichern. Wir bieten auch eine Ablaufzeit (60 Sekunden) an.

  1. Daten abrufen
    Bei Verwendung von Sharding müssen Sie die Methode getByKey() verwenden, um die Daten vom richtigen Server abzurufen. Zum Beispiel:

$hash = md5('mykey');
$hash_number = intval("0x".substr($hash, 0, 8));
$server_index = $hash_number % count($servers);
$server = $servers[$server_index];

$data = $memcached->getByKey($server, 'mykey');

In diesem Beispiel verwenden wir den Hashwert und den Server, um getByKey( aufzurufen )-Methode, rufen Sie die Daten vom richtigen Server ab. Wenn der Schlüssel nicht vorhanden ist, wird null zurückgegeben.

Zusammenfassung

Bei Verwendung von Memcached können Sie mithilfe der Sharding-Technologie Daten auf mehreren Servern speichern. Mit PHP können wir die Memcached-Klasse in der Memcached-Erweiterungsbibliothek verwenden, die verschiedene Methoden zum Hinzufügen von Servern, Einrichten und Abrufen von Daten bereitstellt. Mithilfe einer Hash-Funktion können wir den Hash des Schlüssels berechnen und ihn dem richtigen Server zuordnen. Denken Sie daran, dass sich die Wahl der Hash-Funktion und der Intervallzuordnung direkt auf die Ausgewogenheit und Leistung der Daten auswirkt.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie Memcached-Datenbank-Sharding in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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