架构图
master: 主节点,一般称作协调器,存储数据分布相关的元数据信息
worker: 存储分片表的分片数据。可以为分片表的每一个分片创建多个副本
客户端访问数据时只和master节点交互。master收到请求后,会生成分布式执行计划,并将各个子任务下发到相应的worker节点执行,之后由master收集各worker的结果并处理后返回最终结果给客户端。
功能 PostgreSQL兼容性citus是基于PostgreSQL扩展实现的分布式数据库,基本兼容其SQL处理能力、管理工具等。
分布式事务citus从7.1版本开始支持分布式事务,使用2pc保证数据的最终一致性。
使用copy命令导入数据时,可以通过配置修改其提交协议(2pc或1pc),默认2pc。
表类型 分片表主要解决的是大表的水平扩容问题,分片表的分片元数据信息存储在master节点,其数据被打散存储到多个worker节点。
参考表数据量不是特别大又经常需要和分片表Join的维表可以采用一种特殊的分片策略,只分1个片且每个Worker上部署1个副本,这样的表叫做“参考表”。
本地表没有经过分片的PostgreSQL原生的表
数据分片方式append: 追加分片,将分片列值连续的数据写到同一个分片,比如时序数据,将每个连续的时间段的数据写到同一个分片。
hash: hash分片,对分片列的值进行hash, 写入对应的分片。
限制主键:分片表的主键必须是hash分片的分片列
insert into ...select from...:分片表必须亲和(分片数,副本数,分片字段,分片位置完全相同)且是hash分片
join: 只支持 亲和分片表之间的join 、分片表与参考报之间的join
不支持:
相关子查询递归CTE表样本SELECT ... FOR UPDATE分组集PARTITION BY中不包括分发列的窗口函数更多限制可参考:https://groups.google.com/forum/#!topic/citus-users/eQAeFAOxaW0
性能 官方测试数据插入性能:
更新性能:
第三方测试数据:
citus性能:https://yq.aliyun.com/articles/641516?spm=a2c4e.11153940.blogcont647370.15.33576b30USEXUt
citus/PG性能测试对比:https://blog.csdn.net/fm0517/article/details/79398959