【问题标题】:Amazon Dynamo DB - Scan & Update table records - iOS SDKAmazon Dynamodb - 扫描和更新表记录 - iOS 开发工具包
【发布时间】:2012-11-27 06:49:24
【问题描述】:

是否可以使用单个 API 扫描和更新 DynamoDB 表中的记录。考虑我在 Items 表中有项目列表,其中包含字段(ItemID、ItemName、ItemAssigned)。 ItemID 是表的哈希键。项目 ID 命名为 、Item1、Item2、Item3 等,用户将不知道表中的项目是什么。因此,在应用程序中,如果用户点击“获取项目”按钮,则会获取随机项目并将其分配给他。然后 ItemAssigned 设置为 YES。项目选项卡 然后项目将不会分配给任何其他用户。这就是发生的事情。

步骤:
1. 点击“获取物品”
2. 扫描 Items 表中的第一项,其中 ItemAssigned = NO
3.在主屏幕中显示项目
4.更新Items表中的item,设置ItemAssigned = YES

如果一个用户一次尝试获取该项目,这很有效。当两个用户 A 和 B 试图同时获取一个项目,并且相同的项目分配给两个用户时,就会出现问题。

所以首先 A 获取项目。在更新 Items 表以设置 ItemAssigned = YES 之前,B 还获取相同的项目。现在 A 和 B 的主屏幕都显示相同的项目。这是错误的。

唯一的方法是使用单个 API 扫描和更新 Items 表。在 Amazon DynamoDB 中是否有可能做到这一点?

谢谢。

【问题讨论】:

    标签: iphone objective-c ios amazon-web-services amazon-dynamodb


    【解决方案1】:

    不幸的是,没有 API 可以在单个操作中进行扫描和更新。您可能需要查看条件 PUT 项目,因为这将允许您实现类似 checkout 的功能,以便您可以设置 "ItemAssigned = YES" 仅当 "ItemAssigned = NO ”。

    您的应用程序代码需要在处理扫描结果时优雅地处理异常,但将允许您请求的工作流只允许一个用户查看该项目。

    API docs for PUT item

    【讨论】:

    • 感谢您的回答。这里的问题是扫描和更新之间的延迟。在中间的间隙中,其他一些用户也扫描了相同的项目。我觉得 DynamoDB 根本不适合这类应用程序。我说的对吗?
    • @EmptyStack 是的,会有一段时间多个用户可以从扫描中看到相同的项目,但是使用条件更新和一些额外的逻辑可以确保只有一个用户实际看到该项目(s)。
    • 谢谢。我明白你的意思。但这里的问题是,在第一个用户更新项目之前,第二个用户有更多机会获取项目。
    • @EmptyStack 是的,但如果目的是在向用户显示项目时更新它们,您可以扫描、执行和条件更新,如果成功,则显示给用户。如果条件更新失败,则忽略该项目。
    猜你喜欢
    • 2023-04-09
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多