云计算之大数据(下)

目录

一、Hologres

1.1 产品定义

1.2 产品架构

1.3 Hologres基本概念

1.4 最佳实践 - Hologres分区表

1.5 最佳实践 - 分区字段设置

1.6 最佳实践 - 设置字段类型

1.7 最佳实践 - 存储属性设置

1.8 最佳实践 - 分布键设置

1.9 最佳实践 - 聚簇键设置

1.10 最佳实践 - 分段键设置

1.11 最佳实践 - 数据生命周期管理

1.12 最佳实践总结

2.1 产品定义

2.2 Flink架构

2.3 技术架构

2.4 功能架构

2.5 Flink任务自动调优

2.6 最佳实践 - Flink+Hologress实时数仓

2.7 最佳实践 - Flink任务反压

2.8 最佳实践 - Flink任务数据正确性问题处理

2.8.1 场景一:去重

2.8.2 场景二:filter

2.8.3 场景三:结果表主键Update结果不符合预期

2.8.4 场景四:维表JOIN

总结


一、Hologres

1.1 产品定义

        阿里云Hologres是一款实时数仓产品,它融合了OLAP和OLTP的能力,能够支持用户进行实时的分析处理。

1.2 产品架构

  • Frontend:认证、解析、优化
  • Worker Node:计算资源
  • HOS:轻量级调度框架
  • Shard:数据分片
  • Cache:分层精细化缓存
  • Resource:容器资源管理
  • Store:元数据管理 

1.3 Hologres基本概念

名词

定义

实例

在Hologres中,实例(Instance)是您使用和管理数据库存储服务的实体,一个实例可以看作是多个数据库的合集,您对数据库的操作都是在该实例下完成。

数据库

一个模式的合集,用户所有的操作,包括表、函数等都是在数据库里完成。系统会在用户完成实例申请后默认创建一个“postgres”的数据库,该DB仅用于运维管理,实际业务需要新建DB

SCHEMA

schema为数据库对象的集合,类似一个文件系统中的目录,实例内的对象如表、函数等都存放于各个schema下,创建数据库成功后,会默认创建一个名叫public的schema

表是数据存储单元,分为内部表和外部表

内部表

指数据存储在Hologres中的表,表中的数据类型可以是Hologres支持的任意一种类型。

外部表

指在Hologres不存储数据只做字段映射的表,外部数据表都是只读的,因此在外部表不能够执行DML操作,也不能创建索引

分区表

被分割的表称为分区表,表通过明确列出每个分区中出现的键值进行分区,可以理解为分类,通过分类把不同类型的数据放在不同目录。

1.4 最佳实践 - Hologres分区表

  • 父表按分区键(Partition Key)的值划分为不同的子表,子表对外可见。
  • 分区表在使用时,需要提前创建子表。
  • 分区表的不同分区子表采用不同的文件存储,查询时带上分区条件,指定所需查询的分区,避免全表扫描,快速定位存储文件,提高处理效率。通常将事实表按照日期划分为不同的分区表。

1.5 最佳实践 - 分区字段设置

使用建议:

  • 单表的数据总量较⼤(超过1亿条)时,就需要考虑使用分区表
  • 子表下的数据量要适中,通常在3亿~ 10亿条记录之间
  • 整个集群的子表总数控制在10万个以内
  • 如果您需要经常对某日数据进行整体替换,执行truncate操作,建议使用分区表

使用说明:

  • 分区表的创建依然兼容Postgres语法,分区表方便用户管理数据,并能通过分区裁剪加快数据的查找。
  • 不能向父表插入任何数据。
  • 只有 TEXT/VARCHAR/INT 类型才能作为分区键。如果按天/小时分区要把日期存为TEXT格式。
  • partition by 类型仅支持 list,切分 partition list 只能有一个值。
  • 分区父表和子表必须要在同一个Schema。
  • 若是表有主键,分区键必须是主键的一个子集。
  • 分区表的数据不会自动删除,需要用户自己管理生命周期。
  • 分区表太小,查询加速效果不明显,可以选择较大粒度的分区。

1.6 最佳实践 - 设置字段类型

  • 尽量选用存储空间小的类型。
  • 优先使用INT类型,而不是BIGINT类型。
  • DECIMAL的精度尽量小。
  • Group By的列不建议使用Float类型。
  • 优先使用TEXT,而不是VARCHAR(n)和CHAR(n),n的取值尽量小。
  • 日期类型使用TIMESTAMPTZ、DATE,避免使用TEXT。
  • 使用一致的数据类型。
  • 进行多表关联时,不同列尽量使用相同的数据类型。避免Hologres将不同类型的列进行隐示类型转换,造成额外的开销。
  • UNION或Group By等操作使用DECIMAL类型。
  • UNION或Group By等操作暂不支持DOUBLE PRECISION和FLOAT数据类型,需要使用DECIMAL类型。

1.7 最佳实践 - 存储属性设置

  • 在Hologres中表默认为列存(column store)形式。列存对于OLAP场景较为友好,适合各种复杂查询、数据关联、扫描、过滤、统计。
  • 行存对于key-value场景比较友好,适合基于primary key的点查和扫描scan。
  • 列存会默认创建更多的索引,包括对字符串类型创建bitmap索引,这些索引可以显著加速查询过滤和统计,因此列比较多的表,会占用更多的存储空间,您可以通过关闭这些默认创建的索引,释放空间。
  • 行存默认仅对主键创建索引,仅支持主键的快速查询,因此使用的存储空间更少,但使用场景也受到限制。
  • 从HologresV1.1版本开始支持行列共存的格式。行列共存是同时具备了上述的能力,即支持高效点查也支持OLAP分析,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值