sql >> Base de Datos >  >> NoSQL >> MongoDB

El caso de los índices hash de MongoDB

Además de los índices escalares (ascendente, descendente), MongoDB también admite índices 'hash'. Cuando usa un índice hash en un campo, MongoDB calcula un hash del valor del campo y almacena el hash en el índice. Los índices hash solo admiten la comparación de igualdad y no admiten consultas de rango, y normalmente se usan en escenarios de fragmentación.

Creación de un índice hash de MongoDB

Puede usar la siguiente sintaxis para crear un índice hash:

db.collection.ensureIndex({'field':'hashed'});

Puede crear tanto un índice escalar como un índice hash en el mismo campo.

fragmentación MongoDB

Por lo general, la fragmentación de MongoDB se implementa mediante la partición "basada en rango". En este enfoque, a cada fragmento se le asigna un rango de valores de la clave de fragmento. Si la clave del fragmento aumenta de forma monótona, como las marcas de tiempo o el ID de objeto, esto a veces puede resultar en un fragmento "caliente" porque los valores más recientes siempre terminan siendo enrutados al mismo fragmento.

La forma de evitar esto es usar 'particiones basadas en hash'. Se calcula un hash de la clave de fragmento y este valor de hash se usa para enrutar a un fragmento en lugar del valor real. Esto ayuda a distribuir la carga de manera uniforme entre todos los fragmentos en lugar de enviar todos los datos más nuevos al mismo fragmento. La partición basada en hash se implementa mediante índices hash en su clave fragmentada. Para obtener más información, consulte la documentación de fragmentación.

Pros y contras del índice hash

  • Ventajas

    Los índices hash tienden a ser más pequeños que los índices escalares porque solo se almacena un hash de la clave en lugar de la clave completa. P.ej. En una prueba simple con 100k documentos, agregamos índices hash y escalares en un campo de cadena:'fieldName'. Como se muestra a continuación, el índice hash tiende a ser considerablemente más pequeño que los índices escalares:

    "indexSizes" : {
            "_id_" : 811008,
            "firstName_1" : 4415488,
            "firstName_hashed" : 1490944
    }
    
  • Contras

    No admite consultas de rango. Si ejecuta una consulta de rango en un índice hash, dará como resultado un escaneo de índice.

Índices hash de MongoDB para fragmentos:ventajas y desventajasHaga clic para twittear

Restricciones de índice hash

    1. Los índices hash no admiten matrices.
    2. Los índices hash no pueden ser índices compuestos.
    3. No puede agregar restricciones únicas en índices hash.