3 Stimmen

Was ist das VInt in Lucene?

Ich möchte wissen, was ist die VInt in Lucene?

Ich lese diese Artikel, aber ich verstehe nicht, was es ist und wo Lucene es verwendet? Warum verwendet Lucene nicht simple integer oder big integer?

Danke.

4voto

Shashikant Kore Punkte 4874

VInt ist extrem platzsparend. Es könnte theoretisch bis zu 75 % Platz sparen.

In Lucene sind viele der Strukturen Listen von Ganzzahlen. Zum Beispiel die Liste der Dokumente für einen bestimmten Begriff, die Positionen (und Offsets) der Begriffe in den Dokumenten und vieles mehr. Diese Listen bilden den Großteil der Lucene-Daten.

Denken Sie an Lucene-Indizes für Millionen von Dokumenten, die Dutzende von GB an Speicherplatz benötigen. Eine Verkleinerung des Speicherplatzes um mehr als die Hälfte reduziert die Anforderungen an den Festplattenplatz. Die Einsparung von Festplattenplatz mag zwar kein großer Gewinn sein, da Festplattenplatz billig ist, aber der wirkliche Gewinn liegt in der Verringerung des Festplatten-IO. Das Festplatten-IO beim Lesen von VInt-Daten ist geringer als beim Lesen von Ganzzahlen, was automatisch zu einer besseren Leistung führt.

2voto

D W Punkte 31

Zu Ihrer ersten Frage: Es wird ein Format variabler Länge für positive Ganzzahlen definiert, bei dem das höherwertige Bit jedes Bytes anzeigt, ob noch weitere Bytes zu lesen sind. Die niederwertigen sieben Bits werden als zunehmend höherwertige Bits an den resultierenden Ganzzahlwert angehängt. So können Werte von Null bis 127 in einem einzigen Byte gespeichert werden, Werte von 128 bis 16.383 in zwei Bytes usw. https://lucene.apache.org/core/3_0_3/fileformats.html .

Um eine Liste von n ganzen Zahlen zu speichern, benötigen Sie also [z.B.] 4*n Bytes. Aber mit Vint würden alle Zahlen unter 128 mit nur 1 Byte gespeichert werden [und so weiter], was eine Menge Speicherplatz spart.

Vint bietet eine komprimierte Darstellung von Ganzzahlen und Shashikants Antwort erklärt bereits die Anforderungen und Vorteile der Komprimierung in Lucene.

1voto

Marcelo Cantos Punkte 173498

VInt bezieht sich auf das Lucene-Schema zur Kodierung ganzer Zahlen mit variabler Breite. Es kodiert ganze Zahlen in einem oder mehreren Bytes, wobei nur die niedrigen sieben Bits jedes Bytes verwendet werden. Das High-Bit wird für alle Bytes auf Null gesetzt, außer für das letzte, in dem die Länge kodiert wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X