Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.

Estimar o impacto de armazenamento do Queryable Encryption

A criptografia de um campo com Queryable Encryption e a habilitação de queries em campos criptografados aumentam o armazenamento que uma coleção requer. Estime esses aumentos antes de finalizar seu esquema de criptografia, pois alterar os aumentos exige que você recrie a coleção.

Você pode calcular essas estimativas para sua coleção com a habilidade de agente mongodb-qe-size-estimation, disponível diretamente no repositório público ou nos plugins mongodb ou mongodb-atlas.

Para obter informações mais detalhadas sobre o Queryable Encryption, consulte o whitepaper do Queryable Encryption.

O MongoDB cria um índice para cada campo criptografado consultável gerando tags, T, que ele armazena nas coleções de metadados que cria para cada coleção criptografada. O armazenamento aumenta com o número de tags que cada valor produz. As fórmulas abaixo são para o número máximo de tags que um valor pode gerar.

  • Campos não consultáveis ("não indexados") não geram tags, T=0.

  • Campos com índice para query de igualdade geram uma tag, T=1.

  • Campos com índice para query de prefixo ou sufixo geram uma tag inicial e, em seguida, crescem linearmente com a diferença entre o comprimento máximo e mínimo da query, T = 1 + (strMaxQueryLength - strMinQueryLength + 1).

  • Campos de índice para query de prefixo e sufixo crescem linearmente com a diferença entre o comprimento máximo e mínimo da query de prefixo e sufixo, T = 1 + (strMaxQueryLength_prefix - strMinQueryLength_prefix + 1) + (strMaxQueryLength_suffix - strMinQueryLength_suffix + 1)

  • Campos com índice para query de substring geram o maior número de tags, usando a fórmula T = 1 + (strMaxQueryLength - strMinQueryLength + 1) * (2 * strMaxLength + 2 - strMaxQueryLength - strMinQueryLength) / 2.

Habilitar o Queryable Encryption em sua coleção provavelmente terá um impacto menor no armazenamento em disco e na memória do que o calculado. Essas fórmulas protegem contra o pior cenário.

Importante

Cada gravação de um valor de campo criptografado também grava dois documentos de metadados por tag, um para o ESC e outro para o ECOC, portanto, a taxa de transferência de gravação é dimensionada com a contagem de tags da mesma forma que o armazenamento.

Para query de prefixo e sufixo, apenas a diferença entre o comprimento máximo e mínimo da query contribui para o crescimento da tag. Para query de substring, todos os parâmetros contribuem, e o comprimento pesquisável é o maior contribuinte. A tabela a seguir compara quantas tags um campo string gera à medida que strMaxQueryLength aumenta, assumindo um strMaxLength de 50 e um strMinQueryLength de 2. As query de substring forçam um strMaxQueryLength máximo de 6, portanto, esta tabela compara apenas os valores 2 a 6, apesar de as query de prefixo e sufixo permitirem valores mais altos.

strMaxQueryLength
2
3
4
5
6

prefix ou suffix

2

3

4

5

6

substring

50

98

145

191

236

Devido a esse crescimento, evite habilitar query de substring em mais de um campo. Habilite-as apenas se as query de prefixo e sufixo não atenderem às suas necessidades e a coleção contiver menos de 50 milhões de documento.

Certifique-se de que tem as seguintes informações:

  • O número de documentos na coleção que contêm campos criptografados.

  • O comprimento médio em bytes dos valores de texto simples de cada campo criptografado.

  • O número de campos que você planeja criptografar e sua configuração de query criptografada.

1

Para cada campo criptografado, calcule T, o limite superior do número de tags que um único valor gera. Calcule um T por campo: um campo indexado para queries de prefixo e sufixo usa uma única fórmula que combina ambos os tipos de query.

  1. Para campos não indexados, T = 0.

  2. Para campos índice para queries de igualdade, T = 1.

  3. Para campos com índice para queries prefix ou suffix:

    T = 1 + (strMaxQueryLength - strMinQueryLength + 1)
  4. Para campos com índice para queries de prefix e suffix:

    T = 1 + (strMaxQueryLength_prefix - strMinQueryLength_prefix + 1) + (strMaxQueryLength_suffix - strMinQueryLength_suffix + 1)
  5. Para campos com índice para query substring:

    T = 1 + (strMaxQueryLength - strMinQueryLength + 1) * (2 * strMaxLength + 2 - strMaxQueryLength - strMinQueryLength) / 2

    Por exemplo, para um campo com strMinQueryLength 2, strMaxQueryLength 6 e strMaxLength 50:

    T = 1 + (6 - 2 + 1) * (2 * 50 + 2 - 6 - 2) / 2 = 1 + 5 * 94 / 2 = 236
2

Usando a contagem de tags da etapa anterior, calcule o armazenamento que um único documento exige para o campo, em bytes. Use as seguintes fórmulas, onde v é o comprimento médio em bytes dos valores não criptografados do campo.

Para campos não indexados, use:

document storage = 71 + ceil((v+6)/16) * 16

Para outros campos, use:

document storage = 1.2 * (255 * T + 122 + ceil((v + 6) / 16) * 16)

Verifique se os documento permanecem dentro do limite de tamanho. Valores criptografados e seus metadados contam para o limite de 16 MB de Tamanho do Documento BSON.

3

Some o valor de T de cada campo em T_Total. Em seguida, usando N, o número de documento que contêm campo criptografado, calcule o seguinte, em bytes:

index storage = 1.2 * (67 * T_Total + 640)
total disk storage = N * (index storage + sum of the document storage per field)
memory = N * (52 * T_Total + 17)

Converta o armazenamento total em disco para GB dividindo por 1,000,000,000. Converta a memória para GiB dividindo por 1,073,741,824.

4

Adicione o impacto estimado de disco e memória ao tamanho atual da sua coleção e, em seguida, compare os totais com o armazenamento e a memória disponíveis na sua implantação.

  • Se a sua implantação atender aos requisitos de armazenamento e memória, continue em Criar um esquema de criptografia.

  • Se a sua implantação não atender aos requisitos, considere as seguintes opções:

    • substitua query de substring por query de prefixo ou sufixo

    • reduza strMaxLength em campos com índice para query de substring

    • restringir a faixa entre strMinQueryLength e strMaxQueryLength em campo com índice para query de substring

Para obter detalhes sobre as opções de configuração de query em campos criptografados, consulte a Referência de campo.

Para configurar campos criptografados e tipos de query, consulte Criar um esquema de criptografia.

Para aprender como cada opção de configuração afeta a segurança e o desempenho, consulte Configurar campos criptografados para pesquisa e armazenamento ideais.