Los índices encriptados recopilan y almacenan hash de los valores del campo indexado.
Soporte de índices encriptada particionado usando claves de fragmento cifradas. La partición basada en hash utiliza un índice hash de un campo como la clave de partición para distribuir datos a través de su clúster particionado.
Casos de uso
La indexación hash es ideal para claves de partición con campos que cambian monotónicamente , como los valores ObjectId o las marcas de tiempo. Cuando usas particionado por rango con un valor de la clave de partición monotónicamente creciente, el fragmento con un límite superior de MaxKey recibe la mayoría de las escrituras entrantes. Este comportamiento restringe las operaciones de inserción a una sola partición, lo que remueve la ventaja de escrituras distribuidas en un clúster.
Para obtener más información sobre cómo elegir el mejor enfoque de particionado para tu aplicación, consulta Particionado encriptado vs clasificado por rango.
Comportamiento
Números de punto flotante
Los índices encriptados truncan números de punto flotante a enteros de 64 bits antes de aplicar el hash. Por ejemplo, un índice encriptado utiliza el mismo hash para almacenar los valores 2.3, 2.2 y 2.9. Se trata de una colisión, en la que se asignan varios valores a una única clave encriptada. Las colisiones pueden tener un impacto negativo en el rendimiento de los queries.
Para evitar colisiones, no utilices un índice encriptado para números de punto flotante que no se puedan convertir de manera confiable a enteros de 64 bits y luego volver a punto flotante.
Los índices encriptados no admiten números de punto flotante mayores que 2 53.
Limitaciones
Los índices encriptados tienen limitaciones para los campos de los arreglos y la propiedad única.
Campos de arreglo
La función hash no soporta índices multiclave:
No se puede crear un índice encriptado en un campo que contenga un arreglo ni insertar un arreglo en un campo indexado encriptado.
Si algún campo de un índice compuesto es un arreglo, ningún campo de ese índice puede usar un índice cifrado. Esto incluye campos que no son arreglos.
No se pueden usar índices hash en un índice compuesto que se convierta en un índice multivalor (multikey).
Consultas cubiertas
Los índices hash no pueden cubrir un query.
Restricción única
No puedes especificar una restricción única en un índice encriptado. En cambio, puedes crear un índice adicional no encriptado con la restricción única. MongoDB puede utilizar ese índice no encriptado para aplicar la unicidad en el campo elegido.
Empezar
Para crear un índice encriptado, consulta Crear un índice encriptado.
Detalles
En esta sección, se describen los detalles técnicos de los índices encriptados.
Función de hash
Importante
Cuando MongoDB utiliza un índice encriptado para resolver un query, utiliza una función hash para calcular automáticamente los valores hash. Las aplicaciones no necesitan calcular hashes.
Para ver cuál sería el valor encriptado para una clave, usa el método convertShardKeyToHashed(). Este método utiliza la misma función hash que el índice encriptado.
Documentos incrustados
La función de hash contrae el documento incrustado y calcula el hash para el valor completo.