1、Citus插件实现原理解读阿里云PolarDB PG数据库团队|陈佳昕(步真)什什么么是是CitusuCitus是一款基于PostgreSQL数据库的开源插件,用于将单集群的PG数据库横向扩展为多集群的分布式PG数据库。其提供了分布式数据库常用的两种表类型:u分布表u复制表u主要作用:u通过分布式多路路由,提升数据库事务处理能力(OLTP)u通过并行化处理机制,提升数据库分析处理能力(OLAP)u来源:由CitusData公司研发,后被微软公司收购,保持跟进最新的开源PostgreSQL社区分支功能特性。Citus的的4种种目目标标业业务务场场景景u多租户场景(Multi-tenant)背景:
2、传统的基于SaaS云服务应用场景下,应用程序可能根据不同的租户数据,存放在不同的数据库下,从而实现租户间数据隔离。问题:成千上万的库之间的跨库访问,以及多个库基础设施组件的维护会带来极大的成本问题和管理问题。Citus的的4种种目目标标业业务务场场景景u多租户场景(Multi-tenant)Citus应对方案:基于租户id进行分片,相同分片的数据可以定向到同一节点上,绝大部分SQL都可以路由到指定单节点执行,能够继承PostgreSQL的查询能力,扩展性强。Citus的的4种种目目标标业业务务场场景景u实时分析(Real-time Analytics)背景:大数据量下毫秒级响应需求查询,额外伴
3、随数据表的更新(TP+AP场景)。PG数据库的优势:特有的堆表格式+MVCC机制保证了多并发读写的高性能 支持COPY,可实现数据批量写特有的数据类型和索引类型(array,json和自定义数据类型)PG数据库的不足:单库承载的数据容量有限早期不支持并行查询,查询只能单进程进行。Citus应对方案:Parallel Bulk Insert,Parallel Insert.Select,Parallel Select等并行功能Citus的的4种种目目标标业业务务场场景景u高性能数据处理(High Performance CRUD)PG数据库的不足:缺乏undo机制使得数据更新会带来数据膨胀,au
4、to vacuum使得高并发下数据库压力大大量连接会话引入内存过多,极易打满单库机器内存上限Citus应对方案:数据分片打散,提高硬件资源利用率。支持并行化auto vacuum。Citus的的4种种目目标标业业务务场场景景u数据仓库(Data warehouse)Citus应对方案:支持并行分布式查询支持列存引擎。Citus的的实实现现架架构构uSQL ObjectsCREATE TABLE pg_dist_node();CREATE TABLE pg_dist_partition();CREATE FUNCTION citus_add_node()RETURNS void LANGUAGE
5、 cAS$libdir/citus,$function$citus_add_node$function$;CREATE FUNCTION create_distributed_table()RETURNS void LANGUAGE cAS$libdir/citus,$function$create_distributed_table$function$;uShared Library#include“postgres.h”Datum citus_add_node()Datum create_distributed_table()Citus的的实实现现架架构构u集群部署结构 Citus的的实实
6、现现架架构构表类型u分布表(co-location)SELECT create_distributed_table(items,user_id);SELECT create_distributed_table(users,user_id,colocate_with=items);u复制表SELECT create_reference_table(categories);u本地表CREATE TABLE sessions();Citus的的实实现现架架构构元数据管理 Citus的的实实现现架架构构元数据管理 Citus的的实实现现架架构构PostgreSQL插件APIu自定义SQL函数:插件的S