Database Reference
In-Depth Information
Komprimierung und Bloomilter
Wir können das Skript fast ausführen, müssen vorher aber noch ein wenig
aufräumen. Die Spaltenfamilie text wird lange Texte enthalten und könnte
von einer Komprimierung profitieren. Wir wollen daher die Komprimierung
und schnelle Lookups aktivieren:
hbase> alter 'wiki', {NAME=>'text', COMPRESSION=>'GZ', BLOOMFILTER=>'ROW'}
0 row(s) in 0.0510 seconds
HBase unterstützt zwei Komprimierungsalgorithmen: Gzip (GZ) und Lempel-
Ziv-Oberhumer (LZO). Die HBase-Community bevorzugt eindeutig LZO, aber
wir verwenden hier GZ.
Das Problem mit LZO ist die Lizenz der Implementierung. Zwar handelt es
sich um Open Source, aber sie ist nicht mit Apaches Lizenzphilosophie kom-
patibel, so dass LZO nicht mit HBase gebündelt werden kann. Zur Installati-
on und Konfiguration der LZO-Unterstützung sind online detaillierte Anwei-
sungen vorhanden. Wenn Sie eine Hochleistungskomprimierung brauchen,
besorgen Sie sich LZO.
Ein Bloomfilter ist eine wirklich coole Datenstruktur, die sehr effizient die
Frage „Habe ich das schon mal gesehen?“ beantworten kann. Ursprünglich in
den 1970ern von Burton Howard Bloom zur Rechtschreibprüfung entwickelt,
wurden sie in Datenspeicher-Anwendungen beliebt, um schnell herauszufin-
den, ob ein Schlüssel existiert. Wenn Sie mit Bloomfiltern nicht vertraut sind,
finden Sie in Wie arbeiten Bloomfilter? eine kurze Einführung.
Wie arbeiten Bloomilter?
Wir wollen nicht allzu detailliert auf die Implementierungs-Details eingehen, aber
grundsätzlich verwaltet ein Bloomfilter ein statisch dimensioniertes Bit-Array, das zu
Beginn auf 0 gesetzt ist. Jedes Mal, wenn der Filter neue Daten vorgesetzt bekommt,
werden einige dieser Bits auf 1 gesetzt. Zum Setzen dieser Bits wird ein Hash aus
den Daten erzeugt, und dieser Hash wird dann auf einen Satz von Bitpositionen
abgebildet.
Soll später geprüft werden, ob der Filter bestimmte Daten schon einmal gesehen
hat, berechnet er, welche Bits auf 1 gesetzt werden müssen und vergleicht sie dann.
Stehen einige auf 0, kann er eindeutig mit „Nein“ antworten. Sind alle auf 1 gesetzt,
antwortet er mit „Ja“. Die Chancen stehen dann gut, dass er die Daten schon einmal
gesehen hat, doch die falschen Positive erhöhen sich, je mehr Daten er verarbeitet
hat.
Das ist der Nachteil des Bloomfilters gegenüber einem einfachen Hash. Ein Hash
erzeugt niemals falsche Positive, aber der zur Speicherung der Daten benötigte Platz
ist nicht begrenzt. Bloomfilter verwenden eine konstante Menge an Platz, erzeugen
aber (basierend auf der Sättigung) eine vorhersehbare Menge falscher Positive.
 
Search WWH ::




Custom Search