Anhand dieses Beispiels können Sie nachvollziehen, wie es Platz spart: Nehmen wir an, ich arbeite für Google im Chrome-Team und möchte dem Browser eine Funktion hinzufügen, die den Benutzer benachrichtigt, wenn die eingegebene URL eine bösartige URL ist. Ich habe also einen Datensatz von etwa 1 Million bösartiger URLs, die Größe dieser Datei beträgt etwa 25 MB. Da die Datei ziemlich groß ist (groß im Vergleich zur Größe des Browsers selbst), speichere ich diese Daten auf einem entfernten Server.
Fall 1: Ich verwende eine Hash-Funktion mit einer Hash-Tabelle. Ich entscheide mich für eine effiziente Hash-Funktion und lasse alle 1 Million URLs durch die Hash-Funktion laufen, um Hash-Schlüssel zu erhalten. Dann erstelle ich eine Hash-Tabelle (ein Array), in der der Hash-Schlüssel den Index für diese URL angibt. Sobald ich die Hash-Tabelle gefüllt habe, überprüfe ich ihre Größe. Ich habe alle 1 Million URLs zusammen mit ihren Schlüsseln in der Hashtabelle gespeichert. Die Größe beträgt also mindestens 25 MB. Diese Hash-Tabelle wird aufgrund ihrer Größe auf einem Remote-Server gespeichert. Wenn ein Benutzer eine URL in die Adressleiste eingibt, muss ich prüfen, ob sie bösartig ist. Also lasse ich die URL durch die Hash-Funktion laufen (der Browser selbst kann dies tun) und erhalte einen Hash-Schlüssel für diese URL. Mit diesem Hash-Schlüssel muss ich nun eine Anfrage an meinen entfernten Server stellen, um zu prüfen, ob die bestimmte URL in meiner Hash-Tabelle mit diesem bestimmten Schlüssel mit der vom Benutzer eingegebenen URL übereinstimmt. Wenn ja, dann ist sie bösartig, wenn nein, dann ist sie nicht bösartig. Jedes Mal, wenn der Benutzer eine URL eingibt, muss also eine Anfrage an den entfernten Server gestellt werden, um zu prüfen, ob es sich um eine bösartige URL handelt. Dies würde sehr viel Zeit in Anspruch nehmen und meinen Browser langsam machen.
Fall 2: Ich verwende einen Bloomfilter. Die gesamte Liste von 1 Million URLs wird mit Hilfe mehrerer Hash-Funktionen durch den Bloom-Filter geleitet, und die entsprechenden Positionen werden in einem riesigen Feld von 0s als 1 markiert. Nehmen wir an, wir wollen eine Falsch-Positiv-Rate von 1 % und verwenden einen Bloom-Filter-Rechner ( http://hur.st/bloomfilter?n=1000000&p=0.01 ), ergibt sich eine Größe des erforderlichen Bloom-Filters von nur 1,13 MB. Diese geringe Größe ist zu erwarten, da wir trotz der enormen Größe des Arrays nur 1en oder 0en speichern und nicht die URLs wie bei der Hash-Tabelle, die wie ein Bit-Array behandelt werden kann. Das heißt, da wir nur zwei Werte 1 und 0 haben, können wir einzelne Bits anstelle von Bytes setzen. Dies würde den Platzbedarf um das 8-fache reduzieren. Dieser 1,13 MB große Bloom-Filter kann aufgrund seiner geringen Größe im Webbrowser selbst gespeichert werden! Wenn also ein Benutzer eine URL eingibt, wenden wir einfach die erforderlichen Hash-Funktionen (im Browser selbst) an und überprüfen alle Positionen im Bloom-Filter (der im Browser gespeichert ist). Ein Wert von 0 an einer der Positionen sagt uns, dass diese URL definitiv nicht in der Liste der bösartigen URLs enthalten ist und der Benutzer ungehindert fortfahren kann. Wir haben also keine Anfrage an den Server gestellt und somit Zeit gespart. Ein Wert von 1 bedeutet, dass die URL möglicherweise in der Liste der bösartigen URLs enthalten ist. In diesen Fällen rufen wir den Remote-Server an und können dort eine andere Hash-Funktion mit einer Hash-Tabelle wie im ersten Fall verwenden, um zu prüfen, ob die URL tatsächlich vorhanden ist. Da eine URL in den meisten Fällen wahrscheinlich nicht bösartig ist, findet der kleine Bloom-Filter im Browser dies heraus und spart somit Zeit, indem er Anrufe beim Remote-Server vermeidet. Nur in einigen Fällen, wenn der Bloom-Filter uns sagt, dass die URL möglicherweise bösartig ist, rufen wir den Server an. Dieses "MÖGLICH" ist zu 99 % richtig.
Durch die Verwendung eines kleinen Bloom-Filters im Browser haben wir also eine Menge Zeit gespart, da wir nicht für jede eingegebene URL einen Serveraufruf tätigen müssen.
1 Stimmen
Bitte markieren Sie einige Ihrer Fragen als beantwortet und formulieren Sie Ihre Frage ein wenig um. Auf diese Weise werden die Leute etwas bereitwilliger sein, Ihnen zu helfen.
0 Stimmen
Es tut mir leid. Wie soll ich beantwortete Fragen markieren?
0 Stimmen
Klicken Sie auf die richtige Markierung, sie wird grün für die Antwort, die Sie für die richtige halten
0 Stimmen
Ich habe es schon. Danke.