KeeperMap 테이블 엔진
이 엔진을 사용하면 Keeper/ZooKeeper 클러스터를 선형화 가능한 쓰기와 순차적 일관성이 보장되는 읽기를 제공하는 일관된 키-값 저장소로 사용할 수 있습니다.
KeeperMap 스토리지 엔진을 활성화하려면 <keeper_map_path_prefix> 설정을 사용하여 테이블이 저장될 ZooKeeper 경로를 지정해야 합니다.
예를 들어:
여기서 path에는 다른 임의의 유효한 ZooKeeper 경로를 사용할 수 있습니다.
테이블 생성
Engine parameters:
root_path-table_name이 저장될 ZooKeeper 경로입니다. 이 경로에는<keeper_map_path_prefix>설정에 정의된 접두사가 포함되면 안 되며, 접두사는 자동으로root_path에 추가됩니다. 또한auxiliary_zookeeper_cluster_name:/some/path형식도 지원되며, 여기서auxiliary_zookeeper_cluster는<auxiliary_zookeepers>설정 안에 정의된 ZooKeeper 클러스터입니다. 기본적으로<zookeeper>설정 안에 정의된 ZooKeeper 클러스터가 사용됩니다.keys_limit- 테이블에 허용되는 키의 개수입니다. 이 한도는 소프트 리밋이므로, 일부 엣지 케이스에서는 더 많은 키가 테이블에 저장될 수 있습니다.primary_key_name– 컬럼 목록에 포함된 임의의 컬럼 이름입니다.primary key는 반드시 지정해야 하며, 기본 키로는 하나의 컬럼만 지원합니다. 기본 키는 ZooKeeper 안에서node name으로 바이너리 형식으로 직렬화됩니다.- 기본 키 이외의 컬럼들은 해당 순서대로 바이너리로 직렬화되며, 직렬화된 키로 정의되는 결과 노드의 값으로 저장됩니다.
- 키에 대한
equals또는in필터링이 있는 쿼리는Keeper에서 다중 키 조회로 최적화되며, 그 외에는 모든 값을 가져옵니다.
예시:
사용하여
각 값은 (v1, v2, v3)의 바이너리 직렬화 형태이며, Keeper 안의 /keeper_map_tables/keeper_map_table/data/serialized_key에 저장됩니다.
또한 키 개수에는 4개라는 소프트 한도(soft limit)가 있습니다.
동일한 ZooKeeper 경로에 여러 테이블이 생성되면, 이를 사용하는 테이블이 최소 1개라도 존재하는 동안 값이 유지됩니다.
따라서 테이블을 생성할 때 ON CLUSTER 절을 사용하여 여러 ClickHouse 인스턴스 간에 데이터를 공유할 수 있습니다.
물론 서로 관련 없는 ClickHouse 인스턴스에서도 동일한 경로로 CREATE TABLE을 수동으로 실행하여 동일한 데이터 공유 효과를 얻을 수 있습니다.
지원되는 연산
Insert
새 행이 KeeperMap에 삽입될 때 키가 존재하지 않으면 해당 키에 대한 새 항목이 생성됩니다.
키가 존재하고 keeper_map_strict_mode SETTING이 true로 설정되어 있으면 예외가 발생합니다. 그렇지 않으면 해당 키의 값이 덮어쓰여집니다.
예시:
삭제
행은 DELETE 쿼리 또는 TRUNCATE를 사용하여 삭제할 수 있습니다.
키가 존재하고 keeper_map_strict_mode 설정이 true로 되어 있는 경우, 조회 및 삭제 작업은 원자적으로 실행될 수 있을 때에만 성공합니다.
업데이트
값은 ALTER TABLE 쿼리를 사용하여 업데이트할 수 있습니다. 기본 키는 업데이트할 수 없습니다.
keeper_map_strict_mode 설정 값이 true이면, 데이터 가져오기와 업데이트는 원자적으로 실행되는 경우에만 성공합니다.