Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 将数据(增量)加载到Amazon红移、S3 vs DynamoDB vs Insert_Amazon Web Services_Amazon S3_Amazon Ec2_Amazon Dynamodb_Amazon Redshift - Fatal编程技术网

Amazon web services 将数据(增量)加载到Amazon红移、S3 vs DynamoDB vs Insert

Amazon web services 将数据(增量)加载到Amazon红移、S3 vs DynamoDB vs Insert,amazon-web-services,amazon-s3,amazon-ec2,amazon-dynamodb,amazon-redshift,Amazon Web Services,Amazon S3,Amazon Ec2,Amazon Dynamodb,Amazon Redshift,我有一个web应用程序需要发送使用报告,我想使用Amazon RedShift作为数据仓库, 我应该如何收集数据 每次用户与我的应用程序交互时,我都要报告这一点。。那么我应该什么时候将文件写入S3?有多少? 我的意思是: -如果不立即发送信息,那么我可能会因为连接丢失而丢失信息,或者在收集信息并准备发送到S3时由于系统中的某些错误而丢失信息。。。 -如果我在每次用户交互时都将文件写入S3,那么我将得到数百个文件(每个文件上的数据最少),这些文件需要在复制到RedShift后进行管理、排序和删除。

我有一个web应用程序需要发送使用报告,我想使用Amazon RedShift作为数据仓库, 我应该如何收集数据

每次用户与我的应用程序交互时,我都要报告这一点。。那么我应该什么时候将文件写入S3?有多少? 我的意思是: -如果不立即发送信息,那么我可能会因为连接丢失而丢失信息,或者在收集信息并准备发送到S3时由于系统中的某些错误而丢失信息。。。 -如果我在每次用户交互时都将文件写入S3,那么我将得到数百个文件(每个文件上的数据最少),这些文件需要在复制到RedShift后进行管理、排序和删除。。这似乎不是一个好的解决办法

我错过了什么?我应该改用DynamoDB吗?我应该改用简单的红移插入吗
如果我确实需要将数据写入DynamoDB,我是否应该在复制后删除保留表。。最佳实践是什么

在任何情况下,在红移中避免数据重复的最佳做法是什么


谢谢你的帮助 有关更多详细信息,请参见DynamoDB时间序列表中的以下模式:

这个博客:

对于红移DynamoDB副本:


希望这能有所帮助。

在将事件日志导入Amazon Redshift之前,最好先聚合事件日志

好处是:

  • 您将更好地使用红移的平行性质;在S3中的一组较大文件(或来自大型DynamoDB表)上,将比单个插入或复制小文件快得多

  • 在将数据加载到红移之前,您可以对数据进行预排序(尤其是在排序基于事件时间的情况下)。这也有助于提高负载性能,减少对表的访问

在聚合事件并将其加载到红移之前,您可以在多个位置累积事件:

  • 本地文件到S3-最常见的方法是在客户端/服务器上聚合日志,并每x MB或y分钟将它们上载到S3。有许多日志追加器支持此功能,您不需要对代码进行任何修改(例如,或)。这只能通过容器配置来完成。不利的一面是,您可能会丢失一些日志,这些本地日志文件可以在上载之前删除

  • DynamoDB-正如@Swami所描述的,DynamoDB是积累事件的一个非常好的方法

  • -最近发布的服务也是一种很好的方式,可以快速可靠地将您的事件从各种客户端和服务器流式传输到中心位置。事件是按插入顺序排列的,这样可以方便地在以后加载它,并将其预先排序为红移。这些事件在Kinesis中存储24小时,例如,为了获得更好的性能,您可以安排每小时从Kinesis读取并加载到红移

请注意,所有这些服务(S3、SQS、DynamoDB和Kinesis)允许您从最终用户/设备直接推送事件,而无需通过中间web服务器。这可以显著提高服务的高可用性(如何处理增加的负载或服务器故障)和系统成本(您只需为使用的内容付费,而不需要仅为日志而使用未充分利用的服务器)

例如,请参见此处如何获取移动设备的临时安全令牌:

允许与这些服务直接交互的另一组重要工具是各种s。例如,、和

关于重复数据消除要求;在上面的大多数选项中,您可以在聚合阶段执行此操作,例如,当您从Kinesis流中读取时,您可以检查事件中是否存在重复,但在将其放入数据存储之前分析大量事件缓冲区

但是,您也可以在红移中执行此检查。一个好的做法是
将数据复制到一个暂存表中,然后复制到一个组织良好、排序良好的表中


您可以实现的另一个最佳实践是具有每日(或每周)表分区。即使您希望有一个大的长事件表,但大多数查询都是在一天内运行的(例如,最后一天),您也可以创建一组具有类似结构的表(events_01012014、events_01022014、events_01032014…)。然后您可以
选择进入。。。其中,日期=…
将添加到每个表中。当您想查询多天的数据时,您可以使用。

这里有点自私,并准确描述事件分析平台的功能。他们使用这种独特的方式从客户端收集事件日志,并将其聚合到S3上

他们使用Cloudfront来实现这一点。您可以做的是,在其中一个S3存储桶中托管一个像素,并将该存储桶放在CloudFront发行版后面作为原点。为同一CloudFront启用S3存储桶的日志

无论何时在客户端调用该像素,都可以将日志作为url参数发送(类似于google analytics)。然后,可以使用Copy来丰富这些日志并将其添加到红移数据库中

这解决了日志聚合的目的。此设置将为您处理所有这些


您还可以查看哪个是开源分析服务,看看是否可以根据您的需要对其进行修改。

虽然这里已经有一个公认的答案,但AWS推出了一个新的服务,名为,它根据我们的要求处理聚合
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(bucket_name)
k = Key(bucket)
k.key = s3_key_name
k.set_contents_from_file(file_handle, cb=progress, num_cb=20, 
reduced_redundancy=use_rr )
sql="""
copy %s from '%s' 
CREDENTIALS 'aws_access_key_id=%s;aws_secret_access_key=%s' 
DELIMITER '%s' 
FORMAT CSV %s 
%s 
%s 
%s;""" % (opt.to_table, fn, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,opt.delim,quote,gzip, timeformat, ignoreheader)