如何控制 Redshift 中不断增加的数据量?

How to control increasing data volume in Redshift?

我在 AWS Redshift 中维护了一个数据仓库。数据量和速度最近都有所增加。一种选择是以更高的成本继续水平扩展集群。我想知道是否有可用的存档选项,以便我可以像往常一样查询整个数据(可能在查询时间上有所妥协)但成本很低或没有额外成本?

一种选择是使用外部表并直接从 S3 查询数据,但用于实现此目的的工具(如 Athena 和 Glue)也有其自身的成本,也是基于每个查询。

存储在 Amazon Redshift 中的数据将提供最高性能。

但是,如果您的数据访问频率较低,您可以将其导出 (UNLOAD) 到 Amazon S3,最好是压缩的分区数据并将其存储为 Parquet 或 ORC 会更好!

然后您可以在 Amazon S3 中使用 Amazon Redshift Spectrum to Query External Data。您甚至可以将外部数据与 Redshift 数据连接起来,这样您就可以在一个查询中查询历史信息和当前信息。

或者,您可以使用 Amazon Athena 直接从 Amazon S3 查询数据。这类似于 Redshift Spectrum,但不需要 Redshift。 Amazon Athena 基于 Presto,因此速度超快,尤其是当数据以压缩、分区、Parquet/ORC.

形式存储时

参见:Analyzing Data in S3 using Amazon Athena | AWS Big Data Blog

请注意,Redshift Spectrum 和 Amazon Athena 根据从磁盘读取的数据量收费。因此,压缩、分区 Parquet/ORC 更便宜 并且 更快。

简单选项:

  1. 确保所有表都有压缩 SELECT * FROM svv_table_info;
  2. 通过更改大表以使用 ENCODE zstd 来最大化压缩。
  3. 将小于 ~50k 行(取决于)的小表切换为 DISTSTYLE ALL(是的,这节省了 space!)。
  4. 从基于 SSD 的节点 (dc2) 切换到具有更多 8 倍存储空间的 HDD 节点 (ds2) space。

不太容易的选项:

  1. UNLOAD 旧数据从 Redshift 到 S3 并使用 Redshift Spectrum 查询。
  2. 使用 AWS Glue 或 AWS EMR 将卸载的数据转换为 Parquet 或 ORC 格式,然后使用 Redshift Spectrum 进行查询。

请试用 Redshift Spectrum。查询性能通常非常好,如果您的数据是柱状格式 (Parquet/ORC),查询性能会更好。