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.
Sobre esta tarefa
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.
Crescimento de tag por tipo de query
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 |
|---|---|---|---|---|---|
| 2 | 3 | 4 | 5 | 6 |
| 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.
Antes de começar
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.
Passos
Calcule a contagem de tags no pior cenário 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. 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.
Para campos não indexados,
T = 0.Para campos índice para queries de igualdade,
T = 1.Para campos com índice para queries
prefixousuffix:T = 1 + (strMaxQueryLength - strMinQueryLength + 1)Para campos com índice para queries de
prefixesuffix:T = 1 + (strMaxQueryLength_prefix - strMinQueryLength_prefix + 1) + (strMaxQueryLength_suffix - strMinQueryLength_suffix + 1)Para campos com índice para query
substring:T = 1 + (strMaxQueryLength - strMinQueryLength + 1) * (2 * strMaxLength + 2 - strMaxQueryLength - strMinQueryLength) / 2Por 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 documentos 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, 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) * 16Para 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.
Calcule o armazenamento de índice, o armazenamento total em disco e a memória.
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.
Compare as estimativas com a capacidade da sua implantação.
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
strMaxLengthem campos com índice para query de substringrestringir a faixa entre
strMinQueryLengthestrMaxQueryLengthem 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.
Saiba mais
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.