Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 6755|Répondre: 3

[Source] .NET/C# utilise Redis pour implémenter l’algorithme de Bloom basé sur BitMap

[Copié le lien]
Publié sur 02/01/2023 17:37:01 | | | |
Exigences : Récemment, j’ai vu une vidéo de l’algorithme Redis Bloom sur Bilibili pour résoudre le problème de la pénétration du cache, en termes simples, ajouter une couche de jugement logique avant d’accéder à la base de données pour déterminer si les données existent, et si oui, accéder à la base de données. Par exemple, si un site web est un système d’actualités, les URL des articles sont générées par des identifiants de clé primaires auto-incrémentifs (format URL example:/news-1.html), le site peut ne compter que des dizaines de milliers d’articles et de caches.

Originairement:

Demander une ressource d’actualités -> Déterminer si le cache existe -> Présence -> Le cache renvoie les données.
Demander des ressources d’actualités -> Déterminer si le cache existe -> n’existe pas -> Interroger depuis la base de données -> Présent -> Cache et retourner les données.
Demander une ressource d’actualités -> Déterminer si le cache existe -> n’existe pas -> Requête depuis la base de données -> N’existe pas -> Retourne une erreur 404.

Tout de suite:

Demander une ressource d’actualités -> Algorithme de Bloom -> Existence -> Suivez la logique originale.
Ressource de demande d’actualités -> l’algorithme de Bloom -> n’existe pas -> renvoie directement une erreur 404.

BloomFilter

L’algorithme BloomFilter est un algorithme de planification de big data. Dans un ensemble contenant une grande quantité de données, il est possible de déterminer avec précision qu’un objet ne fait pas partie de l’ensemble ; Il est possible de juger un objet dans un ensemble et de prendre peu d’espace. ilIl n’est pas adapté aux situations nécessitant une grande précision et zéro erreur。 L’utilisation efficace de l’espace est obtenue en sacrifiant une précision partielle.

L’algorithme de Bloom est une méthode basée surSacrifier une certaine précision en échange d’un algorithme de filtrage à faible consommation de mémoire, qui peut effectuer le filtrage, la déduplication et d’autres opérations d’une grande quantité de données.

L’algorithme de Bloom n’est qu’un concept abstrait et peut être implémenté de plusieurs façons, et l’utilisation du BitMap dans Redis dans l’article est simplement une implémentation simple.

Référence:La connexion hyperlientérée est visible.

Introduction des cartes de bits

BitMap est un bitmap, qui est en réalité un tableau d’octets, représenté en binaire.Il n’y a que deux chiffres, 0 et 1, la bitmap consiste à utiliser chaque bit binaire pour stocker ou marquer la valeur correspondant à un élément. Il est généralement utilisé pour déterminer si certaines données existent ou non, car elles sont stockées en bits, donc le bitmap lui-même permet d’économiser beaucoup d’espace de stockage.

Comme montré dans la figure ci-dessous, la chaîne est stockée sous forme binaire dans l’ordinateur.



Types de données BitMap dans Redis

Le type de données fourni par Redis est BitMap, et chaque bit correspond à deux états : 0 et 1. Bien que le stockage interne soit toujours de type String, Redis fournit certaines instructions pour manipuler directement BitMap, ce qui peut être considéré comme un tableau de bits, et le sous-indice du tableau est le décalage.

Ses avantages sont :Faible surcharge mémoire et haute efficacitéEt l’opération est simple.

Économie d’espace : Un bit est utilisé pour représenter la valeur ou l’état d’un élément, où la clé est la valeur de l’élément correspondant. En fait, 8 bits peuvent constituer un octet, donc c’est un peu plus loin.
Haute efficacité : La complexité temporelle du setbit et du getbit est O(1), et l’efficacité des autres bits est également élevée.

Voici un exemple d’utilisation de la collection d’ensembles et du stockage BitMap :

type de donnéesChaque userid prend de l’espaceLe nombre d’utilisateurs à stockerTous occupent la mémoire
poser32 bits correspondent à 4 octets (en supposant que l’userid utilise des entiers, beaucoup de sites web utilisent en fait des entiers longs)50,000,00032 bits * 50 000 000 = 200 Mo
Image matricielle1 bit100,000,0001 bit * 100 000 000 = 12,5 Mo


Le temps s’étire un peu

Un jourUn moisAnnée
poser200M6G72G
Image matricielle12,5M375M4,5G


Après calcul, il a été constaté qu’avec le temps, la quantité de données à enregistrer augmentait, le contraste devenait plus évident, et BitMap prenait moins d’espace que le set.

Redis fournit les instructions suivantes pour faire fonctionner BitMap :

commanderillustrerVersions disponiblesComplexité temporelle
La connexion hyperlientérée est visible.Régler ou effacer les bits sur le décalage spécifié pour la valeur de la chaîne stockée dans la tonalité.>= 2.2.0O(1)
La connexion hyperlientérée est visible.Pour la valeur de la chaîne stockée dans la clé, obtenez les bits sur le décalage spécifié.>= 2.2.0O(1)
La connexion hyperlientérée est visible.Compte le nombre de bits dans une chaîne donnée qui sont fixés à 1.>= 2.6.0O(N)
La connexion hyperlientérée est visible.Retourne la position du bit binaire dans la carte bitmap où la première valeur est le bit.>= 2.8.7O(N)
La connexion hyperlientérée est visible.Manipulation de bits sur une ou plusieurs clés de chaîne qui contiennent des bits binaires.>= 2.6.0O(N)
La connexion hyperlientérée est visible.La commande BITFIELD peut fonctionner sur plusieurs plages binaires simultanément dans un seul appel.>= 3.2.0O(1)


Documentation du commandement :La connexion hyperlientérée est visible.

Maintenant que vous avez une compréhension rapide de l’algorithme, des fonctionnalités et de la syntaxe Bitmap de Redis, utilisons Redis pour effectuer une opération simple.

Syntaxe SETBIT :Valeur de décalage de clé SETBIT

Mettez les articles id :9, 10, 156 à 1, et la commande est la suivante :

Syntaxe GETBIT : décalage de tonalité GETBIT

Pour déterminer si id : 10 ou 11 existe, la commande est la suivante :




.NET/C# manipule le type BitMap de Redis

Nous avons découvert plusieurs commandes BitMap dans Redis et comment les utiliser de manière programmatique. Créez un nouveau projet console .NET 3.1, référez le paquet StackExchange.Redis et utilisez la commande suivante :

Le code source est le suivant :



Il existe de nombreux autres scénarios d’application bitmap pour Redis, comme suit :

  • Il peut être utilisé comme un simple filtre de Bloom pour déterminer si un utilisateur a effectué certaines actions.
  • Statistiques sur l’activité quotidienne des utilisateurs, l’activité mensuelle et le taux de rétention
  • Comprenez les statistiques du nombre de lancements utilisateurs
  • Présence en ligne des utilisateurs et statistiques sur les personnes

(Fin)




Précédent:Acteurs virtuels : Dapr vs Orleans
Prochain:Résolution d’erreur Alibaba Cloud SLB Load Balancing 503
 Propriétaire| Publié sur 02/01/2023 17:41:56 |
Publié sur 02/01/2023 20:42:47 |
J’ai appris, merci, et acquis des connaissances
Publié sur 06/01/2023 20:34:22 |
Apprendre à apprendre
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com