在Amazon S3中存储多个结果

时间:2015-11-25 17:20:43

标签: amazon-web-services amazon-s3

我每天都在运行多个插件作为cron作业,以从不同的数据源收集一些数据。我打算将这些数据存储在两个地方:Amazon DynamoDB和Amazon S3。结果的元数据将存储在DynamoDB中。这也将保存数据将存储的S3存储桶名称。我的问题是如何在S3中将这些日常结果分组?我想到了几种方法:

(1)让我们说每天运行plugin1我会将它存储在桶名称为 - 的不同桶中。这种方法的优点是很容易检索每天的数据,但缺点是我们现在只有一个插件就有365个桶。所以,如果我有n个插件,我将在一年内拥有365次n个桶。我们可以在一段时间间隔后删除存储桶以减少存储桶数量(比如3个月)

(2)我也可以使用每个插件一个桶,并使用guid作为我的键的前缀。像guid / result_n一样,result_n是我为该插件获得的第n个结果。我还要添加一个密钥,让我们称之为plugin_runs,它将包含一个字典列表,其中每个字典都有这种格式{date:execution_id}。然后我可以在给定的日期找到该日期的execution_id的前缀并检索这些键的内容。

哪种方法会更好?还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

鉴于AWS只允许您为每个帐户创建100个存储桶,我会说#2是一个更好的方法。

但是你真的只需要一个桶,每个对象上都有一个键前缀来组织它们。例如,AWS Kinesis Firehose为您创建对象以及它们使用的命名约定。如果它适用于他们,它应该适合你:

  

Amazon S3对象名称格式

     

Firehose之前添加格式为YYYY / MM / DD / HH的UTC时间前缀   将对象放入Amazon S3。前缀转换为Amazon S3   文件夹结构,其中每个标签用正斜杠分隔(/)   成为子文件夹。您可以通过添加来修改此文件夹结构   您自己的带有正斜杠的顶级文件夹(例如,   myApp / YYYY / MM / DD / HH)或将文本添加到YYYY顶级文件夹   名称(例如,myApp YYYY / MM / DD / HH)。这是通过   在创建传递流时指定S3前缀,或者通过   使用Firehose控制台或Firehose API。

http://docs.aws.amazon.com/firehose/latest/dev/basic-deliver.html