轮询新 S3 对象的最佳方法?

Posted

技术标签:

【中文标题】轮询新 S3 对象的最佳方法?【英文标题】:Best approach to poll for new S3 objects? 【发布时间】:2012-12-02 03:04:28 【问题描述】:

所以我使用 S3 作为图像存储,图像通过各种软件不断上传到存储桶。

我还在构建一个 Rails 应用程序,让人们可以浏览 S3 上的图像库,但出于性能问题,我需要在本地数据库中保留一份有关图像的信息副本,因此我不必连接到每当有人查看图库时,S3 的 API。

现在,在我的数据库上没有信息的 S3 上获得新对象通知的最佳方法是什么?

我想创建一个工作人员来不断获取所有 S3 对象的列表并注册我们没有的对象,但是 S3 每个 API 请求限制为 1000 个对象,我在 @987654321 上找不到方法@ 指定下一个请求的偏移量,直到获取所有对象。

有人有想法吗?

附言我正在使用this gem 连接到 S3

【问题讨论】:

【参考方案1】:

如this answer here 和S3 documentation 中所述,S3 不允许在将新文件上传到 S3 后发出通知。通过轮询,您迟早会达到一些限制。

我会尝试不同的方法。转到您的上传软件并在那里添加通知。例如,您可以向 SNS 发送通知,告知正在完成新的上传。您可以订阅此 SNS 队列,然后在您的服务器上使用后台任务并在数据库中填写必要的信息。

但是,如果您想采用轮询方式,请查看您链接的文档页面中结果对象中的 Marker 属性。每个请求都会返回一个标记,如果您将此标记提供给下一个请求,您将获得第一个查询中不可用的下一个对象。

【讨论】:

谢谢,但是marker 返回nil,我们得到了数千个对象,返回的对象列表大小为 1000,这意味着有更多结果,但标记为 nil。很奇怪。

以上是关于轮询新 S3 对象的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

轮询与 AsyncCallback 回调 - 慢速 Web 服务的最佳方法?

基于异步响应轮询 Oracle 表的最佳方法

使用 Spring 集成轮询 S3 存储桶以获取文件

让javascript知道php服务器端登录/注销的推荐方法?

通过 zapier webhook 更新数据(不登录任务历史)

定期轮询具有大量文件的 AWS S3 存储桶中的新文件?