Video
![Probably and No: Redis, Probabilistic, and Bloom Filters](https://redis.io/wp-content/uploads/2020/06/user-icons.png?format=pjpg&auto=webp&quality=1&width=500)
Learn more
Schaffen Sie bei Ihren Daten für Ordnung, um die Benutzerfreundlichkeit zu erhöhen und Ihre Systeme mit Redis Enterprise zu optimieren.
Die Datendeduplizierung, auch bekannt als Dedup, sorgt für ein verbessertes Benutzererlebnis und -bindung sowie eine effizientere Datenverarbeitung. Obwohl die meisten Menschen bei Deduplizierung an das Entfernen mehrerer Kopien derselben Daten in einer Datenbank denken, besteht in Wirklichkeit in vielen alltäglichen Situationen die Notwendigkeit der Deduplizierung, was zu Fragen wie diesen führt:
Der Versand von Nachrichten an Kunden ist ein wesentlicher Bestandteil eines jeden Unternehmens. Bevor eine E-Mail oder ein Text an einen bestimmten Benutzer gesendet wird, kann die Deduplizierung feststellen, ob der Benutzer diese E-Mail oder diesen Text schon einmal gesehen hat. Wenn dies der Fall ist, kann das System dem Benutzer eine andere Nachricht schicken oder beschließen, den Benutzer für einen bestimmten Zeitraum (wenn überhaupt) nicht zu kontaktieren.
Extrahieren, Transformieren und Laden (ETL) ist eine gängige Technik für die Arbeit mit großen Datensätzen wie Ereignisprotokollen. In der Regel wird ETL verwendet, um Daten aus unterschiedlichen Systemen zusammenzuführen, damit sie analysiert werden können. Die Deduplizierung dieses Prozesses bedeutet, dass das System dieselbe Analyse nicht mehrmals an mehreren Kopien derselben Daten durchführt.
Wenn ein Benutzer ein neues Konto erstellt, ist es wichtig, dass seine ID eindeutig ist. Bei der Deduplizierung ist es trivial, festzustellen, ob eine bestimmte ID bereits existiert.
Es ist gut, eine Warnung zu erhalten, wenn in einem System etwas Wichtiges passiert ist. Es ist schlimm, überhaupt keine Benachrichtigung zu erhalten, aber fast genauso schlimm ist es, 300 Benachrichtigungen für dasselbe Ereignis zu bekommen. Oder 30.000 Warnungen. Die Deduplizierung kann eine zuvor aufgetretene Warnung unterdrücken, aber die Technik kann mit einem Timer kombiniert werden, um kürzlich aufgetretene Duplikate zu entfernen, sodass das System eine bestimmte Warnung nicht mehr als einmal in einem bestimmten Zeitrahmen ausgeben kann.
Die Betrugserkennung ist ein großartiger Anwendungsfall für KI/ML-Verarbeitung. Leider ist die KI/ML-Verarbeitung teuer. Die Deduplizierung kann eine Transaktion daraufhin untersuchen, ob sie einer Transaktion ähnelt, die in der Vergangenheit genehmigt wurde. Wenn die neue Transaktion ähnlich genug ist, kann das System die Transaktion automatisch genehmigen, ohne dass die Kosten für die Betrugserkennung anfallen. (In diesem Anwendungsfall ist ein doppelter Wert eine gute Sache.)
Redis Enterprise bietet zwei großartige Technologien für die Deduplizierung: Sets und Bloom-Filter.
Ein Redis-Set speichert einen bestimmten Wert nur einmal. Unabhängig davon, wie oft ein Wert zu einer Menge hinzugefügt wird, enthält die Menge nur eine Kopie dieses Wertes. Redis-Sets sind auch insofern optimiert, als sie die Frage „Ist dieser Wert in diesem Set?“ extrem schnell beantworten können. Sets sind auch insofern determiniert, als die Antworten auf die Frage „auf jeden Fall“ und „auf gar keinen Fall“ lauten.
Beachten Sie jedoch, dass ein Set eine beträchtliche Menge an Speicherplatz beanspruchen kann, wenn die Anzahl der eindeutigen Werte im Set steigt.
Das RedisBloom-Modul bietet Bloom-Filter, einen probabilistischen Algorithmus, der für die Deduplizierung nützlich ist. Anders als eine Menge speichert ein Bloom-Filter nur Hashes für jeden Wert, nicht den Wert selbst. Das bedeutet, dass ein Bloom-Filter nur 2 % des für einen Satz erforderlichen Speichers beanspruchen kann. Zudem sind sie in der Regel etwas schneller als Sets, die selbst schon sehr schnell sind. Diese Schnelligkeit und Speichereffizienz haben jedoch einen Nachteil: Ein Bloom-Filter ist nicht determiniert. Die Antworten auf die Frage „Haben wir diesen Wert schon einmal gesehen?“ lauten „Definitiv nicht“ und „Wahrscheinlich schon“. Mit anderen Worten: nur Falsch-positive Ergebnisse sind bei einem Bloom-Filter möglich.
Ein großes Spieleunternehmen verwendet Bloom-Filter in Redis Enterprise, um Echtzeit-Datenströme mit einer Deduplizierungsschicht auf Ereignisebene zu versehen und kann so mehr als 2 Milliarden Ereignisse pro Tag verarbeiten. Im Vergleich zu ihrer ursprünglichen Implementierung benötigen sie nun etwa 90 % weniger Speicher und konnten die Latenzzeit von etwa 2 Millisekunden auf weniger als 0,25 Millisekunden reduzieren.
Um ein erstklassiges Nutzerengagement zu erzielen, müssen Ihre Lösungen die Bedürfnisse eines Nutzers vorhersehen und seine bisherigen Erfahrungen verstehen. Mit einer guten Deduplizierungs-Lösung können Sie sicherstellen, dass jede Benutzerinteraktion einzigartig und für die Interessen des Benutzers relevant ist und auf dem Verlauf des Benutzers basiert.
Eine leistungsstarke Deduplizierungs-Lösung sollte in der Lage sein, massive Datensätze mit hoher Leistung und linearer Skalierbarkeit zu verarbeiten. Redis-Sets und das RedisBloom- Modul machen genau das. Unabhängig davon, für welche Lösung Sie sich entscheiden, bieten beide eine blitzschnelle Leistung für Datensätze jeder Größe, einschließlich Multi-Cloud- und geografisch verteilter Datensätze.
Eine effiziente Deduplizierungs-Lösung bietet Ihnen die Möglichkeit, eine redundante Verarbeitung zu vermeiden und sicherzustellen, dass keine Daten mehr als einmal verarbeitet werden. In einigen Fällen kann die Deduplizierung dazu dienen, die Verarbeitung ganz zu vermeiden. Die Deduplizierung zur Begrenzung oder Eliminierung von Warnmeldungen erleichtert es den Bedienern , angemessen auf Systemereignisse zu reagieren und ein Übermaß an Warnmeldungen zu vermeiden.
Eine Set enthält höchstens ein Exemplar eines bestimmten Wertes. Mit anderen Worten: Wir können denselben Wert eine Million Mal zu einer Menge hinzufügen (SADD Haustiere Hund immer und immer wieder aufrufen), aber der Wert wird nur einmal in der Menge vorkommen. Wenn ein Satz definiert ist, können wir mit dem Befehl SISMEMBER feststellen, ob ein bestimmter Wert im Set vorhanden ist. Wenn wir eine Menge namens Haustiere erstellen und ihr die Werte Hund, Katzeund Papagei hinzufügen, ist der Wert Hund eine Teilmenge, der Wert Affe dagegen nicht:
redis> SADD pets dog cat parrot
(integer) 3
redis> SISMEMBER pets dog
(integer) 1
redis> SISMEMBER pets monkey
(integer) 0
redis> SADD pets dog
(integer) 0
So einfach ist es, einen Bloom-Filter einzurichten und zu verwenden:
redis> BF.ADD users doug
(integer) 1
redis> BF.ADD users lisa
(integer) 1
redis> BF.EXISTS users doug
(integer) 1
redis> BF.EXISTS users bob
(integer) 0
redis> BF.ADD users lisa
(integer) 0
Wir möchten sicherstellen, dass jeder Benutzer einen eindeutigen Namen hat. Wir fügen dem Bloom-Filter Doug und Lisa hinzu. (BF.ADD erstellt bei Bedarf den Filter.) Wenn jemand versucht, ein weiteres Konto mit dem Namen dougzu erstellen, sagt der Bloom-Filter, dass wir wahrscheinlich bereits einen Benutzer mit diesem Namen haben. Wenn andererseits jemand versucht, ein neues Konto mit dem Benutzernamen bobzu erstellen, sagt uns der Bloom-Filter, dass es sich definitiv nicht um eine ID handelt, die wir schon einmal gesehen haben, so dass es sicher ist, ein neues Konto mit diesem Namen zu erstellen.