我正在尝试下载最近24小时添加到S3存储桶的新文件 - 但是,S3存储桶包含大量文件。
根据我的理解,s3桶使用平面结构,其中文件按键名称按字母顺序存储。
我编写了一个脚本来使用线程来存储存储在存储桶中的所有数据。但是,现在我拥有本地系统上的所有文件,我希望每24小时使用已上传到S3的任何新文件更新数据库。
大多数论坛建议使用“上次修改”来搜索正确的文件,然后下载与指定数据匹配的文件。
首先,从s3存储桶下载文件是否会更改“上次修改”?这似乎可能会导致问题。
其次,这似乎是一个非常有效的过程 - 每次搜索整个存储桶中的文件并使用正确的“最后修改”,然后下载...特别是因为存储桶包含大量文件。有没有更好的方法来实现这一目标?
最后,预修复过滤器是否会使此过程更有效?或者这还需要搜索所有文件。
提前致谢!
答案 0 :(得分:1)
我会用这个答案走另一个方向......你说得对,这个过程效率低下。我不确定您要处理的数据的数量和大小,但您基本上都在谈论您需要批处理作业才能下载新文件。搜索大量密钥是错误的方法,并且在AWS中是一种反模式。在根目录中,您需要在新文件进入时跟踪它们。
解决此问题的最佳方法是使用Lambda函数(python,因为您已经熟悉),当新对象存放在S3存储桶中时会触发该函数。当新文件进入时,该功能会起什么作用?
如果我必须解决这个问题,我会做以下其中一项:
我不能真正推荐其中一个,因为我不熟悉您的规模,成本偏好等。对于典型的用例,我可能会使用DynamoDB表解决方案。我想你会发现DynamoDB在Python3中与之交互是多么容易。
答案 1 :(得分:1)
此处添加的另一种解决方案..
您可以在S3上启用广告资源,它会为您提供存储桶中所有文件的每日报告,包括元数据,例如CSV格式的日期。
生成CSV时(第一个可能需要48小时),您可以生成一个可以相应下载的新文件列表。之前提到的dynamo lambda选项肯定会为您提供更实时的解决方案。
另外,我认为修改日期仅受PUT和POST操作的影响