Maison développement back-end Problème PHP Comment interroger des structures de données non dupliquées en php

Comment interroger des structures de données non dupliquées en php

Apr 04, 2023 am 10:44 AM

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.

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

  1. 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'); // 获取基数
Copier après la connexion

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.

  1. 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 的基数,则有重复广告
    // 再次处理广告展示逻辑
}
Copier après la connexion

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.

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

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Quelles sont les meilleures pratiques pour la déduplication des tableaux PHP Quelles sont les meilleures pratiques pour la déduplication des tableaux PHP Mar 03, 2025 pm 04:41 PM

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

La déduplication PHP Array peut-elle profiter de l'unicité du nom clé? La déduplication PHP Array peut-elle profiter de l'unicité du nom clé? Mar 03, 2025 pm 04:51 PM

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

La déduplication du tableau PHP doit-elle être prise en compte pour les pertes de performance? La déduplication du tableau PHP doit-elle être prise en compte pour les pertes de performance? Mar 03, 2025 pm 04:47 PM

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

Comment implémenter les files d'attente de messages (Rabbitmq, Redis) dans PHP? Comment implémenter les files d'attente de messages (Rabbitmq, Redis) dans PHP? Mar 10, 2025 pm 06:15 PM

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

Quelles sont les dernières normes de codage PHP et les meilleures pratiques? Quelles sont les dernières normes de codage PHP et les meilleures pratiques? Mar 10, 2025 pm 06:16 PM

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

Quelles sont les techniques d'optimisation pour la déduplication des tableaux PHP Quelles sont les techniques d'optimisation pour la déduplication des tableaux PHP Mar 03, 2025 pm 04:50 PM

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

Comment puis-je travailler avec les extensions de PHP et PECL? Comment puis-je travailler avec les extensions de PHP et PECL? Mar 10, 2025 pm 06:12 PM

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,

Comment utiliser la réflexion pour analyser et manipuler le code PHP? Comment utiliser la réflexion pour analyser et manipuler le code PHP? Mar 10, 2025 pm 06:12 PM

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

See all articles