ClickHouse Cloud에서 Memory 테이블 엔진을 사용할 때 데이터는 설계상 모든 노드에 복제되지 않습니다. 모든 쿼리가 동일한 노드로 라우팅되고 Memory 테이블 엔진이 예상대로 동작하도록 보장하려면 다음 중 하나를 수행할 수 있습니다:
- 모든 작업을 동일한 세션에서 실행하세요
- TCP 또는 네이티브 인터페이스(고정 연결 지원 활성화)를 사용하는 클라이언트를 사용하세요. 예: clickhouse-client
PREWHERE를 지원하며, optimize_move_to_prewhere 설정으로 제어되는 WHERE 조건의 자동 이동도 지원합니다. 먼저 조건에 사용된 컬럼만 읽고, 나머지 컬럼은 조건을 통과한 행이 있는 블록에 대해서만, 그것도 통과한 행에 한해서만 읽습니다. 여러 조건의 논리곱(AND)은 enable_multiple_prewhere_read_steps 설정을 사용한 MergeTree와 마찬가지로 단계적으로 평가됩니다. 즉, 이후 각 조건의 컬럼은 앞선 조건을 모두 통과한 행에 대해서만 읽습니다. 이 방식은 compress = true와 함께 사용할 때 특히 효과적입니다. 선택도가 높은 조건에서는 대부분의 컬럼이 아예 압축 해제되지 않기 때문입니다. 필터가 없는 SELECT count() FROM table은 데이터를 읽지 않고 메타데이터만으로 처리됩니다.
최대 성능(초당 10GB 초과)은 단순한 쿼리에서 달성됩니다. 이는 디스크에서 읽거나, 데이터를 압축 해제하거나 역직렬화할 필요가 없기 때문입니다. (다만 많은 경우 MergeTree 엔진의 성능도 거의 그에 가깝게 높습니다.)
서버를 다시 시작하면 테이블의 데이터는 사라지고 테이블은 비게 됩니다.
일반적으로 이 테이블 엔진을 사용할 타당성은 크지 않습니다. 그러나 테스트용으로는 사용할 수 있으며, 비교적 적은 수의 행(대략 최대 100,000,000개)에서 최대 속도가 필요한 작업에도 사용할 수 있습니다.
Memory 엔진은 시스템에서 외부 쿼리 데이터용 임시 테이블(「쿼리 처리를 위한 외부 데이터」 섹션 참조)과 GLOBAL IN 구현(「IN 연산자」 섹션 참조)에 사용됩니다.
Memory 엔진 테이블 크기를 제한하기 위해 상한과 하한을 지정할 수 있으며, 이를 통해 사실상 순환 버퍼처럼 동작하게 할 수 있습니다(엔진 매개변수 참조).
엔진 매개변수
min_bytes_to_keep— 메모리 테이블에 크기 제한이 설정된 경우 유지할 최소 바이트 수입니다.- 기본값:
0 max_bytes_to_keep와 함께 사용해야 합니다
- 기본값:
max_bytes_to_keep— 메모리 테이블에서 유지할 최대 바이트 수입니다. 각 삽입 시 가장 오래된 행이 삭제되며(즉, 순환 버퍼), 큰 블록을 추가할 때 제거 대상인 가장 오래된 행 배치가min_bytes_to_keep제한 아래로 내려가면 실제 최대 바이트 수가 명시된 제한을 초과할 수 있습니다.- 기본값:
0
- 기본값:
min_rows_to_keep— 메모리 테이블에 크기 제한이 설정된 경우 유지할 최소 행 수입니다.- 기본값:
0 max_rows_to_keep와 함께 사용해야 합니다
- 기본값:
max_rows_to_keep— 메모리 테이블에서 유지할 최대 행 수입니다. 각 삽입 시 가장 오래된 행이 삭제되며(즉, 순환 버퍼), 큰 블록을 추가할 때 제거 대상인 가장 오래된 행 배치가min_rows_to_keep제한 아래로 내려가면 실제 최대 행 수가 명시된 제한을 초과할 수 있습니다.- 기본값:
0
- 기본값:
compress- 메모리에서 데이터를 압축할지 여부입니다.- 기본값:
false
- 기본값:
사용법
설정 초기화bytes 및 rows 제한 매개변수는 동시에 설정할 수 있지만, 이 경우 max와 min 중 더 낮은 한도가 적용됩니다.