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 la consulta, consulta Crea un esquema de cifrado.
Tipos de query admitidos y comportamiento
Para obtener una lista de operadores del query admitidos y el comportamiento con campos cifrados, consulta Operadores del query admitidos.
Validación de esquema de cliente y servidor
MongoDB admite el uso de validación de esquema para aplicar el cifrado de campos especĆficos en una colección. Los clientes que usan Queryable Encryption automĆ”tica se comportan de manera diferente dependiendo de la configuración de la conexión de la base de datos:
Si el objeto de conexión
encryptedFieldsMapcontiene una clave para la colección especificada, el cliente utiliza ese objeto para realizar el cifrado Queryable Encryption de forma automĆ”tica, en vez de utilizar el esquema remoto. Como mĆnimo, las reglas locales deben cifrar todos los campos que cifre el esquema remoto.Si el objeto connection
encryptedFieldsMapno contiene una clave para la colección especificada, el cliente descarga el esquema remoto del servidor 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
Puede hacer que un campo cifrado sea consultable. Para cambiar qué campos estÔn cifrados o pueden ser consultados, reconstruya el esquema de cifrado de la colección y vuelva a crear la colección.
Si no es necesario query un campo cifrado, es posible que no sea necesario activar la query en ese campo. TodavĆa puedes recuperar el documento consultando otros campos que sean consultables o no estĆ©n encriptados.
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 query: Solo queries de rango.
Tipo: 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.
Importante
Los parĆ”metros espaciado, precisión, trimFactor y contención estĆ”n pensados solo para usuarios avanzados. Los valores por defecto de estas opciones son adecuados para la mayorĆa de los casos de uso y sólo deben modificarse si su caso de uso lo requiere.
sparsityTipo de query: Solo queries de rango.
Tipo: Entero del
1al4.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.
precisionTipo de query: Solo queries de rango.
Tipo: 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, unprecisionde1trata10.18como10.1para queries. El valor cifrado aĆŗn se almacena como10.18.Especificar
precisiony limitarlo 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 query: Solo queries de rango.
Tipo: 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: consultas de igualdad y de rango.
Tipo: 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 Queryable Encryption, MongoDB rastrea las ocurrencias de cada par campo/valor en una colección cifrada utilizando un contador interno. El factor de contención particiona este contador, similar a un arreglo. Esto minimiza los problemas al incrementar el contador al usar
insert,updateofindAndModifypara agregar o modificar un campo cifrado con el mismo par campo/valor en sucesión cercana.contention = 0crea un arreglo con un elemento en el Ćndice 0.contention = 4crea un arreglo con 5 elementos en los Ćndices 0-4. MongoDB incrementa un elemento aleatorio del arreglo 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 de8.Para obtener mÔs información sobre el factor de contención y sus implicancias criptogrÔficas, consulte la "Sección 9: Directrices" en Articulo Técnico de Queryable Encryption de MongoDB.