2010-05-02 2 views
2

Я хочу знать, что такое VInt в Lucene?Что такое VInt в Lucene?

Я прочитал статью this, но я не понимаю, что это такое и где Луценэ использует его? Почему Lucene не использует простые целые или большие целые числа?

Спасибо.

ответ

4

VInt - чрезвычайно эффективное пространство. Теоретически это экономит до 75% пространства.

В Lucene многие структуры представляют собой список целых чисел. Например, список документов на данный термин, позиции (и смещения) условий в документах, среди прочих. Эти списки составляют основную часть данных lucene.

Подумайте о показателях Lucene для миллионов документов, требующих десятков ГБ пространства. Сокращение пространства более чем на половину снижает требования к дисковому пространству. Хотя экономия дискового пространства может быть не большой победой, учитывая, что дисковое пространство дешево, реальное усиление приводит к сокращению дискового ввода-вывода. Диск IO для чтения данных VInt ниже, чем чтение целых чисел, которое автоматически переводит на лучшую производительность.

1

VInt относится к целочисленной схеме кодирования переменной ширины Lucene. Он кодирует целые числа в одном или нескольких байтах, используя только младшие семь бит каждого байта. Высокий бит устанавливается равным нулю для всех байтов, кроме последнего, который кодирует длину.

+0

Я знаю это, но я хочу знать, почему lucene делает эту работу? Почему он не использует простые целые числа (0 - ~ 4 000 000 000) в 4 байтах? –

1

Для вашего первого вопроса: Определяется формат переменной длины для положительных целых чисел, где старший бит каждого байта указывает, осталось ли читать больше байтов. Семь бит младшего порядка добавляются как более значимые биты в результате целочисленного значения. Таким образом, значения от нуля до 127 могут храниться в одном байте, значения от 128 до 16, 383 могут храниться в двух байтах и ​​так далее. https://lucene.apache.org/core/3_0_3/fileformats.html.

Таким образом, чтобы сохранить список из n целых чисел, объем необходимой вам памяти будет [например] 4 * n байтов. Но с Vint все числа до 128 будут храниться с использованием только 1 байт [и т. Д.], Сохраняя много памяти.

Vint обеспечивает сжатое представление целых чисел, и ответ Shashikant уже объясняет требования и преимущества сжатия в Lucene.