Ofe*_*ich 25 amazon-s3 amazon-ec2 amazon-web-services amazon-dynamodb amazon-redshift
我有一个网络应用程序,需要发送其使用情况的报告,我想使用Amazon RedShift作为数据仓库,我应该如何收集数据?
每次,用户与我的应用程序交互,我想报告..所以我什么时候应该将文件写入S3?多少钱?我的意思是: - 如果不立即发送信息,那么我可能会因为连接丢失而失去它,或者我的系统中的一些错误被收集并准备好发送到S3 ... - 如果我在每次用户交互时都将文件写入S3,我最终会得到数百个文件(每个文件都有最少的数据),需要在复制到RedShift后进行管理,排序,删除..这似乎不太像一个好的解决方案
我错过了什么?我应该使用DynamoDB,我应该使用简单的插入到Redshift中吗?
如果我确实需要将数据写入DynamoDB,我应该在复制后删除保留表.最佳做法是什么?
在任何情况下,哪些是避免RedShift中数据重复的最佳实践?
感谢帮助!
Guy*_*Guy 44
最好在将事件日志摄入Amazon Redshift之前对其进行聚合.
好处是:
您将更好地使用Redshift 的并行特性; COPY在S3(或从大DynamoDB表)一组较大的文件会多比的小文件的单个INSERT或COPY更快.
在将数据加载到Redshift之前,您可以对数据进行预排序(特别是如果排序基于事件时间).这也可以提高您的负载性能并减少对表的VACUUM的需求.
您可以在聚合并将其加载到Redshift之前在多个位置累积您的事件:
本地文件到S3 - 最常见的方法是在客户端/服务器上聚合日志,每x MB或y分钟将它们上传到S3.有许多日志追加器支持此功能,您无需在代码中进行任何修改(例如,FluentD或Log4J).这可以仅使用容器配置来完成.缺点是您可能会丢失一些日志,并且可以在上载之前删除这些本地日志文件.
DynamoDB - 正如@Swami所描述的,DynamoDB是积累事件的一种非常好的方法.
Amazon Kinesis - 最近发布的服务也是以各种快速可靠的方式将您的活动从各种客户端和服务器流式传输到中心位置的好方法.事件按插入顺序排列,这样可以在以后预先排序到Redshift时轻松加载它.事件存储在Kinesis中24小时,您可以安排从kinesis读取并每小时加载到Redshift,以获得更好的性能.
请注意,所有这些服务(S3,SQS,DynamoDB和Kinesis)允许您直接从最终用户/设备推送事件,而无需通过中间Web服务器.这可以显着提高服务的高可用性(如何处理增加的负载或服务器故障)和系统成本(您只需支付使用的费用,而不需要为日志使用未充分利用的服务器).
例如,请参阅如何获取移动设备的临时安全令牌:http://aws.amazon.com/articles/4611615499399490
允许与这些服务直接交互的另一组重要工具是各种SDK.例如,Java,.NET,JavaScript,iOS和Android.
关于重复数据删除要求; 在上面的大多数选项中,您可以在聚合阶段执行此操作,例如,当您从Kinesis流中读取时,您可以检查事件中是否没有重复,但在放入之前分析大量事件缓冲区进入数据存储区.
但是,您也可以在Redshift中进行此检查.一个好的做法是COPY将数据导入临时表,然后选择SELECT INTO一个组织良好的排序表.
您可以实现的另一个最佳实践是每日(或每周)表分区.即使您想要一个大的长事件表,但大多数查询都在一天(例如最后一天)运行,您可以创建一组具有类似结构的表(events_01012014,events_01022014,events_01032014 ...).然后你可以SELECT INTO ... WHERE date = ...对每个表格.如果要查询多天的数据,可以使用UNION_ALL.
小智 6
要考虑的一个选项是在DynamoDB中创建时间序列表,您可以在DynamoDB中每天或每周创建一个表来编写每个用户交互.在时间段(日,小时或周)结束时,您可以将日志复制到Redshift.
有关更多详细信息,请参阅DynamoDB时间序列表,请参阅此模式:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.TimeSeriesDataAccessPatterns
和这个博客:
http://aws.typepad.com/aws/2012/09/optimizing-provisioned-throughput-in-amazon-dynamodb.html
对于Redshift DynamoDB副本:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/RedshiftforDynamoDB.html
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
23835 次 |
| 最近记录: |