开发者学堂课程【PostgreSQL云上开发实践:阿里云PostgreSQL_开发实践_5】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/528/detail/7110
阿里云PostgreSQL_开发实践_5
目录:
一. 数据同步通道-1
二. 数据同步通道-2
三. 数据写入实践
四. HDB PG分布键选择建议
五. 行存和列存的选择
六. 非分布键group by和distinct
七. HDBPG分区表分区字段选择建议
一.数据同步通道-1
dbsync 项目目标是围绕 PostgreSQL Greenplum ,实现易用的数据的互迁功能。
支持的功能:
1. PostgreSQL -> PostgreSQL pgsql2pgsql
功能 pg->pg 全量+增量数据同步
状态:已开源 文档
2. MySQL -> PostgreSQL/Greenplum(binlog_minner binlog_loader)
功能:基于 MySQL binlog 解析的增量数据同步
状态:已开放二进制 文档
3. PostgreSQL -> PostgreSQL/Greenplum pgsql2gp
功能:基于 PostgreSQL 逻辑日志的增量数据同步
状态:未开发完成
4. MySQL -> PostgreSQL/Greenplum mysql2pgsql
功能:以表为单位的多线程全量数据迁移
状态:已开源 文档
https://github.com/aliyun/rds_dbsync
二. 数据同步通道-2
计算接点每一次导入任务三十兆每秒,也就说如果我里有1000个节点我们可以做到30GB每秒的写入吞吐,使用oss来做数据导入的话,优势是如果你要导入的数据量特别的大,比如说我们要做一些全量导入,我们的导入的性能是最好的,那么怎么优化?
第一,怎么使用,我们里面有链接,阿里云的帮助文档。
第二,我们如果要从外面的数据源,写进来,我们可以提供一些调度任务,那么调度任务的话在阿里云里面也是有对应的服务的。
https://help.aliyun.com/document_detail/35457.html
三.数据写入实践
·批量 or 单步
·为什么 AO 表写入有 Io 放大
https://github.com/digoal/blog/blob/master/201711/20171116_01.md
·如何提速
四. HDB PG 分布键选择建议
·允许随机分布
·分布键允许多列
·如果有唯一、主键约束,必须与分布键一致
·分布键选择,确保不出现倾斜
·大表、建议经常被用于JOIN的列
https://github.com/digoal/blog/blob/master/201607/20160719 02.md
五.行存和列存的选择
以行的形式来组织还是以列的形式来组织,如果你以列的形式来组织 我一张100列的表,一张100个列的表,实际上我每一列都有对应的数据文件,那我至少有100个文件,这是列存表,那么行存表的话,我每一行是存到密集的,存到数据块里面的,只要你没做切片,那你就存在数据块里面的那的话,
他们的好处在于:
第一,使用行存的话,我们可以在如果你要访问整行的,或者说你要访问很多个数据框的话,很多个列的话,那我使用行存,我要扫描数据块可能更少,而使用列存的好处,访问的数据量就更少,比如说我一我刚刚讲一张百个G的表,有100个列,假设他每列是一个G,我们就假设好了 那我要访问三个列的数据,我是不是只要访问三个G,而我要如果行存的话,要访问多少100个G,我即使即使只访问三个列的数,他也要访问100个G,使用列存更加适合于数据分析 使用行存更加适合于点查。
六. 非分布键 group by和 distinct
https://github.com/digoal/blog/blob/master/201711/20171123_01.md
·对于非分布键的分组聚合请求,Greenplum 采用了多阶段聚合如下:
·第一阶段,在 SEGMENT 本地聚合。
·第二阶段,根据分组字段,将结果数据重分布。
·第三阶段,再次在 SEGMENT 本地聚合。
·第四阶段,返回结果给 master,有必要的话 master 节点调用聚合函数的 final func (己经是很少的记录数和运算量)。
七、HDBPG 分区表分区字段选择建议
·支持范围、枚举分区
·不建议与分布键一致
·建议经常用于过滤的列
-时间
-枚举