2010-05-02 4 views
2

나는 Lucene의 VInt가 무엇인지 알고 싶습니까?Lucene의 VInt 란 무엇입니까?

나는 this 문서를 읽었지만, 나는 그것이 무엇인지, 그리고 Lucene이 그것을 어디에서 사용하는지 이해하지 못한다. Lucene이 단순 정수 또는 큰 정수를 사용하지 않는 이유는 무엇입니까?

감사합니다.

답변

4

VInt는 매우 공간 효율적입니다. 그것은 이론적으로 최대 75 % 공간을 절약 할 수 있습니다.

Lucene에서 많은 구조체는 정수 목록입니다. 예를 들어 특정 용어에 대한 문서 목록, 문서에서 용어의 위치 (및 오프셋) 등이 있습니다. 이 목록은 lucene 데이터의 대량을 구성합니다.

수십억 개의 공간이 필요한 수백만 개의 문서에 대한 Lucene 색인을 생각해보십시오. 공간을 절반 이상 줄이면 디스크 공간 요구 사항이 줄어 듭니다. 디스크 공간을 절약하면 큰 이점이 아닐 수도 있지만 디스크 공간이 싼 경우 실제적인 이득은 디스크 IO 감소로 이어집니다. VInt 데이터를 읽는 디스크 IO는 자동으로 더 나은 성능으로 변환되는 정수를 읽는 것보다 낮습니다.

1

VInt는 Lucene의 가변 폭 정수 인코딩 스키마를 나타냅니다. 각 바이트의 하위 7 비트 만 사용하여 하나 이상의 바이트로 정수를 인코딩합니다. 상위 비트는 길이를 인코딩하는 방법 인 마지막 바이트를 제외한 모든 바이트에 대해 0으로 설정됩니다.

+0

나는 이것을 알고 있지만 왜 lucene이이 작업을하는지 알고 싶습니다. 4 바이트에서 정수 (0 - ~ 4,000,000,000)를 사용하지 않는 이유는 무엇입니까? –

1

첫 번째 질문 : 양의 정수에 대한 가변 길이 형식은 각 바이트의 상위 비트가 더 많은 바이트가 읽히는 지 여부를 나타냅니다. 하위 7 비트는 결과 정수 값에서 점점 더 중요한 비트로서 추가됩니다. 따라서, 0 내지 127의 값은 단일 바이트에 저장 될 수 있고, 128 내지 16,383의 값은 2 바이트로 저장 될 수있다. https://lucene.apache.org/core/3_0_3/fileformats.html.

따라서 n 정수 목록을 저장하려면 필요한 메모리 양은 [예] 4 * n 바이트입니다. 하지만 Vint를 사용하면 128 이하의 모든 숫자는 1 바이트 만 사용하여 저장되므로 많은 메모리를 절약 할 수 있습니다.

Vint는 정수의 압축 된 표현을 제공하며 Shashikant의 대답은 이미 Lucene의 압축 요구 사항과 이점을 설명합니다.