Criptografar um campo com Queryable Encryption e habilitar queries em campos criptografados aumentam o armazenamento exigido por uma collection. Estime esses aumentos antes de finalizar o esquema de criptografia, pois a alteração dos aumentos exige que você recrie a collection.
Você pode calcular essas estimativas para sua collection com a habilidade do agente mongodb-qe-size-estimation, disponível diretamente no repositório público, ou a partir dos plug-ins mongodb ou mongodb-atlas.
Para obter informações mais detalhadas sobre Queryable Encryption, consulte o whitepaper Queryable Encryption .
Sobre esta tarefa
O MongoDB indexa cada campo criptografado consultável gerando tags, T, que armazena nas coleções de metadados criadas para cada coleção criptografada. O armazenamento cresce 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.
Os campos não consultáveis ("não indexados") não geram tags,
T=0.Os campos indexados para queries de igualdade geram uma marcação,
T=1.Os campos indexados para consultas de prefixo ou sufixo geram uma marcação inicial e, em seguida, crescem linearmente com a diferença entre o comprimento máximo e mínimo da consulta,
T = 1 + (strMaxQueryLength - strMinQueryLength + 1).Os campos indexados para consultas de prefixo e sufixo aumentam linearmente com a diferença entre o comprimento máximo e mínimo da consulta de prefixo e sufixo,
T = 1 + (strMaxQueryLength_prefix - strMinQueryLength_prefix + 1) + (strMaxQueryLength_suffix - strMinQueryLength_suffix + 1)Os campos indexados para queries de substring geram a maioria das tags, usando a fórmula
T = 1 + (strMaxQueryLength - strMinQueryLength + 1) * (2 * strMaxLength + 2 - strMaxQueryLength - strMinQueryLength) / 2.
A ativação da Queryable Encryption em sua coleção provavelmente terá um armazenamento em disco e um impacto na memória menores do que o calculado. Essas fórmulas protegem contra o pior caso.
Importante
Cada gravação de um valor de campo criptografado também grava dois documentos de metadados por tag, um no SEC e um no ECOC, portanto, escreva escalas de taxa de transferência com a contagem de tags da mesma maneira que o armazenamento.
Desenvolvimento de tags por tipo de query
Para consultas de prefixo e sufixo, somente a diferença entre o comprimento máximo e mínimo de consulta contribui para o crescimento da tag. Para queries de substring, todos os parâmetros contribuem e o comprimento pesquisável é o maior colaborador. A tabela a seguir compara quantas marcações um campo de string gera à medida que strMaxQueryLength aumenta, presumindo um strMaxLength de 50 e um strMinQueryLength de 2. As queries de substring impõem um máximo de strMaxQueryLength de 6, portanto, esta tabela compara apenas valores de 2 a 6, apesar das queries de prefixo e sufixo permitirem valores mais altos.
strMaxQueryLength | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| 2 | 3 | 4 | 5 | 6 |
| 50 | 98 | 145 | 191 | 236 |
Devido a esse crescimento, evite ativar queries de substring em mais de um campo. Ative-os somente se as consultas de prefixo e sufixo não atenderem às suas necessidades e a coleção contiver menos de 50 milhões de documentos.
Antes de começar
Certifique-se de que tem as seguintes informações:
O número de documentos na collection que contêm campos criptografados.
O comprimento médio de 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.
Passos
Calcule a contagem de tags do pior caso para cada campo e tipo de query.
Para cada campo criptografado, calcule T, o limite superior do número de tags que um único valor gera. Calcular 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.
Para campos não indexados,
T = 0.Para campos indexados para queries de igualdade,
T = 1.Para campos indexados para queries
prefixousuffix:T = 1 + (strMaxQueryLength - strMinQueryLength + 1) Para campos indexados para queries
prefixesuffix:T = 1 + (strMaxQueryLength_prefix - strMinQueryLength_prefix + 1) + (strMaxQueryLength_suffix - strMinQueryLength_suffix + 1) Para campos indexados para queries do
substring:T = 1 + (strMaxQueryLength - strMinQueryLength + 1) * (2 * strMaxLength + 2 - strMaxQueryLength - strMinQueryLength) / 2 Por exemplo, para um campo com
strMinQueryLength2,strMaxQueryLength6 estrMaxLength50:T = 1 + (6 - 2 + 1) * (2 * 50 + 2 - 6 - 2) / 2 = 1 + 5 * 94 / 2 = 236
Calcule o armazenamento de documento para cada campo.
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, em que v é o comprimento médio de 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 documentos permanecem dentro do limite de tamanho. Os valores criptografados e seus metadados contam para o limite de tamanho do documento BSON MB 16.
Calcule o armazenamento de índice, o armazenamento total em disco e a memória.
Soma o valor T de cada campo em T_Total. Em seguida, usando N, o número de documentos que contêm campos criptografados, 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 memória para GiB dividindo por 1,073,741,824.
Compare as estimativas com a capacidade do seu sistema.
Adicione o impacto estimado de disco e memória ao tamanho atual da sua collection e compare os totais com o armazenamento e a memória disponíveis em sua implantação.
Se seu sistema atender aos requisitos de armazenamento e memória, continue para Criar um esquema de criptografia.
Se sua implantação não atender aos requisitos, considere as seguintes opções:
substituir queries de substrings por queries de prefixo ou sufixo
reduzir
strMaxLengthem campos indexados para queries de substringrestringir o intervalo entre
strMinQueryLengthestrMaxQueryLengthem campos indexados para queries de substring
Para obter detalhes sobre as opções de configuração de query em campos criptografados, consulte Referência de campo.
Saiba mais
Para configurar campos criptografados e tipos de query, consulte Criar um esquema de criptografia.
Para saber como cada opção de configuração afeta a segurança e o desempenho, consulte Configurar campos criptografados para otimização de pesquisa e armazenamento.