Schnelle, sichere Datendeduplizierungs-Lösungen

Schaffen Sie bei Ihren Daten für Ordnung, um die Benutzerfreundlichkeit zu erhöhen und Ihre Systeme mit Redis Enterprise zu optimieren.

Was ist Datendeduplizierung?

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:

Anwendungsfälle für die Deduplizierung

Kunden ansprechen, ohne vorherige Nachrichten zu wiederholen

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.

Illustration of deduped email messages
Illustration of deduped ETL process

ETL-Verarbeitung

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.

Sicherstellen, dass Benutzer-IDs eindeutig sind

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.

Illustration of deduped user profiles
Illustration of deduped alerts

Filtern doppelter Warnungen

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.

Filtern von Transaktionen, um teure Betrugserkennungsvorgänge zu vermeiden

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

Illustration of deduped transactions

Wie Redis Enterprise die Herausforderungen der Echtzeit-Deduplizierung meistert

Redis Enterprise bietet zwei großartige Technologien für die Deduplizierung: Sets und Bloom-Filter.

Redis Sets

Deduplication Illustration Redis Sets

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.

RedisBloom

Deduplication Illustration Bloom Filter

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.

Kundenerfolgsgeschichte

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.

Die 3 größten Herausforderungen, die eine Deduplizierungs-Lösung bewältigen muss

Implementierung der Deduplizierung

Verwenden von Sets

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

Verwendung von Bloom-Filtern

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.