milvus-logo
LFAI
홈페이지
  • 사용자 가이드

비트맵

비트맵 인덱싱은 카디널리티가 낮은 스칼라 필드에서 쿼리 성능을 개선하기 위해 고안된 효율적인 인덱싱 기법입니다. 카디널리티는 필드에 있는 고유 값의 수를 나타냅니다. 고유 요소가 적은 필드는 카디널리티가 낮은 필드로 간주됩니다.

이 인덱스 유형은 필드 값을 간결한 이진 형식으로 표현하고 효율적인 비트 단위 연산을 수행하여 스칼라 쿼리의 검색 시간을 단축하는 데 도움이 됩니다. 다른 유형의 인덱스에 비해 비트맵 인덱스는 일반적으로 카디널리티가 낮은 필드를 처리할 때 공간 효율성이 높고 쿼리 속도가 빠릅니다.

개요

비트맵이라는 용어는 두 단어를 결합한 것입니다: 비트와 맵입니다. 비트는 컴퓨터에서 가장 작은 데이터 단위를 나타내며, 0 또는 1의 값만 저장할 수 있습니다. 여기서 맵은 0과 1에 어떤 값을 할당해야 하는지에 따라 데이터를 변환하고 구성하는 프로세스를 의미합니다.

비트맵 인덱스는 비트맵과 키라는 두 가지 주요 구성 요소로 이루어져 있습니다. 키는 인덱싱된 필드에 있는 고유 값을 나타냅니다. 각 고유 값마다 해당 비트맵이 있습니다. 이러한 비트맵의 길이는 컬렉션의 레코드 수와 같습니다. 비트맵의 각 비트는 컬렉션의 레코드에 해당합니다. 레코드에서 인덱싱된 필드의 값이 키와 일치하면 해당 비트는 1로 설정되고, 그렇지 않으면 0으로 설정됩니다.

CategoryPublic 필드가 있는 문서 컬렉션을 예로 들어 보겠습니다. 기술 카테고리에 속하고 공개되어 있는 문서를 검색하려고 합니다. 이 경우 비트맵 인덱스의 키는 Tech와 Public입니다.

Bitmap indexing 비트맵 인덱싱

그림에서 보는 바와 같이 CategoryPublic에 대한 비트맵 인덱스는 다음과 같습니다.

  • Tech: [1, 0, 1, 0, 0]이며, 이는 첫 번째와 세 번째 문서만 Tech 카테고리에 속한다는 것을 보여줍니다.

  • Public: [1, 0, 0, 1, 0]은 1번째와 4번째 문서만 공개 문서에 해당됨을 나타냅니다.

두 기준에 모두 일치하는 문서를 찾기 위해 이 두 비트맵에 대해 비트 단위 AND 연산을 수행합니다.

  • 기술공개: [1, 0, 0, 0, 0]

결과 비트맵 [1, 0, 0, 0, 0, 0]은 첫 번째 문서(ID 1)만이 두 기준을 모두 만족한다는 것을 나타냅니다. 비트맵 인덱스와 효율적인 비트 단위 연산을 사용하면 전체 데이터 세트를 스캔할 필요 없이 검색 범위를 빠르게 좁힐 수 있습니다.

비트맵 인덱스 만들기

Milvus에서 비트맵 인덱스를 생성하려면 create_index() 방법을 사용하고 index_type 파라미터를 "BITMAP" 로 설정합니다.

from pymilvus import MilvusClient

index_params = client.create_index_params() # Prepare an empty IndexParams object, without having to specify any index parameters
index_params.add_index(
    field_name="category", # Name of the scalar field to be indexed
    index_type="BITMAP", # Type of index to be created
    index_name="category_bitmap_index" # Name of the index to be created
)

client.create_index(
    collection_name="my_collection", # Specify the collection name
    index_params=index_params
)

이 예에서는 my_collection 컬렉션의 category 필드에 비트맵 인덱스를 생성합니다. add_index() 메서드는 필드 이름, 인덱스 유형 및 인덱스 이름을 지정하는 데 사용됩니다.

비트맵 인덱스가 생성되면 쿼리 작업에서 filter 매개변수를 사용하여 인덱싱된 필드를 기반으로 스칼라 필터링을 수행할 수 있습니다. 이렇게 하면 비트맵 인덱스를 사용하여 검색 결과의 범위를 효율적으로 좁힐 수 있습니다. 자세한 내용은 메타데이터 필터링을 참조하세요.

제한 사항

  • 비트맵 인덱스는 기본 키가 아닌 스칼라 필드에 대해서만 지원됩니다.

  • 필드의 데이터 유형은 다음 중 하나여야 합니다.

    • BOOL, INT8, INT16, INT32, INT64, VARCHAR

    • ARRAY (요소는 BOOL, INT8, INT16, INT32, INT64, VARCHAR) 중 하나여야 합니다.

  • 비트맵 인덱스는 다음 데이터 유형을 지원하지 않습니다.

    • FLOAT, DOUBLE: 부동소수점 유형은 비트맵 인덱스의 이진 특성과 호환되지 않습니다.

    • JSON: JSON 데이터 유형은 비트맵 인덱스를 사용하여 효율적으로 표현할 수 없는 복잡한 구조를 가지고 있습니다.

  • 비트맵 인덱스는 카디널리티가 높은 필드(즉, 고유값이 많은 필드)에는 적합하지 않습니다.

    • 일반적인 지침으로, 비트맵 인덱스는 필드의 카디널리티가 500 미만일 때 가장 효과적입니다.

    • 카디널리티가 이 임계값 이상으로 증가하면 비트맵 인덱스의 성능 이점이 줄어들고 스토리지 오버헤드가 크게 증가합니다.

    • 카디널리티가 높은 필드의 경우, 특정 사용 사례와 쿼리 요구 사항에 따라 역 인덱스와 같은 대체 인덱싱 기술을 사용하는 것을 고려하세요.

번역DeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
피드백

이 페이지가 도움이 되었나요?