9

我们正在评估 Amazon Redshift 的实时数据仓库。

数据将通过 Java 服务进行流式传输和处理,并且应该存储在数据库中。我们逐行(实时)处理,每个事务我们只会插入一行。

将实时数据加载到 Amazon Redshift 的最佳做法是什么?

我们应该使用 JDBC 并执行INSERT INTO语句,还是尝试使用 Kinesis Firehose,或者 AWS Lambda?

我担心使用其中一项服务,因为两者都将使用 Amazon S3 作为中间层并执行COPY适用于更大数据集的命令,而不是“单行”插入。

4

2 回答 2

14

在Amazon Redshift中使用单个语句效率不高。INSERT它被设计为一个数据仓库,提供非常快速的 SQL 查询。它不是一个经常更新和插入数据的事务处理数据库。

最佳实践是通过命令加载批次(或微批次COPY。Kinesis Firehose 使用这种方法。这样效率更高,因为使用多个节点并行加载数据。

如果您正在认真考虑实时处理数据,那么 Amazon Redshift 可能不是最适合使用的数据库。考虑使用传统的 SQL 数据库(例如 Amazon RDS 提供的那些)、NoSQL 数据库(例如 Amazon DynamoDB)甚至 Elasticsearch。如果您的重点是报告大量数据(通常涉及许多表连接),您应该只选择使用 Redshift。

加载数据的 Amazon Redshift 最佳实践中所述:

如果 COPY 命令不是一个选项并且您需要 SQL 插入,请尽可能使用多行插入。当您一次只添加一行或几行数据时,数据压缩效率低下。

于 2017-01-15T08:18:44.783 回答
5

最好的选择是 Kinesis Firehose,它正在处理成批的事件。您正在将事件一个一个地写入 Firehose,它会根据您的定义以最佳方式对其进行批处理。您可以定义批处理事件的分钟数,或批处理的大小(以 MB 为单位)。您可以使用 INSERT 更快地将事件插入 Redshift,但这种方法不可扩展。COPY 设计用于几乎所有规模。

于 2017-01-15T06:07:18.500 回答