Cuando utilices Queryable Encryption, deberás definir campos cifrados a nivel de colección mediante un esquema de cifrado. El cifrado de un campo y la habilitación de consultas incrementan los requerimientos de almacenamiento y afectan el rendimiento de las consultas. Puede configurar un campo cifrado para consultas de igualdad o de rango, pero no para ambas opciones. Configura los campos para el tipo de query esperado.
Para obtener instrucciones sobre cómo crear un esquema de cifrado y configurar consultas, consulta Crear un esquema de cifrado.
Tipos de query admitidos y comportamiento
Para una lista de operadores del query soportados y comportamiento con campos cifrados, consulte Tipos y operadores de queries compatibles.
Validación de esquema
Queryable Encryption requiere un esquema de cifrado del lado del servidor para aplicar el cifrado de campos específicos en una colección. Los clientes que utilizan automatic Queryable Encryption se comportan de manera diferente según la configuración de la conexión de la base de datos:
Como mínimo, las reglas locales deben cifrar los mismos campos que el esquema remoto en el servidor.
Si la conexión
encryptedFieldsMapEl objeto contiene una clave para la colección especificada, el cliente utiliza ese objeto para realizar un cifrado consultable automático, en lugar de utilizar el esquema remoto.Si el objeto de conexión
encryptedFieldsMapno contiene una clave para la colección especificada, el cliente descarga el esquema remoto para la colección y lo utiliza en su lugar.Importante
Comportamiento del Esquema Remoto
Cuando se utiliza un esquema remoto:
El cliente confía en que el servidor tiene un esquema válido
El cliente utiliza el esquema remoto para realizar únicamente Queryable Encryption automático. El cliente no aplica ninguna otra regla de validación especificada en el esquema.
Consideraciones al habilitar la consulta
Decida qué campos deben estar cifrados y/o ser consultables antes de crear su colección. Cambiar qué campos están cifrados o son consultables requiere volver a compilar el esquema de cifrado de la colección y recrear la colección.
Si no necesita consultar un campo cifrado, es posible que no necesite habilitar la consulta en ese campo. Aun así, puede recuperar el documento consultando otros campos consultables o sin cifrar.
Para cada colección cifrada, MongoDB crea dos colecciones de metadatos, lo que aumenta el espacio de almacenamiento. MongoDB crea un índice para cada campo cifrado, lo que aumenta la duración de las operaciones de escritura en ese campo. Cuando una operación de escritura actualiza un campo indexado, MongoDB actualiza el índice relacionado.
Configure campos cifrados para una búsqueda y almacenamiento óptimos
MongoDB proporciona los siguientes parámetros para facilitar la depuración y la optimización del rendimiento:
min, maxTipo de consulta:
rangeTipo: debe coincidir con el
bsonTypedel campo.Obligatorio si
bsonTypeesdecimalodouble. Opcional pero muy recomendable si esint,longodate. Por defecto, los valores mínimos y máximos debsonType.Especifica valores mínimos y máximos (inclusive) queryables para un campo cuando sea posible, ya que límites más pequeños mejoran la eficiencia de la query. Si se consultan valores fuera de estos límites, MongoDB devuelve un error.
Parámetros de subcadena
Advertencia
Las consultas de prefijos, sufijos y subcadenas están en vista previa pública
Las búsquedas por prefijo, sufijo y subcadena de Queryable Encryption ya están disponibles en la vista previa pública en MongoDB 8.2. No habilite estos tipos de query en producción. La funcionalidad de la vista previa pública será incompatible con la funcionalidad GA, y deberá descartar cualquier colección que permita estas queries.
strMaxLengthTipo de consulta:
substringPreviewTipo: entero 1de60 a, inclusive.
La longitud máxima permitida para un campo indexado por subcadena. Al intentar insertar una cadena más larga, se devuelve un error.
Importante
Puedes anular el límite de caracteres estableciendo
fleDisableSubstringPreviewParameterLimits, pero ejecutar consultas de subcadenas en cadenas más largas tiene un impacto significativo en el rendimiento.
strMinQueryLengthTipo de query:
prefixPreview,suffixPreview,substringPreviewTipo: Entero positivo.
Debe ser >= 1 para consultas
prefixPreviewosuffixPreview.Debe ser >= 2 para
substringPreviewconsultas.
La longitud mínima permitida de prefijo/sufijo/subcadena para consultar. Intentar query una string más corta devuelve un error.
strMaxQueryLengthTipo de query:
prefixPreview,suffixPreview,substringPreviewTipo: Entero positivo - Debe ser >=1 para
prefixPreviewosuffixPreviewconsultas. - Debe estar 2-10 inclusive parasubstringPreviewconsultas.La longitud máxima permitida de prefijo, sufijo o subcadena para query. Intentar consultar una cadena más larga devuelve un error.
Importante
Esta configuración tiene un fuerte impacto en el rendimiento de las queries. Limite la longitud máxima de la query siempre que sea posible.
Parámetros avanzados de query
Advertencia
Estos parámetros están destinados únicamente a usuarios avanzados. Los valores por defecto son adecuados para la mayoría de los casos de uso y solo deben modificarse si su caso de uso lo requiere.
sparsityTipo de consulta:
rangeTipo: Entero del 1al8.
Opcional. Se establece por defecto en 2.
Afecta la exhaustividad con la que MongoDB indexa los valores de rango. Una baja dispersión (indexación densa) mejora el rendimiento de las queries, pero almacena más documentos en las colecciones de metadatos cifrados para cada operación de inserción o actualización, causando un mayor sobrecosto de almacenamiento. Una dispersión elevada hace lo contrario.
Cambiado en la versión 8.2: El valor máximo cambió de 4 a 8.
precisionTipo de consulta:
rangeTipo: Entero.
opcional. Permitido solo si
bsonTypeesdoubleodecimal. Si no se establece, MongoDB utiliza la misma precisión máxima que elbsonType, ya seadoubleodecimal.Limita cuántos dígitos después del punto decimal se tienen en cuenta al consultar un campo
doubleodecimal. Se descartan los dígitos adicionales, no se redondean. Por ejemplo, unprecisionde 1 trata10.18como10.1para queries. El valor cifrado aún se almacena como10.18.Especifique
precisiony limítelo cuando sea posible. Cada dígito aumenta la sobrecarga de almacenamiento y tiene un gran impacto en el rango de búsqueda y la generación de índices.
trimFactorTipo de consulta:
rangeTipo: Entero.
Opcional. Se establece por defecto en 6.
El
trimFactorcontrola el rendimiento de inserciones y actualizaciones concurrentes. UntrimFactormás alto aumenta el rendimiento de inserciones y actualizaciones concurrentes, a costa de ralentizar algunas operaciones de lectura de rangos. UntrimFactormás bajo hace lo contrario.
contentionTipo de consulta:,,,,
equalityrangeprefixPreviewsuffixPreviewsubstringPreviewTipo: Entero.
Opcional. Se establece por defecto en 8.
Las operaciones de escritura concurrentes, como insertar el mismo par de campo/valor en varios documentos en rápida sucesión, pueden provocar conflictos que retrasan las operaciones.
Con el cifrado consultable, MongoDB rastrea las ocurrencias de cada par campo-valor en una colección cifrada mediante un contador interno. El factor de contención particiona este contador, de forma similar a una matriz. Esto minimiza los problemas de incremento del contador al
insertusar,updateofindAndModifypara añadir o modificar un campo cifrado con el mismo par campo-valor en una sucesión cercana.contention = 0crea una matriz con un elemento en el 0 índice.contention = 4crea una matriz con 5 elementos en los índices 04-. MongoDB incrementa un elemento aleatorio de la matriz durante la inserción.Cuando no se establece,
contentionse configura por defecto en8, lo que proporciona un alto rendimiento para la mayoría de las cargas de trabajo. Una mayor contención mejora el rendimiento de las operaciones de inserción y actualización en campos de baja cardinalidad, pero disminuye el rendimiento de búsqueda.Opcionalmente, puedes incluir
contentionen los campos consultables para cambiar el valor de su valor por defecto de 8.Para obtener información más detallada sobre el factor de contención y sus implicaciones criptográficas, consulte la 9 "Sección: Pautas" en el Documento técnico sobre cifrado consultable de MongoDB.