Maison  >  Article  >  développement back-end  >  Comment implémenter le partitionnement de base de données Memcached en PHP

Comment implémenter le partitionnement de base de données Memcached en PHP

王林
王林original
2023-05-16 09:40:35982parcourir

Avec le développement des applications web, la complexité du traitement des données est de plus en plus élevée. Pour offrir une meilleure évolutivité et de meilleures performances, de nombreuses applications ont adopté des bases de données NoSQL. Memcached est un cache en mémoire NoSQL populaire qui peut améliorer considérablement le temps de réponse des applications Web tout en offrant une haute disponibilité des données.

Cependant, à mesure que votre application se développe, la capacité de stockage d'une seule instance de Memcached peut atteindre sa limite. Dans ce cas, la technologie de partitionnement de base de données Memcached doit être utilisée pour répartir les données sur plusieurs serveurs. Dans cet article, nous apprendrons comment implémenter le partitionnement de base de données Memcached à l'aide de PHP.

Partagement du serveur Memcached

Dans Memcached, une fonction de hachage est utilisée pour mapper les clés de données à des serveurs spécifiques. La fonction de hachage peut être MD5, CRC32, etc. Lorsque des données sont ajoutées ou mises à jour, Memcached utilise une fonction de hachage pour calculer les clés et déterminer quel serveur utiliser. Lors de l'utilisation du partitionnement de base de données Memcached, nous devons mapper les clés à des serveurs spécifiques en utilisant la même méthode qu'une fonction de hachage. Cela peut être fait en suivant les étapes :

  1. Définir la liste des serveurs
    Dans le partitionnement Memcached, les données doivent être stockées sur plusieurs serveurs. Nous pouvons définir un tableau contenant l'adresse IP et le numéro de port du serveur. Par exemple :

$servers = array(

'192.168.1.101:11211', // Server 1
'192.168.1.102:11211', // Server 2
'192.168.1.103:11211' // Server 3

);

  1. Calculer la valeur de hachage
    Afin de hacher les données, une fonction de hachage est utilisée. Memcached fournit plusieurs fonctions de hachage intégrées, notamment MD5 et CRC32. Nous pouvons utiliser n'importe lequel d'entre eux pour calculer la valeur de hachage. Par exemple, en utilisant la fonction de hachage MD5 :

$hash = md5('mykey');

  1. Select Server
    La valeur de hachage calculée à l'aide de la fonction de hachage doit être mappée au serveur Memcached réel. Cela peut être fait en divisant la valeur de hachage en intervalles. Par exemple, s'il y a trois serveurs, nous mappons les hachages sur les plages 0-32, 33-64 et 65-96. Cela peut être fait en suivant les étapes :
  • Calculez le hachage d'un entier non signé de 32 bits
  • Divisez cet entier en intervalles
  • Mappez les intervalles sur le serveur

Implémentez-le en utilisant le code suivant :

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

Dans cet exemple, nous mappons d'abord "mykey" à une valeur de hachage à l'aide du hachage MD5. Nous calculons ensuite la valeur entière non signée de 32 bits et calculons le module de cette valeur en utilisant la longueur du tableau du serveur. Cela nous donnera un index du serveur et nous pourrons utiliser cet index pour obtenir l'adresse IP et le numéro de port corrects du serveur dans la liste des serveurs.

  1. Stockage des données
    Dans cette étape, nous stockons les données sur le serveur Memcached. Dans le cas de l'utilisation d'une liste de serveurs, nous devons utiliser les classes Memcached de la bibliothèque d'extensions Memcached et leur transmettre la liste des serveurs. Dans le même temps, nous devons également utiliser la valeur de hachage et le serveur de l'étape précédente pour déterminer le serveur réel sur lequel les données sont stockées. Par exemple :

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

Dans cet exemple, nous appelons d'abord la méthode addServers() de la classe Memcached en utilisant le tableau de serveurs pour spécifier la liste des serveurs à utiliser. Nous utilisons ensuite le hachage et le serveur pour appeler la méthode setByKey() afin de stocker les données sur le bon serveur. Nous fournissons également un délai d'expiration (60 secondes).

  1. Obtention de données
    En cas d'utilisation du sharding, vous devez utiliser la méthode getByKey() pour récupérer les données du bon serveur. Par exemple :

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

Dans cet exemple, nous utilisons la valeur de hachage et le serveur pour appeler getByKey( ), récupérez les données du bon serveur. Si la clé n'existe pas, renvoie null.

Résumé

Lorsque vous utilisez Memcached, vous pouvez utiliser la technologie de partitionnement pour stocker des données sur plusieurs serveurs. En utilisant PHP, nous pouvons utiliser la classe Memcached dans la bibliothèque d'extensions Memcached, qui fournit diverses méthodes pour ajouter des serveurs, configurer et obtenir des données. À l'aide d'une fonction de hachage, nous pouvons calculer le hachage de la clé et la mapper au bon serveur. N'oubliez pas que le choix de la fonction de hachage et de l'allocation des intervalles affectera directement l'équilibre et les performances des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn