Queryable Encryption 으로 필드 암호화하고 암호화됨 필드에 대한 쿼리를 활성화하면 컬렉션 에 필요한 저장 늘어납니다. 증가분을 변경하려면 컬렉션 다시 생성해야 하므로 암호화 스키마 확정하기 전에 이러한 증가분을 예상해 보세요.
공개 리포지토리 또는 mongodb 또는 mongodb-atlas 플러그인에서 직접 사용할 수 있는 mongodb-qe-size-estimation 에이전트 스킬 사용하여 컬렉션 에 대한 이러한 추정치를 계산할 수 있습니다.
Queryable Encryption 에 대한 자세한 내용은 Queryable Encryption 백서를 참조하세요.
이 작업에 대하여
MongoDB 태그 T를 생성하여 쿼리 가능한 각 암호화됨 필드 인덱싱하고, 암호화됨 모든 컬렉션 에 대해 생성하는 메타데이터 컬렉션에 이 태그를 저장합니다. 각 값이 생성하는 태그 수에 따라 스토리지가 증가합니다. 아래 공식은 값이 생성할 수 있는 최대 태그 수에 대한 것입니다.
쿼리할 수 없는('인덱싱되지 않은') 필드는 태그를 생성하지 않습니다(
T=0).동일성 쿼리에 대해 인덱싱된 필드는
T=1라는 하나의 태그를 지정하다 생성합니다.접두사 또는 접미사 쿼리에 대해 인덱싱된 필드는 하나의 초기 태그를 지정하다 생성한 다음, 쿼리의 최대 길이와 최소 길이의 차이인
T = 1 + (strMaxQueryLength - strMinQueryLength + 1)에 따라 선형적으로 증가합니다.접두사 및 접미사 쿼리 모두에 대해 인덱싱된 필드는 접두사 및 접미사 쿼리의 최대 및 최소 길이 간의 차이에 따라 선형적으로 증가합니다.
T = 1 + (strMaxQueryLength_prefix - strMinQueryLength_prefix + 1) + (strMaxQueryLength_suffix - strMinQueryLength_suffix + 1)하위 문자열 쿼리에 대해 인덱싱된 필드는
T = 1 + (strMaxQueryLength - strMinQueryLength + 1) * (2 * strMaxLength + 2 - strMaxQueryLength - strMinQueryLength) / 2수식을 사용하여 가장 많은 태그를 생성합니다.
컬렉션 에서 Queryable Encryption 활성화하면 디스크 저장 및 메모리에 영향 계산된 것보다 적을 가능성이 높습니다. 이 공식은 최악의 경우를 방지합니다.
중요
암호화됨 필드 값을 쓰기 (write) 마다 태그를 지정하다 당 2개의 메타데이터 문서(1개는 ESC, 다른 하나는 ECOC에 기록되므로 쓰기 (write) 처리량 은 저장 와 동일한 방식으로 태그를 지정하다 수에 따라 확장됩니다.
쿼리 유형별 태그 증가
접두사 및 접미사 쿼리의 경우 최대 쿼리 길이와 최소 쿼리 길이의 차이만 태그를 지정하다 증가에 기여합니다. 하위 문자열 쿼리의 경우 모든 매개변수가 영향을 미치며, 검색 가능한 길이가 가장 큰 영향을 미칩니다. 다음 표는 strMaxLength이 50이고 strMinQueryLength가 2라고 가정하고, strMaxQueryLength이 증가함에 따라 문자열 필드 생성하는 태그 수를 비교합니다. 하위 문자열 쿼리는 최대 strMaxQueryLength의 6를 시행하다 , 이 표는 접두사 및 접미사 쿼리에서 더 높은 값을 허용하더라도 2부터 6까지의 값만 비교합니다.
strMaxQueryLength | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| 2 | 3 | 4 | 5 | 6 |
| 50 | 98 | 145 | 191 | 236 |
이러한 성장 때문에 둘 이상의 필드 에서 하위 문자열 쿼리를 활성화하지 않도록 합니다. 접두사 및 접미사 쿼리가 요구 사항을 충족할 수 없고 컬렉션 에 포함된 문서가 50 백만 미만인 경우에만 활성화합니다.
시작하기 전에
다음 정보가 있는지 확인합니다.
암호화됨 필드가 포함된 컬렉션 의 문서 수입니다.
암호화됨 각 필드의 일반 텍스트 값에 대한 평균 바이트 길이입니다.
암호화하려는 필드 수와 암호화됨 쿼리 구성입니다.
단계
각 필드 및 쿼리 유형에 대한 최악의 태그를 지정하다 수를 계산합니다.
암호화됨 각 필드 에 대해 단일 값이 생성하는 태그 수의 상한인 T를 계산합니다. 필드 당 하나의 T 계산 : 접두사 및 접미사 쿼리 모두에 대해 인덱싱된 필드 두 쿼리 유형을 결합한 단일 수식을 사용합니다.
인덱싱되지 않은 필드의 경우
T = 0입니다.동일성 쿼리에 대해 인덱싱된 필드의 경우
T = 1입니다.prefix또는suffix쿼리에 대해 인덱싱된 필드의 경우:T = 1 + (strMaxQueryLength - strMinQueryLength + 1) prefix및suffix쿼리 모두에 대해 인덱싱된 필드의 경우:T = 1 + (strMaxQueryLength_prefix - strMinQueryLength_prefix + 1) + (strMaxQueryLength_suffix - strMinQueryLength_suffix + 1) substring쿼리에 대해 인덱싱된 필드의 경우:T = 1 + (strMaxQueryLength - strMinQueryLength + 1) * (2 * strMaxLength + 2 - strMaxQueryLength - strMinQueryLength) / 2 예시 들어
strMinQueryLength2,strMaxQueryLength6 및strMaxLength50가 있는 필드 의 경우:T = 1 + (6 - 2 + 1) * (2 * 50 + 2 - 6 - 2) / 2 = 1 + 5 * 94 / 2 = 236
각 필드 의 문서 저장 계산합니다.
이전 단계의 태그를 지정하다 수를 사용하여 단일 문서 필드 에 필요한 저장 을 바이트 단위로 계산합니다. 다음 공식을 사용하며, 여기서 v은 필드 암호화되지 않은 값의 평균 바이트 길이입니다.
인덱싱되지 않은 필드의 경우 다음을 사용합니다.
document storage = 71 + ceil((v+6)/16) * 16
다른 필드의 경우 다음을 사용합니다.
document storage = 1.2 * (255 * T + 122 + ceil((v + 6) / 16) * 16)
문서가 크기 제한 내에 있는지 확인합니다. 암호화된 값과 해당 메타데이터 는 16MB BSON 문서 크기 제한에 포함됩니다.
인덱스 저장, 총 디스크 저장 및 메모리를 계산합니다.
모든 필드 의 T 값을 T_Total로 합산합니다. 그런 다음 암호화됨 필드가 포함된 문서 수 N를 사용하여 다음을 바이트 단위로 계산합니다.
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)
1,000,000,000로 나누어 총 디스크 저장 GB 로 변환합니다. 1,073,741,824로 나누어 메모리를GiB로 변환합니다.
배포서버의 용량 과 추정치를 비교합니다.
현재 컬렉션 크기에 예상 디스크 및 메모리 영향 추가한 다음 배포서버 에서 사용 가능한 저장 및 메모리와 합계를 비교합니다.
배포서버 가 저장 및 메모리 요구 사항을 충족하는 경우 암호화 스키마 생성을 계속 진행합니다.
배포서버 요구 사항을 충족하지 않는 경우 다음 옵션을 고려하세요.
하위 문자열 쿼리를 접두사 또는 접미사 쿼리로 바꾸기
하위 문자열 쿼리에 대해 인덱싱된 필드에서
strMaxLength줄이기하위 문자열 쿼리에 대해 인덱싱된 필드에서
strMinQueryLength와strMaxQueryLength사이의 범위 좁히기
암호화됨 필드의 쿼리 구성 옵션에 대한 자세한 내용은 필드 참조를 확인하세요.
자세히 알아보기
암호화됨 필드 및 쿼리 유형을 구성하려면 암호화 스키마 생성을 참조하세요.
각 구성 옵션이 보안 및 성능에 미치는 영향을 학습 보려면 최적의 검색 및 저장을 위해 암호화된 필드 구성을 참조하세요.