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



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


一、PostgreSQL在公交行业的实践

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

1591687726261483.png

1591687786553371.png


彭冲答疑互动摘录

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


二、PostgreSQL之Citus实践

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

1591687887897723.png

1591687913758620.png


宋少华答疑互动摘录

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


PostgreSQL线上沙龙由中国PostgreSQL分会主办,旨在为广大PostgreSQL从业人员、爱好者提供一个向PostgreSQL技术专家学习、交流互动的平台,话题不限。如果您愿意向大家分享您对PostgreSQL的独特见解,可与我们联系(15863186550,微信同手机号)。


最后,再次感谢彭冲老师、宋少华老师,感谢各界朋友的关注与参与。下面为大家奉上本次沙龙的回放视频和PPT。


PPT和视频获取方式:识别下方二维码,进入公众号,回复“沙龙第四期”,即可获得下载链接。

社区公众号二维码
相关内容