Ao usar a Queryable Encryption, você define campos criptografados no nível da coleção usando um esquema de criptografia. Criptografar um campo e ativar queries aumenta os requisitos de armazenamento e afeta o desempenho da query. Você pode configurar um campo criptografado para queries de igualdade ou de intervalo, mas não para ambas. Configure campos para o tipo de query esperado.
Para obter instruções sobre como criar um esquema de criptografia e configurar a query, consulte Criar um esquema de criptografia.
Tipos de query e comportamento suportados
Para obter uma lista de operadores de query compatíveis e comportamento com campos criptografados, consulte Tipos e operadores de query compatíveis.
Validação de esquema
A Queryable Encryption requer um esquema de criptografia do lado do servidor para impor a criptografia de campos específicos em uma coleção. Os clientes que usam a Queryable Encryption se comportam de maneira diferente, dependendo da configuração da conexão com o banco de dados :
No mínimo, as regras locais devem criptografar os mesmos campos que o esquema remoto no servidor.
Se o objeto de conexão
encryptedFieldsMapcontiver uma chave para a coleção especificada, o cliente utilizará esse objeto para executar a Queryable Encryption automática, ao invés de utilizar o esquema remoto.Se o objeto de conexão
encryptedFieldsMapnão contiver uma chave para a coleção especificada, o cliente baixará o esquema remoto para a coleção e a usará.Importante
Comportamento do esquema remoto
Ao usar um esquema remoto:
O cliente confia que o servidor tem um esquema válido
O cliente usa o esquema remoto apenas para executar uma Queryable Encryption automática. O cliente não força nenhuma outra regra de validação especificada no esquema.
Considerações ao ativar a query
Decida quais campos devem ser criptografados e/ou consultáveis antes de criar sua collection. Alterar quais campos são criptografados ou consultáveis requer a reconstrução do esquema de criptografia da collection e a recriação da collection.
Se você não precisar executar query de um campo criptografado, talvez não seja necessário habilitar a query nesse campo. Você ainda pode recuperar o documento consultando outros campos que podem ser consultados ou não criptografados.
Para cada collection criptografada, o MongoDB cria duas collections de metadados, aumentando o espaço de armazenamento. O MongoDB cria um índice para cada campo criptografado , o que aumenta a duração das operações de gravação nesse campo. Quando uma operação de gravação atualiza um campo indexado, MongoDB atualiza o índice relacionado.
Configurar campos criptografados para pesquisa e armazenamento ideais
O MongoDB fornece os seguintes parâmetros para facilitar o ajuste e a depuração de desempenho:
min, maxTipo de query:
rangeTipo: deve corresponder ao
bsonTypedo campo.Obrigatório para definir a precisão. Caso contrário opcional, mas altamente recomendado. O padrão é os valores mínimos e máximos
bsonType.Especifique valores mínimos e máximos (inclusive) para query de um campo quando possível, pois limites menores melhoram a eficiência da query. Se estiver consultando valores fora desses limites, o MongoDB retornará um erro.
Parâmetros de prefixo, sufixo e substring
strMaxLengthTipo de query:
substringTipo: número inteiro de 2a50, inclusive.
Obrigatório. O comprimento máximo permitido para um campo indexado por substring. A tentativa de inserir uma string mais longa retorna um erro.
strMinQueryLengthTipo de Query:
prefix,suffix,substringTipo: número inteiro positivo.
Deve ser >= 1 para queries
prefixousuffix.Deve ser >= 2 para queries
substring.
Obrigatório. O comprimento mínimo de prefixo/sufixo/substring permitido para query. A tentativa de executar uma string mais curta retorna um erro.
strMaxQueryLengthTipo de Query:
prefix,suffix,substringTipo: número inteiro positivo.
Deve ser >= 1 para queries
prefixousuffix.Deve ser 2-6 inclusive para queries
substring.
Obrigatório. O comprimento máximo de prefixo/sufixo/substring permitido para query. A tentativa de executar uma string mais longa retorna um erro.
Importante
Esta configuração afeta fortemente o desempenho da consulta. Limite o comprimento máximo da query sempre que possível.
caseSensitiveTipo de Query:
prefix,suffix,substringTipo: Booleano
Obrigatório. Se as queries de prefixo/sufixo/substring diferenciam maiúsculas de minúsculas. Defina como
falsepara correspondência insensível a maiúsculas e minúsculas. Se você habilitar vários tipos de query no mesmo campo, esse valor deverá ser idêntico para todos eles.
diacriticSensitiveTipo de Query:
prefix,suffix,substringTipo: Booleano
Obrigatório. Se as queries de prefixo/sufixo/substring devem corresponder a sinais diacríticos. Defina como
falsepara correspondência insensível a diacríticos. Se você habilitar vários tipos de query no mesmo campo, esse valor deverá ser idêntico para todos eles.
Parâmetros de query avançados
Aviso
Esses parâmetros são destinados apenas a usuários avançados. Os valores padrão são adequados para a maioria dos casos de uso e só devem ser modificados se seu caso de uso exigir.
sparsityTipo de query:
rangeTipo: Inteiro de 1-8.
Opcional. O padrão é 2.
Afeta o quão completamente o MongoDB indexa os valores de intervalo. A baixa esparsidade (indexação compacta) melhora o desempenho da consulta, mas armazena mais documentos nas coleções de metadados criptografadas para cada operação de inserção ou atualização, causando maior sobrecarga de armazenamento. Alta escassez faz o oposto.
Alterado na versão 8.2:
O valor máximo foi alterado de 4 para 8.
precisionTipo de query:
rangeTipo: inteiro.
Opcional. Permitido somente se
bsonTypefordoubleoudecimal. Se não for definido, o MongoDB usa a mesma precisão máxima quebsonType,doubleoudecimal.Limita quantos dígitos após o ponto decimal são levados em conta ao executar uma query de um campo
doubleoudecimal. Os dígitos adicionais são descartados, não arredondados. Por exemplo, umprecisionde 1 trata10.18como10.1para queries. O valor codificado ainda está armazenado como10.18.Especifique
precisione limite-o quando possível. Cada dígito aumenta a sobrecarga de armazenamento e tem um alto impacto no intervalo pesquisável e na geração de índices.
trimFactorTipo de query:
rangeTipo: inteiro.
Opcional. O padrão é 6.
O
trimFactorcontrola a taxa de transferência de inserções e atualizações simultâneas. UmtrimFactormais alto aumenta a taxa de transferência de inserção e atualizações simultâneas ao custo de desacelerar algumas operações de leitura de intervalo. UmtrimFactormais baixo faz o oposto.
contentionTipo de Query:
equality,range,prefix,suffix,substringTipo: inteiro.
Opcional para criptografia automática, o padrão é 8. Necessário para a criptografia explícita.
Operações de gravação simultâneas, como inserir o mesmo par de campo/valor em vários documentos em sucessão próxima, podem causar contenção: conflitos que atrasam as operações.
Com o Queryable Encryption, o MongoDB rastreia as ocorrências de cada par de campo/valor em uma coleção criptografada usando um contador interno. O fator de contenção particiona esse contador, semelhante a uma array. Isto minimiza problemas ao incrementar o contador ao utilizar
insert,updateoufindAndModifypara adicionar ou modificar um campo codificado com o mesmo par de campo/valor em sucessão próxima.contention = 0cria uma array com um elemento no índice 0.contention = 4cria uma array com 5 elementos nos índices 0-4. O MongoDB incrementa um elemento de array aleatório durante a inserção.Ao não ser definido, o
contentionpadroniza para8, que fornece alto desempenho para a maioria das cargas de trabalho. Uma contenção mais alta melhora o desempenho das operações de inserção e atualização em campos de baixa cardinalidade , no entanto, reduz o desempenho da procuras.Para obter informações mais completas sobre o fator de contenção e suas implicações criptográficas, consulte "Seção 9: Diretivas" no Documento técnico de Queryable Encryption do MongoDB.