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