Amazon s3 Amazon红移:大容量插入与从s3复制
我有一个红移集群,用于一些分析应用程序。我有要添加到Amazon s3 Amazon红移:大容量插入与从s3复制,amazon-s3,amazon-redshift,Amazon S3,Amazon Redshift,我有一个红移集群,用于一些分析应用程序。我有要添加到单击表中的传入数据。比如说,我每秒要存储约10次新的“点击”。如果可能的话,我希望我的数据能尽快以红移的形式提供 据我所知,由于柱状存储,insert性能很差,所以必须分批插入。我的工作流程是将点击存储在redis中,每分钟我都会将~600次点击从redis批量插入redshift 我有两种方法可以将一批单击插入红移: 多行插入策略:我使用常规的插入查询来插入多行 S3复制策略:我在单击时复制S3中的行。然后我运行一个COPY,将其加载到单击
单击
表中的传入数据。比如说,我每秒要存储约10次新的“点击”。如果可能的话,我希望我的数据能尽快以红移的形式提供
据我所知,由于柱状存储,insert性能很差,所以必须分批插入。我的工作流程是将点击存储在redis中,每分钟我都会将~600次点击从redis批量插入redshift
我有两种方法可以将一批单击插入红移:
:我使用常规的多行插入策略
查询来插入多行李>插入
:我在单击S3复制策略
时复制S3中的行。然后我运行一个
,将其加载到COPY
单击的
表中李>
点击表上完成的):
正如您所看到的,就性能而言,首先在s3中复制数据似乎没有任何好处。上传
+复制
时间等于插入
时间
问题:
每种方法的优缺点是什么?最好的做法是什么?我错过什么了吗
附带问题:是否可以通过清单将数据自动从s3红移到复制?我的意思是在s3中添加新的.csv
文件后立即复制数据?博士和。还是我必须自己创建一个后台工作程序来触发复制命令
我的快速分析:
,没有提到通过多行插入加载数据。看起来首选的方法是使用唯一的对象键从s3中复制(s3上的每个.csv
都有自己的唯一名称)
S3复制策略
:
- 优点:看起来像是文档中的良好实践
- 缺点:更多的工作(我必须管理bucket和清单,以及触发
COPY
命令的cron…)
多行插入策略
- 优点:工作量少。我可以从我的应用程序代码调用
insert
查询
- 缺点:看起来不像是导入数据的标准方式。我错过什么了吗
S3拷贝在数据负载较大的情况下工作得更快。当您说需要将成千上万条记录加载到redshift时,s3 upload+copy的工作速度将比insert查询快
S3拷贝以并行模式工作
当您创建表并执行insert时,批次大小是有限制的。单个SQL的最大大小为16 MB。所以您需要注意SQL批处理的大小(取决于每个插入查询的大小)
S3副本会自动为您的表应用编码(压缩)。当您创建表并使用copy加载示例时,您可以看到自动应用了压缩
但若您在开始时使用insert命令,您将注意到并没有应用压缩,这将在红移中为表带来更多空间,并且在某些情况下会减慢查询过程的计时
如果您希望使用insert命令,则create table with PER column已应用编码以节省空间和更快的响应时间。红移是一种分析数据库,它经过优化以允许您查询数百万和数十亿条记录。它还进行了优化,允许您使用COPY命令将这些记录快速吸收到红移中
COPY命令的设计是将多个文件并行加载到集群的多个节点中。例如,如果您有一个5个小节点(dw2.xl)集群,那么如果您的数据是多个文件(例如20个),那么复制数据的速度可以提高10倍。在文件数量和每个文件中的记录数量之间有一个平衡,因为每个文件都有一些小的开销
这将使您在复制频率(例如每5或15分钟,而不是每30秒)与事件文件的大小和数量之间取得平衡
另一个要考虑的点是2种类型的红移节点,SSD节点(DW2.xL和DW2.8xL)和磁性节点(Dx1.xl和DW1.8xL)。SSD的摄取速度也更快。由于您正在寻找非常新鲜的数据,您可能更喜欢使用SSD数据,对于小于500GB的压缩数据,SSD数据通常成本较低。如果随着时间的推移,你拥有超过500 GB的压缩数据,你可以考虑运行2个不同的集群,一个是SSD上的“热”数据,一个是上个星期或一个月的数据,一个是关于所有历史数据的磁盘上的“冷”数据。p>
最后,您实际上不需要将数据上传到S3,S3是您摄入时间的主要部分。您可以使用SSH copy选项直接从服务器复制数据。请参见此处的更多信息:
如果您能够将Redis队列拆分为多个服务器或至少多个具有不同日志文件的队列,则每秒摄取速度可能会非常好
另一个你想考虑允许近乎实时分析的模式是Amazon CkyScript,即流媒体服务的使用。它允许在几秒钟的延迟内对数据运行分析,同时以更优化的方式准备数据以复制到红移中
在执行到Redshift的批量上传时,实施微批处理可能是值得的。这篇文章可能值得一读,因为它还包含了为提高复制命令的性能而需要遵循的其他技术
我的测试结果有点不同。我正在从OS Windows桌面将CSV文件加载到Redshift
- 行插入速度最慢李>
- 多行插入5倍于fas
| multi-row insert stragegy | S3 Copy strategy |
|---------------------------+---------------------------+
| insert query | upload to s3 | COPY query |
-------------+---------------------------+--------------+------------+
1 record | 0.25s | 0.20s | 0.50s |
1k records | 0.30s | 0.20s | 0.50s |
10k records | 1.90s | 1.29s | 0.70s |
100k records | 9.10s | 7.70s | 1.50s |