首页 > > > Amazon Redshift 简化数仓使用实践
Amazon Redshift 是一款高性能、全托管的PB级云数仓,2013 年上线后,曾是AWS 增长最快的云服务:Redishift 与主流的数仓类似,基于 MPP、columnar、scale-out 的架构,但其目标不是跟市场上现有数仓竞争,而是充分简化数仓的使用(easy to buy、easy to tune、easy to manage),开拓零消费市场。
数据仓库的市场规模约为关系型数据库的1/3($14B vs $45B,2015年数据),年复合增长 8-11%,而过去10年,数据量则每年有 30-40% 的增长,说明有很大一部分数据是 Dark Data,即数据被收集了但并没有被分析处理,如果用户不能发现数据的价值,也将不会保留这些数据。

数据产生,但没有被分析处理(analysis gap),主要的原因包括
业界的数据仓库普遍采取列存数据布局、列式数据压缩、近数据计算/Join、代码生成、MPP 等技术来提升性能,但这些技术并没有突破上述的 analysis gap,让尽可能多的数据都能分析并产生价值。除了应用这些普适技术,Redshift 重点在易用性上进行提升,让数据分析唾手可得。易用性方面的核心设计目标包括

Amazon Redshift 集群由一个 Leader Node 和 多个 Compute Node 组成,主要服务分析性的负载,包括大量数据的全量、增量导入,以及对数据的扫描、连接、过滤、聚合等操作。
Leader Node 接受客户端的连接,解析请求并生成查询计划分到多个 Compute Node 上并行执行,并按需对 Compute Node 返回的结果进行聚合。
表的数据在 Compute Node 之间以及内部都会进行分散存储,以充分利用多节点并行的能力,同时发挥多核处理的能力,降低多线程之间的访问竞争。
Compute Node 资源会被切分为 Slice,每个 Slice 管理部分的内存和磁盘空间,并负责响应的数据存储与查询。用户可以指定表的分片策略,包括 Round Robin、指定 Key Hash 等,多表针对相同的 Key 进行 Hash,可以将 Join 操作尽量本地化提高效率。每个 Slice 存储的数据采用列存方式以 Data Block 为单位进行压缩编码存储,不同列之间通过行号来形成逻辑的关系数据视图。
Data Block 会在数据库实例内复制多副本进行存储,减小节点故障对查询的影响,同时 Block 会异步方式将数据存储到 Amazon S3 保证数据的高可靠。
Redshift 通过类似 PostgreSQL 里的 COPY 命令来支持数据的便捷加载,可以方便的从 Amazon S3、Amazon DynamoDB、Amzone EMR 等数据源加载数据,COPY 命令实现 Slice 级别的并行,每个 Slice 并行的从源端读取数据并重新分布排序。
Amazon Redshift 的管控由单独的集群来负责,支持包括集群的监控告警、扩容/缩容、备份恢复、版本升级等一系列能力。
Amazon Redshift 将用户开始关注产品主页到开通数据库实例发出第一个请求并获得结果的时间作为用户决策的衡量指标,通过多种手段来缩短这个路径时间。
Amazon Redshift 利用一系列其他云产品来完善自身的产品能力,以降低 Redshift 的管理成本,包括
部分用户将 Amazon Redshift 作为传统企业级数仓来使用,从其他数据源周期性(如小时级、天级别)导入数据,并通过 BI 工具来访问数据,这部分用户主要看重系统使用简单、透明,并能使用现有的 BI、ETL 工具。
部分用户使用 Amazon Redishift 分析日志、交易数据,这些用户原来可能采用 HIVE on Hadoop 来进行数据分析,迁移到 Redshift 能以更低的成本获得更好的性能表现。通过 SQL 用户就能将现有的系统与 Redshift 连接起来,并通过 SQL 或 BI 工具进行分析。
越来越多的用户将 Redshift 当成数据处理 Pipeline 的一部分,将原始数据 LOAD 到 Redshift,通过 SQL 进行分析处理,将结果输出到结果表提供在线服务。
大量 Redshift 的客户之前并没有使用数据仓库,而是直接基于 OLTP 系统做提供分析,通过将分析负载从 OLTP 系统移除,能获得更稳定的在线服务和更高的分析性能,数据从 OLTP 系统自动实时的写到 Redshift 的能力对用户应用该场景非常关键。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69975189/viewspace-3143128/ ,如需转载,请注明出处,否则将追究法律责任。