Lucene中的VInt是什么?

3

我想知道Lucene中的VInt是什么?

我读了这篇文章,但我不明白它是什么,Lucene在哪里使用它? 为什么Lucene不使用简单整数或大整数?

谢谢。

3个回答

4

VInt非常节省空间。理论上可以节省高达75%的空间。

在Lucene中,许多结构都是整数列表。例如,给定术语的文档列表,文档中术语的位置(和偏移量)等。这些列表构成了Lucene数据的主要部分。

想象一下需要数十GB的空间来存储数百万个文档的Lucene索引。将空间缩小超过一半可以减少磁盘空间需求。虽然节省磁盘空间可能不是一个大胜利,因为磁盘空间很便宜,但真正的收益来自于降低磁盘IO。读取VInt数据的磁盘IO比读取整数要低,这自动转化为更好的性能。


2
对于您的第一个问题: 定义了一种用于正整数的可变长度格式,其中每个字节的高位比特指示是否还有更多的字节需要读取。低位七位作为越来越重要的位附加在结果整数值中。因此,单个字节可以存储从零到127的值,两个字节可以存储从128到16383的值,依此类推。https://lucene.apache.org/core/3_0_3/fileformats.html
因此,要保存n个整数的列表所需的内存量为[例如] 4*n字节。但是使用Vint,所有小于128的数字将仅使用1个字节[等等],节省了大量内存。
Vint提供了整数的压缩表示,Shashikant的答案已经解释了Lucene中压缩的要求和好处。

1

VInt是Lucene的可变宽度整数编码方案。它使用每个字节的低7位编码一个或多个整数,仅将高位设置为零。除了最后一个字节,所有字节的高位都设置为零,这就是长度的编码方式。


我知道这个,但我想知道为什么Lucene要这样做? 为什么它不使用4字节的简单整数(0 - ~4,000,000,000)? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接