2010-05-02 44 views

回答

4

VInt非常節省空間。理論上可以節省高達75%的空間。

在Lucene中,很多結構都是整數列表。例如,給定期限的文件清單,文件中條款的位置(和偏移量)等等。這些列表形成lucene數據的大部分。

想想Lucene索引數百萬文件需要數十GB的空間。將空間縮小一半以上可減少磁盤空間要求。雖然節省磁盤空間可能不是一個巨大的勝利,但考慮到磁盤空間便宜,真正的收益會降低磁盤IO。用於讀取VInt數據的磁盤IO低於讀取整數,自動轉換爲更好的性能。

1

VInt是指Lucene的可變寬度整數編碼方案。它用一個或多個字節對整數進行編碼,僅使用每個字節的低7位。對於除最後一個字節以外的所有字節,高位被設置爲零,這是長度的編碼方式。

+0

我知道這一點,但我想知道爲什麼lucene能完成這項工作? 爲什麼它不使用4字節的簡單整數(0 - 〜4,000,000,000)? – 2010-05-02 09:41:19

1

對於第一個問題: 正整數的可變長度格式定義爲每個字節的高位指示是否還有更多字節需要讀取。低位7位作爲結果整數值中越來越多的有效位添加。因此,從零到127的值可以存儲在一個字節中,從128到16,383的值可以存儲在兩個字節中,依此類推。 https://lucene.apache.org/core/3_0_3/fileformats.html

因此,要保存一個n個整數的列表,您需要的內存量是[例如] 4 * n個字節。但對於Vint,128以下的所有數字將僅使用1個字節存儲[依此類推],從而節省大量內存。

Vint提供了整數的壓縮表示,Shashikant的答案已經解釋了Lucene中壓縮的要求和好處。

相關問題