python - 在 Amazon 的 DynamoDB 中编写分布式队列

标签 python amazon-web-services amazon-dynamodb

我正在寻找使用 Python 将大量高分辨率图像(数百万)目录转换为缩略图。我有一个 DynamoDB 表,用于存储 S3 中每个图像的位置。

与其在一个 EC2 实例上处理所有这些图像(需要数周时间),不如使用一组实例编写一个分布式应用程序。

我可以使用什么技术来编写一个队列,允许节点从数据库中“ check out ”图像、调整图像大小,并使用生成的缩略图的新尺寸更新数据库?

具体来说,我担心原子性和并发性——如何使用 DynamoDB 防止两个节点同时 check out 同一个作业?

最佳答案

您可以采用的一种方法是使用 Amazon's Simple Queue Service(SQS)与 DynamoDB 结合使用。所以你可以做的是将消息写入队列,其中包含类似于 DynamoDB 中图像条目的哈希键的内容。每个实例都会定期检查队列并抓取消息。当一个实例从队列中抓取一条消息时,它会在给定的时间内对其他实例不可见。然后,您可以查找并处理图像并将消息从队列中删除。如果由于某种原因在处理图像时出现问题,消息将不会被删除,并且它会变得可见以供其他实例抓取。

另一种可能更复杂的方法是使用 DynamoDB 的 conditional update mechanism实现锁定方案。例如,您可以向数据模型添加一个“beingProcessed”属性,即 0 或 1。实例可以做的第一件事是对该列执行条件更新,将值更改为 1,前提是初始值为0. 围绕使它成为一个适当的/稳健的锁定机制,这里可能还有更多工作要做....

关于python - 在 Amazon 的 DynamoDB 中编写分布式队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12228056/

相关文章:

python - 如何快速禁用 python 中的 try 语句进行测试?

c# - Dynamodb putitem 功能无法正常工作

java - 如何在 spring boot 中使用环境变量动态设置 tableName?

python - 我如何有两个字段可供选择?

python - 有什么办法可以防止在循环中打开多个 gz 文件时出现 MemoryError 吗?

python - python 二维数组中所有列的总和

ios - AFAmazonS3Manager 可接受的图像内容类型

json - 在 CloudFormation 中创建多个队列配置

python - 如何使用 Boto3 (Python) 列出可用区域

javascript - 页面无法工作错误,Node js 卡住