BITMAP
La indexación por mapa de bits es una técnica de indexación eficaz diseñada para mejorar el rendimiento de las consultas en campos escalares de baja cardinalidad. La cardinalidad se refiere al número de valores distintos de un campo. Los campos con menos elementos distintos se consideran de baja cardinalidad.
Este tipo de índice ayuda a reducir el tiempo de recuperación de las consultas escalares representando los valores del campo en un formato binario compacto y realizando operaciones bit a bit eficientes sobre ellos. En comparación con otros tipos de índices, los índices de mapa de bits suelen tener una mayor eficiencia de espacio y una mayor velocidad de consulta cuando se trata de campos de baja cardinalidad.
Descripción general
El término mapa de bits combina dos palabras: Bit y Mapa. Un bit representa la unidad más pequeña de datos en un ordenador, que sólo puede contener un valor de 0 ó 1. Un mapa, en este contexto, se refiere al proceso de transformación y organización de los datos según el valor que deba asignarse a 0 y 1.
Un índice de mapa de bits consta de dos componentes principales: mapas de bits y claves. Las claves representan los valores únicos del campo indexado. A cada valor único le corresponde un mapa de bits. La longitud de estos mapas de bits es igual al número de registros de la colección. Cada bit del mapa de bits corresponde a un registro de la colección. Si el valor del campo indexado de un registro coincide con la clave, el bit correspondiente se pone a 1; en caso contrario, se pone a 0.
Consideremos una colección de documentos con los campos Categoría y Público. Queremos recuperar los documentos que pertenecen a la categoría Técnica y están abiertos al Público. En este caso, las claves de nuestros índices de mapa de bits son Tech y Public.
Indexación por mapa de bits
Como se muestra en la figura, los índices de mapa de bits para Categoría y Público son.
Tech: [1, 0, 1, 0, 0], que muestra que sólo el primer y el tercer documento pertenecen a la categoría Tech.
Público: [1, 0, 0, 1, 0], que muestra que sólo los documentos 1º y 4º están abiertos al Público.
Para encontrar los documentos que cumplen ambos criterios, realizamos una operación AND a nivel de bits en estos dos mapas de bits.
- Tech AND Public: [1, 0, 0, 0, 0]
El mapa de bits resultante [1, 0, 0, 0, 0] indica que sólo el primer documento(ID 1) cumple ambos criterios. Utilizando índices de mapa de bits y operaciones bit a bit eficientes, podemos limitar rápidamente el ámbito de búsqueda, eliminando la necesidad de escanear todo el conjunto de datos.
Crear un índice de mapa de bits
Para crear un índice de mapa de bits en Milvus, utilice el método create_index()
y establezca el parámetro index_type
en "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
)
En este ejemplo, creamos un índice de mapa de bits en el campo category
de la colección my_collection
. El método add_index()
se utiliza para especificar el nombre del campo, el tipo de índice y el nombre del índice.
Una vez creado el índice de mapa de bits, puede utilizar el parámetro filter
en las operaciones de consulta para realizar un filtrado escalar basado en el campo indexado. Esto permite limitar de forma eficaz los resultados de búsqueda utilizando el índice de mapa de bits. Para obtener más información, consulte Filtrado de metadatos.
Límites
Los índices de mapa de bits sólo se admiten para campos escalares que no sean claves primarias.
El tipo de datos del campo debe ser uno de los siguientes.
BOOL
,INT8
,INT16
,INT32
,INT64
,VARCHAR
ARRAY
(los elementos deben ser uno de los siguientes:BOOL
,INT8
,INT16
,INT32
,INT64
,VARCHAR
)
Los índices de mapa de bits no admiten los siguientes tipos de datos.
FLOAT
,DOUBLE
: Los tipos de coma flotante no son compatibles con la naturaleza binaria de los índices de mapa de bits.JSON
: Los tipos de datos JSON tienen una estructura compleja que no puede representarse eficazmente mediante índices de mapa de bits.
Los índices de mapa de bits no son adecuados para campos con alta cardinalidad (es decir, campos con un gran número de valores distintos).
Como norma general, los índices de mapa de bits son más eficaces cuando la cardinalidad de un campo es inferior a 500. Cuando la cardinalidad aumenta por encima de este valor, los índices de mapa de bits son más eficaces.
Cuando la cardinalidad supera este umbral, las ventajas de rendimiento de los índices de mapa de bits disminuyen y la sobrecarga de almacenamiento se vuelve significativa.
Para campos de cardinalidad alta, considere el uso de técnicas de indexación alternativas, como los índices invertidos, en función de su caso de uso específico y de los requisitos de consulta.