内容提要
Tembo使用Postgres的外部数据包装器和其他扩展构建客户数据仓库,集中多个来源的数据并保持更新。他们开源了工具并提供了Tembo云上的数据仓库堆栈。
延伸解读
为何选择Postgres扩展而非专用工具
Tembo没有引入Airflow、dbt等外部工具,而是用Postgres扩展构建数据仓库。作者指出,每引入一个新工具都会增加学习、维护和调试成本,而扩展像安装模块一样轻量。这种方案适合希望减少技术栈复杂度的团队,但前提是团队已熟悉Postgres生态。
FDW如何连接异构数据源
通过外部数据包装器(FDW),Tembo将Postgres、Prometheus和Clerk.dev的数据映射为外部表。文章以clerk_fdw为例,展示了创建扩展、服务器和外部表的步骤。对于没有现成FDW的数据源,他们用Rust框架自行开发,这为需要集成自定义数据源的团队提供了参考。
pg_cron与pg_partman的运维价值
pg_cron负责定期刷新数据,例如每5分钟更新集群元数据,保持仓库实时性。pg_partman则自动管理按天分区,并设置30天保留策略,通过删除分区快速回收存储,避免大量删除导致膨胀。这两个扩展共同解决了数据新鲜度和查询性能问题,且配置简单。
开源与云部署降低采用门槛
Tembo将数据仓库堆栈开源,并支持在Tembo Cloud上一键部署。这意味着其他团队可以复用其FDW、调度和分区方案,无需从零搭建。文章提到新工程师能快速上手,利益相关者直接获得仪表板,说明该方案在易维护性和团队协作上有实际优势。
Q&A
Tembo 为什么选择完全基于 Postgres 构建客户数据仓库?
Tembo 希望避免引入 Airflow、dbt、Fivetran 等外部工具带来的认知负担、维护成本和调试复杂性。他们决定使用 Postgres 扩展(如外部数据包装器)来简化数据仓库的构建,因为扩展对开发者来说更自然,像安装模块一样轻量易管理。
Tembo 的数据仓库需要从哪些数据源拉取数据?
Tembo 的数据仓库需要从三个主要来源拉取数据:Postgres(存储客户实例的元数据和消息队列)、Prometheus(存储使用指标如 CPU 和内存使用量)以及 Clerk.dev(存储用户元数据和组织信息)。
Tembo 如何使用外部数据包装器(FDW)连接外部数据源?
Tembo 使用 postgres_fdw 连接控制平面的 Postgres,并自行开发了 clerk_fdw 和 prometheus_fdw 来连接 Clerk 和 Prometheus。使用 FDW 的步骤包括:创建扩展、创建外部数据包装器对象、创建服务器对象(配置连接选项如 API 密钥)、创建外部表映射数据。
Tembo 如何确保数据仓库中的数据保持最新?
Tembo 使用 pg_cron 扩展来定期刷新数据。他们创建刷新函数(如 refresh_clusters),然后通过 pg_cron 调度该函数按计划执行(例如每 5 分钟一次),从而保持数据仓库与源数据同步。
Tembo 如何优化大型表(如指标数据)的查询性能并管理存储?
Tembo 使用 Postgres 的原生分区功能,按天对大型表(如指标数据)进行分区,这样查询时只需扫描相关分区,提升性能。同时,他们使用 pg_partman 扩展自动管理分区,并设置保留策略自动删除超过 30 天的旧分区,以回收存储并避免表膨胀。
Tembo 的数据仓库堆栈是否开源?如何部署?
是的,Tembo 的数据仓库堆栈是开源的,可以在 Tembo Cloud 上一键部署。用户也可以使用他们的 Kubernetes Operator 自行托管。