PostgreSQL线上沙龙第四期精彩回顾

3月28日,由中国开源软件联盟PostgreSQL分会主办的“PostgreSQL线上沙龙第四期”落幕。本次沙龙,邀请到了云和恩墨技术顾问 彭冲(多米爸比) ,晟数学院金牌讲师 宋少华 ,与广大网友开门论道,分别探讨了”PostgreSQL在公交行业的实践”、“PostgreSQL之Citus实践”等内容。

01

PostgreSQL在公交行业的实践

来自云和恩墨的彭冲老师,在工作之余以网名”多米爸比”活跃于各类技术论坛、QQ群、微信群,热心于技术分享、技术交流。本期沙龙,他为大家分享了PostgreSQL在公交场景下的应用要点。

PostgreSQL线上沙龙第四期精彩回顾

PostgreSQL线上沙龙第四期精彩回顾

彭冲答疑互动摘录

1.公交系统数据量大不大,备份策略怎么做的,备份快不快?

公交业务系统分两块,一块是智能调度跟位置信息相关数据量很大,另一块是IC卡收费系统,一般数据量不算太大,没超过100G(2~3年)。我们备份策略一般有两种,整体cluster级别和按应用系统来备,列如有的应用是单个schema,有的应用是多个schema,有的是database。按应用系统自定义备份一般比较快,列如我们使用-T排除了一些数据量大的历史分区表,实际活跃数据一般备份比较快。

2.Json path查询使用

参考PostgreSQL如何使用json

(https://www.modb.pro/db/21948)

3.父查子或者子查父的层级查询

参考PostgreSQL递归查询

(https://www.modb.pro/db/12389)

4.公交系统使用了哪些FDW呢?PG_FDW在更新操作并发比较大的情况下会影响多少台数据库性能呢?在使用时有哪些注意事项么?列如自增序列这块?

我们在公交系统主要用的是postgres_fdw,别的FDW也有使用,列如商户对账数据整合用到了oracle_fdw和tds_fdw。之前遇到过oracle_fdw串行化写入的问题,后来升级小版本或修改oracle_fdw事务级别解决。postgres_fdw并发写入性能没有深入测试过,不过近期打算做,回头会分享在墨天轮,欢迎一起交流。

5.有没有遇见表膨胀,索引膨胀的问题?怎么日常维护,定期repack ?

表膨胀,长事务都有遇到过,MVCC我们由于主要是后台存储过程实现主要任务,所以业务定时清理。

6.一般情况下采集数据过来后来数据丢失或者没有及时上传怎么办?是做增量还是全量重新采集?

由于有WEB功能,界面有定时任务的执行情况能进行查询管理,增量或全量都可以。

彭冲老师在墨天轮的个人专栏:
https://www.modb.pro/topic/12390

02

PostgreSQL之Citus实践

晟数学院PG金牌讲师宋少华深耕数据库培训多年,本期沙龙,他为大家带来了Citus单机多实例和多机单实例部署实操演练。宋老师先为大家介绍了Citus的架构原理,并以娴熟的操作、详实的步骤带大家熟悉Citus整个部署的细节。关于Citus 集群管理和表管理,包括如何添加、禁用、删除节点等操作这部分内容,由于时间缘由,未能细讲,也提供了PPT供大家课后阅读。(实操录屏、PPT下载方式见文末)

PostgreSQL线上沙龙第四期精彩回顾

PostgreSQL线上沙龙第四期精彩回顾

宋少华答疑互动摘录

1.目前PG比较稳定的适合OLTP集群架构有些什么?PGPOOL和CITUS的优劣势能介绍下么?

PG稳定的适合OLTP的集群架构有PL/Proxy,Citus,Patroni等架构。

Pg-pool-II属于池化的一种中间件,可以为PostgreSQL提供负载均衡,自动故障转移等功能,一般结合pg的主从架构来使用。但pg-pool-II支持的多主同写性能较差。

Citus面向高速简单事务,高吞吐量批量加载及分析查询。集成许多扩展插件如cstore/hll等。

但是Citus在一些场景中不支持所有SQL查询或者复杂事务。如CN节点本地表和DN节点的分布表做关联查询,只能使用内嵌视图的方式做关联。

2.前几天听过老师讲xl,想请老师做个对比它俩,以及元数据节点和数据节点如何容灾

Postgres-XL适用于复杂的事务,一般使用主服务器进行分析查询,因此在并行分析处理上面能力不足。同时,数据节点没有内置故障转移。而Citus可以支持并行查询,数据节点副本冗余等功能。

元数据节点和数据节点容灾:

元数据节点对于Citus来说,可以为CN节点添加一台候选节点用来同步主CN节点的元数据。

同时可以使用Citus-MX模式,配置多CN节点数据回传进行容灾。

数据节点可以使用Ctius的副本功能,为数据提供冗余存储。

3.老师,citus与与原生的PostgreSQL对比的话,有哪些优势呢,插例如创建索引,查询延时,查询性能等;在进行查询或更新操作时,有哪些限制呢?

Citus本身是做为PostgreSQL的一个扩展,并不集成PostgreSQL数据库。

Citus可以以扩展的方式配置PostgreSQL集群。创建索引为每个DN上面的表创建一个索引,由CN节点维护,同时,索引创建相对于PostgreSQL单数据库更快。

Citus支持多DN并行查询,因此,一般情况下查询性能和查询延时比PostgreSQL单服务器有更好的性能。

Citus查询数据要注意一些维护在CN本地的表不能和分布表进行join关联查询,只能使用内嵌视图的方式进行查询。

Citus在对数据进行update或者delete影响到多个分片时,Citus默认使用一阶段提交协议,为了提高安全性,提议启用两阶段提交的方式进行更新。

4.集群支持动态扩展么?扩展的机器是偶数台还是奇数台?原集群扩展后,之前的hash分布如何分布到信的dn节点上?

支持,没有明确的对于扩展的机器数量是偶数台还是奇数台。

扩展集群后,可以使用citus提供的rebalance_table_shards()函数进行数据重新分布。此函数分布数据不区分表是采用何种方式进行分布的。

5. citus 和postgresql-xl 都是分布式,主要区别是什么?

该问题已在第二条回答过,这里仅提一下。

Postgres-XL适用于复杂的事务,一般使用主服务器进行分析查询,因此在并行分析处理上面能力不足。同时,数据节点没有内置故障转移。而Citus可以支持并行查询,数据节点副本冗余等功能。

6. citus是一个插件形式,可以使用任意版本pg吧,pgxl是一个分布式数据库吧,还有其它哪些深层次的区别呢?

可以在任意版本的PostgreSQL中使用Citus。
Citus多租户和交互式实时分析

Postgres-XL多ACID事务

7.老师,在原数据库中建了一些plpgsql的函数,citus后应该如何处理这些函数呢?还有某些函数中使用了表,在DN执行函数时会提示表不存在问题怎么解决呢?

对原有的函数使用
create_distributed_function函数进行spread。

确定函数中使用的表是一个分布表,而不是表的分片。

8.在单机安装中,先在8000端口上执行了,怎么区分是cn还是dn节点?

可以查看pg_dist_node视图查看是否存储元数据。

9. citus是否有解决单点故障的方案,保证高可用?

有,Citus可以通过 master_add_secondary_node函数解决CN节点的单点故障。

10.老师好,请问citus在节点扩缩容rebalance或redistribution过程中是否整个集群不可用,路由的切换时间会受数据量的影响吗

不会,Citus提供无停机平滑对数据进行分布。

11. 一般是不是要配置多个CN节点,预防单点故障!还有就是DN节点出现单点故障,数据访问是怎么处理的?

是的。

为了预防DN节点不可用,可以使用PostgreSQL的stream replication将数据通过WAL日志传输到备用节点。也可以通过Citus的share_replication_factor参数进行分片复制来避免DN节点故障。

12. citus能否和其它一些pg插件,列如TimescaleDB一起用?

可以,需要注意的是:

1)在加载其它扩展的时候,要保证shared_preload_libraries中的citus为第一个扩展。

2)创建扩展前,需要在CN和DN上都要使用CREATEEXTENSION创建扩展。

晟数学院金牌讲师宋少华老师深耕数据库培训多年,如您想深入学习PostgreSQL,可与宋老师联系:微信号songshaohua0001

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
众生皆甜的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容