答案 0 :(得分:4)
VInt非常节省空间。理论上它可以节省高达75%的空间。
在Lucene中,许多结构都是整数列表。例如,给定术语的文档列表,文档中术语的位置(和偏移)等。这些列表形成了大量的lucene数据。
想想数百万个需要数十GB空间的文档的Lucene索引。将空间缩小一半以上可减少磁盘空间需求。虽然磁盘空间的节省可能不是一个很大的胜利,但考虑到磁盘空间很便宜,真正的好处是降低了磁盘IO。用于读取VInt数据的磁盘IO低于读取整数,后者自动转换为更好的性能。
答案 1 :(得分:1)
VInt是指Lucene的可变宽度整数编码方案。它仅使用每个字节的低7位对一个或多个字节中的整数进行编码。除了最后一个字节外,所有字节的高位都设置为零,这就是长度的编码方式。
答案 2 :(得分:1)
关于你的第一个问题: 定义了正整数的可变长度格式,其中每个字节的高位指示是否还有更多字节要读取。低7位被附加为所得整数值中越来越多的有效位。因此,从0到127的值可以存储在单个字节中,128到16,383的值可以存储在两个字节中,依此类推。 https://lucene.apache.org/core/3_0_3/fileformats.html
因此,要保存n个整数的列表,您需要的内存量是[例如] 4 * n个字节。但是对于Vint,所有128以下的数字都只使用1个字节存储[等等],从而节省了大量内存。
Vint提供了整数的压缩表示,Shashikant的答案已经解释了Lucene中压缩的要求和好处。