Redshift是AWS提供的关系型数据库管理系统(RDBMS),基于PostgreSQL,但二者的差别非常大。可以通过自带的Redshift客户端连接Redshift数据仓库,也可以使用第三方的SQL WorkbenchJ来连接。
Redshift架构
Redshift集群由一个leader node和多个compute nodes构成,如下文中图所示。leader node负责多个compute nodes的协调及外部通信,compute nodes从外部无法访问,是典型的主从结构的分布式计算系统。leader node为执行计划的单个元素编译代码并将代码分配给各个compute nodes。compute nodes执行编译后的代码,并将中间结果发送回leader nodes以便最终聚合。
https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/c_high_level_system_architecture.html
Redshift优化
Columnar storage
Using columnar storage, each data block stores values of a single column for multiple rows. As records enter the system, Amazon Redshift transparently converts the data to columnar storage for each of the columns.
注意这里是column storage,而不是column-family storage。
我们还可以对表中的每个字段指定使用不同的压缩编码,从而进一步压缩存储,提高查询效率。由于采用列式存储,压缩的效率很高。Typical database block sizes range from 2 KB to 32 KB. Amazon Redshift uses a block size of 1 MB。
workload management (WLM)
用户可以最多定义8个不同优先级别的队列。当一个query运行时,WLM通过预先设置的参数(如查询用户所在的组,查询相关的参数)将query放入不同的队列中,并由此对查询任务给与不同的优先级别。每个队列最大并发度为50,超过时query进入队列等待执行。
sort key
When you create a table, you can specify one or more columns as the sort key. Amazon Redshift stores your data on disk in sorted order according to the sort key.类似SQL server的聚集索引。
Redshift中可定义唯一key,主键和外键,但这些key仅仅为Redshift提供统计数据,不影响实际运行。
其他功能
Redshift支持user-defined functions and stored procedure。stored procedure可以包含DDL&DML,也可以没有返回值。和传统关系型数据库差不多。
Redshift Spectrum 支持直接查询存储在S3(Simple Storage Service)上的数据文件,如JSON等。需要通过定义external table来查询。这是个非常有用的功能:AWS对S3的支持非常好,很多AWS的服务都支持和S3的对接,例如DynamoDB可直接将数据写入S3。因此S3可以很容易实现不同AWS服务间的数据共享。