Citus 安装使用, 概念性的描述

Citus postgres database

Posted by gomyck on February 2, 2023

citus 是一个高性能, 提供分布式表存储结构的 pg 数据库扩展

citus 可以横向扩展 pg, 使用分布式表, 引用表, 分布式 sql 查询引擎, 使查询动作在多个服务器上并行运行, 极大提高了响应时间, 即使是数据密集型的应用程序也是如此

何时使用 citus

实时分析: Citus支持对大型数据集的实时查询。这些查询通常发生在快速增长的事件系统或具有时间序列数据的系统中。

1
2
3
4
5
6
7
亚秒级响应时间的分析仪表板

关于展开事件的探索性查询

大型数据集归档和报告

使用漏斗、分段和队列查询分析会话

citus所有的特性都与它并行化的查询特性相关, 由于使用分布式 sql 查询引擎, 能够高效的利用物理多核的优势, 打破单机存在的性能瓶颈, 从而提高系统的吞吐能力和抗并发能力

如何使用

按照官方 github 提示, 逐步进行 docker 的容器化安装

https://github.com/citusdata/citus

查看官方文档来操作 citus

https://docs.citusdata.com/en/v11.1/develop/api_udf.html#create-distributed-table

概念性解读

citus11 之后, 已经完全开源, 因其商业模式的转换, 原付费的商用化功能也都免费开源给所有用户, 包括非阻塞数据重平衡(必须有主键支持), 多租户等特性

citus 提供了数据分片的概念, 但是高可用的保障还是需要 pg 自身成熟的热备方案, 根据自身在 pg 数据处理引擎所处的扩展位置, 在数据落地之前, 根据 主键进行 hash 运算, 均匀的分布在分片表中, citus在处理批数据插入时是具备优势的, 因为其可以并行的进行数据插入动作

citus 在进行数据删除和更新时, 也是并行执行的, 在对低性能服务器整合上, citus 的分布式架构优势带来的性能提升会非常明显

在查询时, 根据逆向 hash 算法, 对范围覆盖的表进行并行查询, 并合并结果集, 充分利用多核优势, 提高数据提取速度

citus 高可用的方案

在早期版本中, citus 可以指定副本数量, 来使分片表保证预期的数量在工作节点上, 当某个节点不可用时, 协调节点可以监测到并把查询请求转发到备用工作节点上

但shard_replication_factor大于一的情况需要 append-only 的模式支持, 在最初阶段, citus 默认数据的插入是稳定的, 不会删除和修改的, 而且考虑到节点的故障, 带来的更新 问题, 后续改变了这个配置项从 2 变为 1, 也就是默认不创建副本

新版的 citus 高可用推荐使用 pg 默认的热备方式进行数据高可用的实现方案