为什么Redshift不需要物化视图或索引?

时间:2016-05-31 13:41:24

标签: sql amazon-redshift materialized-views

Redshift FAQ

  问:对于数据仓库和分析,Amazon Redshift的性能与大多数传统数据库相比如何?

它说:

  

高级压缩:列式数据存储可以比基于行的数据存储压缩得多,因为类似的数据按顺序存储在磁盘上。 Amazon Redshift采用多种压缩技术,相对于传统的关系数据存储,通常可以实现显着的压缩。此外, Amazon Redshift不需要索引或物化视图,因此占用的空间比传统的关系数据库系统少。将数据加载到空表时,Amazon Redshift会自动对您的数据进行采样并选择最合适的压缩方案。

为什么会这样?

5 个答案:

答案 0 :(得分:6)

说实话(在我看来)有点不诚实。虽然RedShift没有这些,但我不确定它是否与它们不会从中受益一样。

物化视图

我不知道为什么他们提出这个主张。可能是因为他们认为引擎如此高效,以至于使用它们所带来的收益微乎其微。

我会对此提出质疑,我工作的产品会维护自己的物化视图,并且可以通过这样做显示出显着的性能提升。也许AWS认为我一开始就做错了什么?

<强>索引

RedShift没有索引。

它具有SORT ORDER,它与聚簇索引非常相似。它只是一个按字节排序的数据列表(如复合聚簇索引)。

它甚至最近推出了INTERLEAVED SORT KEYS。这是直接尝试拥有多个独立排序顺序。而不是按a THEN b THEN c排序

由于RedShift如何实现其列存储,这种可能性很大 - 每列与彼此列分开存储 - 每列存储在1MB块中 - 每个1MB块都有摘要统计

除了作为存储模式之外,它还有效地成为一组伪索引 - 如果数据按a then b then x分类 - 但是你想要z = 1234
- RedShift首先查看块统计信息(对于列z) - 这些统计数据将说明该块存储的最小值和最大值 - 这允许Redshift在某些条件下跳过许多块 - 此实习生允许RedShift识别要从其他列中读取的块

答案 1 :(得分:1)

评论太长了。

简单的答案是:因为它可以真正地,非常快速地并行地读取所需的数据。

索引的主要用途之一是&#34;大海捞针&#34;查询。这些查询只需要相对较少的行,并且这些行匹配WHERE子句。列式数据存储区以不同方式处理这些。整列被读入内存 - 但只读取列,而不是行的其余数据。这有点类似于在每列上都有索引,除了需要扫描匹配的值(这是并行性派上用场的地方)。

索引的其他用途是用于匹配密钥对以进行连接或聚合。这些可以通过替代的基于散列的算法来处理。

对于物化视图,RedShift的优势在于不更新数据。许多此类查询非常快,没有实现。并且,实现导致在高事务环境中维护数据的大量开销。如果您没有高事务环境,则可以在批量加载后增加临时表。

答案 2 :(得分:1)

索引基本上用于OLTP系统中以检索特定或一小组值。相反,OLAP系统检索大量值并对大量值执行聚合。索引不适合OLAP系统。相反,它使用带有排序键的区域映射的二级结构。

索引在B树上运行。没有btree的生活&#39;以下博客中的部分通过示例解释了基于btree的索引如何影响OLAP工作负载。

https://blog.chartio.com/blog/understanding-interleaved-sort-keys-in-amazon-redshift-part-1

柱状存储,压缩编码,数据分发,压缩,查询编译,优化等的组合为Redshift提供了更快的功能。

实施上述因素,减少Redshift上的IO操作,最终提供更好的性能。要实现一个有效的解决方案,它需要大量的知识上面的部分以及您将在Amazon Redshift上运行的查询。

例如。 Redshift支持排序键,复合排序键和交错排序键。 如果您的表结构是lineitem(orderid,linenumber,供应商,数量,价格,折扣,税,退货,发货日期)。 如果您选择orderid作为排序键,但如果您的查询基于shipdate,则Redshift将高效运行。 如果您在(orderid,shipdate)上有一个复合排序键,并且如果您的查询仅在发货日期,则Redshift将无法有效运行。 如果你有一个交错的软键(orderid,shipdate)和你的查询

Redshift不支持物化视图,但它可以轻松地通过在现有表上运行select查询来创建(临时/ permant)表。它最终会复制数据,但需要执行查询所需的格式(类似于物化视图)以下博客提供了有关上述方法的一些信息。

https://www.periscopedata.com/blog/faster-redshift-queries-with-materialized-views-lifetime-daily-arpu.html

Redshift在我们最近的一个基准框架中与其他系统(如Hive,Impala,Spark,BQ等)相处得很好

答案 3 :(得分:1)

截至2019年12月,Redshift预览了实体视图:Announcement

从文档中的

:物化视图包含一个预先计算的结果集,该结果集基于对一个或多个基本表的SQL查询。您可以发出SELECT语句来查询实例化视图,就像查询数据库中的其他表或视图一样。 Amazon Redshift从实例化视图返回预先计算的结果,而根本不必访问基本表。从用户的角度来看,与从基表中检索相同数据相比,返回查询结果要快得多。

答案 4 :(得分:0)

他们最近在Redshift中添加了对实例化视图的支持:https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-redshift-introduces-support-for-materialized-views-preview/

创建实例化视图的语法:

CREATE MATERIALIZED VIEW mv_name
[ BACKUP { YES | NO } ]
[ table_attributes ]   
AS query 

刷新实例化视图的语法:

REFRESH MATERIALIZED VIEW mv_name