将大量数据插入Redshift

时间:2017-04-12 11:24:12

标签: amazon-s3 sql-insert amazon-redshift

我希望在Go中构建一个RESTful API,负责根据多个移动应用程序(存储在Amazon Redshift集群中)发送的数据插入数据。可能每秒接收数万个请求。

根据我的阅读,Redshift提供慢速插入速度。 这就是为什么很少有人建议我使用像dynamodb或s3这样的中间数据库,我先在其中执行插入操作。然后,我第二次将数据导入Redshift。

我想知道为什么在这种情况下我需要使用Redshift,因为数据已经存储在数据库中了?你认为我可以采取不同的行动吗?

我还想到了一个更简单的解决方案,即写入队列并逐步将数据插入到redshift中,但我认为如果队列变得越来越大,可能会出现问题,因为插入速度不足以补偿传入数据

提前感谢您的帮助! : - )

1 个答案:

答案 0 :(得分:2)

这样的建议通常是StackOverflow的主题,但是......

Amazon Redshift是一个带有SQL接口的大规模并行处理(MPP)数据库。它可用于查询TB甚至PB的数据,它可以非常有效地完成。

您问“为什么我需要使用Redshift” - 如果传统数据库无法满足您的查询要求,答案是 。如果您能够令人满意地使用普通数据库进行查询,那么就没有理由使用Redshift。

但是,如果您的查询需要Redshift,那么您应该继续使用它。 Redshift的设计是这样的,插入数据的最有效方式是通过COPY命令从Amazon S3加载。通过普通INSERT语句插入数据是低效的,除非它们每INSERT个语句插入多行(例如数百或数千)。

所以,有些问题要问:

  • 我的查询是否需要Amazon Redshift的功能,或传统数据库是否足够?
  • 我是否需要以实时加载数据,或者是否足以批量加载?
  • 如果使用批次,我需要多长时间才能加载批次?我可以每小时或每天进行一次,还是需要在数据到达的几分钟内完成?

您还可以考虑使用Amazon Kinesis Firehose,它可以接受数据流并自动将其插入Amazon Redshift数据库。