


Comment interroger des structures de données non dupliquées en php
Avec le développement continu d'Internet, l'utilisation de bases de données dans les sites Web et les applications est devenue de plus en plus courante. Lors du développement et de la maintenance d'applications, l'interrogation des données est une tâche très critique. Comment interroger et traiter efficacement les données est devenu un problème important auquel sont confrontés les développeurs. Cet article présentera une méthode d'interrogation de structures de données non dupliquées avec PHP pour résoudre ce problème.
- Introduction au cas
Supposons qu'il existe un système publicitaire. Chaque publicité possède un numéro d'identification unique et peut être affichée sur différentes pages. Si vous souhaitez afficher la publicité sur une certaine page, vous pouvez interroger les données de la publicité dans la base de données MySQL et filtrer les résultats selon les trois conditions suivantes :
1) Statut d'affichage : afficher uniquement le statut « affichage » (statut= 1) Publicité.
2) Probabilité d'affichage : chaque publicité a une probabilité d'affichage (show_ratio), et il est décidé d'afficher ou non la publicité en fonction de la probabilité.
3) Affichage en double : N'affichez pas d'annonces en double sur la même page.
Comment interroger efficacement les données publicitaires qui remplissent les conditions ? Cela nécessite une structure de données efficace et non dupliquée.
- Introduction aux structures de données non répétitives
Afin de répondre aux conditions de requête ci-dessus, cet article présente une structure de données non répétitive basée sur Redis - HyperLogLog (HLL en abrégé) peut estimer efficacement la cardinalité d'un. ensemble de données, c'est-à-dire un nombre d'éléments différents. Grâce à HLL, vous pouvez rapidement compter le nombre de publicités avec le statut d'affichage « En affichage » et la probabilité d'affichage qui répondent aux exigences, et supprimer les affichages en double.
HLL estime la cardinalité d'un ensemble de données en utilisant un ensemble de fonctions de hachage. Son principe de mise en œuvre est similaire au filtre Bloom, mais son taux d'erreur est inférieur. Dans Redis, le type HLL fournit la commande pfadd pour ajouter des éléments et la commande pfcount pour calculer la cardinalité. Voici un exemple de code PHP :
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->pfadd('ad', 'ad1', 'ad2', 'ad3'); // 添加广告 ID $redis->pfadd('ad', 'ad3', 'ad4', 'ad5'); // 添加广告 ID $count = $redis->pfcount('ad'); // 获取基数
Le code ci-dessus utilise HLL dans Redis pour stocker l'identifiant publicitaire et détermine si une publicité a été affichée en ajoutant l'identifiant publicitaire et en calculant la base.
- Mise en œuvre du cas
Dans ce cas, interrogez d'abord toutes les annonces dont l'état d'affichage est « En cours d'affichage », puis calculez le nombre d'annonces qui répondent aux exigences de probabilité d'affichage, et enfin empêchez l'affichage répété selon HLL. Ce qui suit est un code de requête PHP :
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); // 查询展示状态为“展示中”的所有广告信息 $sql = "SELECT * FROM ad WHERE status=1"; $result = $mysqli->query($sql); $total = 0; while ($row = $result->fetch_assoc()) { $show_ratio = $row['show_ratio']; // 广告展示概率 $ad_id = $row['ad_id']; // 广告 ID // 判断是否需要展示该广告 $rand_num = mt_rand(1, 10000); if ($rand_num <= $show_ratio * 10000) { $redis->pfadd('ad', $ad_id); // 添加广告 ID $total++; } } $count = $redis->pfcount('ad'); // 获取基数 if ($total != $count) { // 如果总数量不等于 HLL 的基数,则有重复广告 // 再次处理广告展示逻辑 }
Le code ci-dessus utilise une boucle while pour calculer et ajouter une probabilité à chaque publicité. Le code permettant de supprimer les affichages en double en fonction de la HLL est situé en dehors de la boucle while. Il détermine s'il existe des annonces en double en jugeant si le nombre d'éléments ajoutés à la HLL est égal au nombre d'annonces calculées.
- Résumé
Cet article présente une méthode d'utilisation de Redis pour implémenter la structure de données HLL afin d'obtenir une interrogation efficace de données non dupliquées. Dans les projets réels, il peut être amélioré et étendu en fonction des besoins spécifiques. Par exemple, vous pouvez ajouter un délai d'expiration pour effacer régulièrement les éléments expirés, ou ajouter une couche de filtres Bloom au HLL pour améliorer la précision de la déduplication, etc. On pense que ces méthodes peuvent résoudre les problèmes de déduplication souvent rencontrés lors de l'interrogation de données et améliorer l'efficacité et les performances des applications.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Cet article explore la déduplication efficace du tableau PHP. Il compare les fonctions intégrées comme Array_Unique () avec les approches de hashmap personnalisées, mettant en évidence les compromis de performances en fonction de la taille du tableau et du type de données. La méthode optimale dépend de Profili

Cet article explore la déduplication du tableau PHP en utilisant l'unicité clé. Bien qu'il ne s'agisse pas d'une méthode de suppression en double directe, la mise à profit de l'unicité clé permet de créer un nouveau tableau avec des valeurs uniques en mappant des valeurs aux clés, en écrasant des doublons. Ce AP

Cet article analyse la déduplication du tableau PHP, mettant en évidence les goulots d'étranglement des performances des approches naïves (O (n²)). Il explore des alternatives efficaces à l'aide d'Array_Unique () avec des fonctions personnalisées, des implémentations SplobjectStorage et HashSet, réalisant

Cet article détaille la mise en œuvre des files d'attente de messages en PHP à l'aide de RabbitMQ et Redis. Il compare leurs architectures (AMQP vs en mémoire), les fonctionnalités et les mécanismes de fiabilité (confirmations, transactions, persistance). Meilleures pratiques de conception, erreur

Cet article examine les normes de codage PHP actuelles et les meilleures pratiques, en se concentrant sur les recommandations PSR (PSR-1, PSR-2, PSR-4, PSR-12). Il met l'accent

Cet article explore l'optimisation de la déduplication du tableau PHP pour les grands ensembles de données. Il examine des techniques comme Array_Unique (), Array_flip (), SploBjectStorage et Pre-Sorting, en comparant leur efficacité. Pour les ensembles de données massifs, il suggère de secouer, datab

Cet article détaille l'installation et le dépannage des extensions de PHP, en se concentrant sur PECL. Il couvre les étapes d'installation (trouver, télécharger / compilation, activer, redémarrer le serveur), dépannage des techniques (vérification des journaux, vérification de l'installation,

Cet article explique l'API de réflexion de PHP, permettant l'inspection d'exécution et la manipulation des classes, des méthodes et des propriétés. Il détaille les cas d'utilisation courants (génération de documentation, ORMS, injection de dépendance) et prévient contre la performance Overhea
