本专栏全部文章 | 时间 |
总目录 | 《童虎学习笔记》总目录(含视频实战)_童虎学习笔记的博客-CSDN博客 |
来我的dou音 aa10246666, 看配套视频
一、实战环境
Citus是Postgres的一个extension扩展,将Postgres转换成一个分布式数据库,在集群的多个节点上分发数据和查询,具有像分片、分布式SQL引擎、复制表和分布式表等特性。
节点 cn_node1(协调节点,不存储数据) | postgresql 14.2 | 10.211.55.9 |
节点 worker1_node2(工作节点,存储数据) | postgresql 14.2 | 10.211.55.4 |
节点 worker2_node3(工作节点,存储数据) | postgresql 14.2 | 10.211.55.6 |
citus-10.2 / debian 9 |
二、安装Citus
所有节点(cn, worker1, worker2)都做如下操作
1、安装Citus
2、配置PG
文件 /etc/postgresql/14/main/pg_hba.conf 中添加
其中postgres是系统用户用于添加节点、创建分布表、参考表等操作,appuser是应用程序连接cn节点使用数据库的帐号
重启PG使配置生效
3、新建样例数据库并授权
在这里我们新建了一个数据库d1, 又新建了一个用户appuser, 又在d1数据库里新建了扩展citus, 并授予appuser用户对d1数据库的all权限
三、添加worker节点
仅在cn节点做如下操作
1、添加2个worker节点
检查worker节点信息是否正确添加
四、创建distributed分布表
分布表的特点是数据分布在每个worker节点上
1、方式1, 先建表,再将其设置为分布表,再向表中插入数据
在cn节点的d1上建表t1
以id列为分片键,将表设置为分布表, 默认一共创建32个分片,平均分配到每台worker上
此时到cn、worker1和worker2上查看一下t1表的分布情况
可以看到cn节点的表是逻辑表,2个worker节点是是分片后的表,接下来我们在cn节点插入数据
此时再到cn、worker1和worker2上查看一下t1表的分布情况
可以看到当在cn节点对t1表插入数据后,cn节点上的表大小没有变化,说明cn节点不存储数据。同时查看worker1和worker2节点表t1的大小变大了,说明worker节点是实际存储数据的。
在cn节点发起一个查询,验证可以正常返回结果
2、方式1, 先建表,再向表中插入数据,再将其设置为分布表
在cn节点的d1上建表t11
在cn节点先插入数据
以id列为分片键,将表设置为分布表, 默认一共创建32个分片,平均分配到每台worker上
按上面的提示,我们删除本地数据,而不影响workder节点上的数据
此时到cn、worker1和worker2上查看一下t11表的分布情况
经观察,说明cn节点不存储数据,说明worker节点是实际存储数据的。
五、创建reference参考表
参考表的特点是数据分布在每个worker节点上且每个节点上都一份而经分片的全量数据,正是因为每个节点都有一份全量数据,所以可以减小对参考表进行关联时查询的耗时。
1、方式1, 先建表,再将其设置为参考表,再向表中插入数据
在cn节点的d1上建表t2
将t2表配置为参考表
注意参考表没有分片键,所以此外只接受一个表名做为参数
插入数据
此时到cn、worker1和worker2上查看一下t2表的分布情况
2、方式1, 先建表,再向表中插入数据,再将其设置为参考表
在cn节点的d1上建表t22
插入数据
将表t22配置为参考表
按上面的提示,我们删除本地数据,而不影响workder节点上的数据
此时到cn、worker1和worker2上查看一下t22表的分布情况
六、查看表分布情况
在cn节点操作
1、查看citus的系统中的表
通过上面可以清晰的看出来系统中现在有2个分布表分别是t1和t11,有2上参考表分别是t2和t22
2、查询表的分片情况
通过上面的内容,假设我们要查找t11表的id=50的记录所在的分片是102056,但这个shard在哪台服务器的哪个表里呢,可以通过下面的语句查询出来
可以看到t11表的id=50的值所在的分片,是192.168.40.143这个worker节点的t11_102056这张分布表