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 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 da conexão
encryptedFieldsMap
contiver uma chave para a coleção especificada, o cliente usará esse objeto para executar a Queryable Encryption automática em vez de usar o esquema remoto.Se o objeto de conexão
encryptedFieldsMap
nã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 a depuração e o ajuste de desempenho:
min, max
Tipo de query:
range
Tipo: deve corresponder ao
bsonType
do campo.Obrigatório se
bsonType
fordecimal
oudouble
. Opcional, mas altamente recomendado se forint
,long
oudate
. O padrão é os valores mínimos e máximosbsonType
.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 da substring
Aviso
As queries de prefixo, sufixo e substring estão em visualização pública
As queries de prefixo, sufixo e substring do Queryable Encryption estão disponíveis em visualização pública no MongoDB 8.2. Não habilite esses tipos de query em produção. A funcionalidade de visualização pública será incompatível com o recurso GA, e você terá que descartar todas as collections que habilitarem essas queries.
strMaxLength
Tipo de query:
substringPreview
Tipo: número inteiro de 1a60, inclusive.
O comprimento máximo permitido para um campo indexado por substring. A tentativa de inserir uma string mais longa retorna um erro.
Importante
Você pode substituir o limite de caracteres configurando
fleDisableSubstringPreviewParameterLimits
, mas executar queries de substring em strings mais longas tem um impacto significativo no desempenho.
strMinQueryLength
Tipo de Query:
prefixPreview
,suffixPreview
,substringPreview
Tipo: número inteiro positivo.
Deve ser >= 1 para queries
prefixPreview
ousuffixPreview
.Deve ser >= 2 para queries
substringPreview
.
O comprimento mínimo de prefixo/sufixo/substring permitido para query. A tentativa de executar uma string mais curta retorna um erro.
strMaxQueryLength
Tipo de Query:
prefixPreview
,suffixPreview
,substringPreview
Tipo: número inteiro positivo - Deve ser >=1 para queries
prefixPreview
ousuffixPreview
. - Deve 2-10 inclusive parasubstringPreview
consultas.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.
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.
sparsity
Tipo de query:
range
Tipo: Inteiro de 1-4.
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.
precision
Tipo de query:
range
Tipo: inteiro.
Opcional. Permitido somente se
bsonType
fordouble
oudecimal
. Se não for definido, o MongoDB usa a mesma precisão máxima quebsonType
,double
oudecimal
.Limita quantos dígitos após o ponto decimal são levados em conta ao executar uma query de um campo
double
oudecimal
. Os dígitos adicionais são descartados, não arredondados. Por exemplo, umprecision
de 1 trata10.18
como10.1
para queries. O valor codificado ainda está armazenado como10.18
.Especifique
precision
e 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.
trimFactor
Tipo de query:
range
Tipo: inteiro.
Opcional. O padrão é 6.
O
trimFactor
controla a taxa de transferência de inserções e atualizações simultâneas. UmtrimFactor
mais 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. UmtrimFactor
mais baixo faz o oposto.
contention
Tipo de Query:
equality
,range
,prefixPreview
,suffixPreview
,substringPreview
Tipo: inteiro.
Opcional. O padrão é 8.
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
,update
oufindAndModify
para adicionar ou modificar um campo codificado com o mesmo par de campo/valor em sucessão próxima.contention = 0
cria uma array com um elemento no índice 0.contention = 4
cria 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
contention
padroniza 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.Opcionalmente, você pode incluir
contention
nos campos consultáveis para alterar o valor do padrão de 8.Para obter informações mais completas sobre o fator de contenção e suas implicações criptográficas, consulte a "Seção 9: diretrizes" nodocumento técnico sobre Queryable Encryption do MongoDB.