我每天都在运行多个插件作为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的前缀并检索这些键的内容。
哪种方法会更好?还有其他建议吗?
答案 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