共享目录和共享数据库引擎
仅在 ClickHouse Cloud(以及官方一方合作云服务)中提供
Shared Catalog 是一个云原生组件,负责在 ClickHouse Cloud 中跨副本复制使用无状态引擎的数据库和表的元数据与 DDL 操作。它为这些对象提供一致、集中的状态管理,即使在动态或部分离线的环境中也能确保元数据的一致性。
Shared Catalog 不会复制表中的数据本身,而是通过复制 DDL 查询和元数据来确保所有副本对数据库和表定义拥有一致的视图。
它支持以下数据库引擎的复制:
- Shared
- PostgreSQL
- MySQL
- DataLakeCatalog
架构与元数据存储
Shared Catalog 中的所有元数据和 DDL 查询历史记录都集中存储在 ZooKeeper 中,本地磁盘上不会持久化任何数据。此架构可确保:
- 所有副本之间状态一致
- 计算节点保持无状态
- 副本能够快速、可靠地启动和初始化
共享数据库引擎
共享数据库引擎(Shared database engine) 与 Shared Catalog 协同工作,用于管理其中的表使用诸如 SharedMergeTree 之类无状态表引擎(stateless table engines) 的数据库。这些表引擎不会将持久状态写入磁盘,并且兼容动态计算环境。
共享数据库引擎在 Replicated database engine 的基础上进行了扩展和改进,同时提供了额外的保障和运维优势。
主要优势
-
原子执行 CREATE TABLE ... AS SELECT 表的创建和数据插入以原子方式执行——要么整个操作完成,要么表根本不会被创建。
-
在数据库之间执行 RENAME TABLE 支持在数据库之间以原子方式移动表:
-
使用 UNDROP TABLE 的自动表恢复 被删除的表会默认保留 8 小时,可以恢复:
保留时间窗口可以通过服务器设置进行配置。
-
改进的计算节点间解耦 与需要所有副本在线才能处理 DROP 查询的 Replicated database engine 不同,Shared Catalog 执行集中式元数据删除。这使得即使某些副本离线,操作也能成功。
-
自动元数据复制 Shared Catalog 确保数据库定义在启动时会自动复制到所有服务器。运维人员无需在新实例上手动配置或同步元数据。
-
集中、版本化的元数据状态 Shared Catalog 在 ZooKeeper 中存储单一事实来源(single source of truth)。当副本启动时,它会获取最新状态并应用差异以实现一致性。在查询执行期间,系统可以等待其他副本至少达到所需的元数据版本,以确保正确性。
在 ClickHouse Cloud 中的使用
对于终端用户而言,使用 Shared Catalog 和 Shared 数据库引擎无需任何额外配置。数据库的创建方式与以往完全相同:
ClickHouse Cloud 会自动为数据库分配 Shared 数据库引擎。在此类数据库中创建的、使用无状态引擎的任意表,都将自动具备 Shared Catalog 的复制与协调能力。
概要
Shared Catalog 和 Shared 数据库引擎具备以下特性:
- 为无状态引擎提供可靠、自动的元数据复制
- 无本地元数据持久化的无状态计算
- 针对复杂 DDL 的原子性操作
- 对弹性、短暂存在或部分离线计算环境的更好支持
- 为 ClickHouse Cloud 用户提供无缝使用体验
这些能力使 Shared Catalog 成为在 ClickHouse Cloud 中实现可扩展、云原生元数据管理的基础。