【问题标题】:Does DynamoDB support update operations like relational dbDynamoDB 是否支持关系数据库等更新操作
【发布时间】:2014-03-01 09:35:41
【问题描述】:

我知道我们可以通过两个操作进行更新,首先通过查询数据库获取主键,然后通过 put 操作更新它。但是DynamoDB是否支持通过一个操作更新作为关系数据库(例如mysql)?由于两个操作会花费更多的网络传输时间。

我的情况是: 我有一个表 A,其中包含 ID、Name、Location、Value 字段。

并且name+location可以唯一定义一行。 所以现在我想在名称和位置满足某些条件时更新字段“值”,但我不知道 ID。因此,如果我使用 mysql,那么我可以通过“Update A set value = XXX where name = "abc" and location="123"" 来更新它。 但是当我使用 dynamoDB 时,我必须先获取主键 ID。 然后使用密钥更新项目。所以我的问题是,DynamoDB 是否也支持与 mysql 类似的更新操作。 谢谢!

【问题讨论】:

    标签: amazon-dynamodb operation


    【解决方案1】:

    Chen 打了它的鼻子。 Joey,你描述的情况(Get后跟一个Put)相当于2个mysql函数

       SELECT * 
       FROM TABLE
       WHERE key = x
    
       UPDATE TABLE 
       SET var = param
       WHERE key = x
    

    您是否看到 Select/PutItem 不是更新过程的一部分?只要您有密钥,就不需要执行查询。我假设您在 PutItem 请求之前执行 GetItem,因为 PutItem 替换了整个项目/行(即删除了 Put 请求中未指定的所有属性)。

    所以如果原始项目看起来像:

    然后您执行以下 PutItem:

    最终项目如下所示:

    如果您执行 UpdateItem 代替 PutItem,那么您将获得:

    这里是使用 Java 的 UpdateItem 的链接。还有使用.net和php的例子

    UpdateItem for Java

    【讨论】:

    • 我的情况是:我有一个表 A,其中包含字段 ID、名称、位置、值。并且name+location可以唯一定义一行。所以现在我想在名称和位置满足某些条件时更新字段“值”,但我不知道 ID。因此,如果我使用 mysql,那么我可以通过“Update A set value = XXX where name = "abc" and location="123"”来更新它。但是当我使用 dynamoDB 时,我必须先获取主键 ID。然后使用密钥更新项目。所以我的问题是,DynamoDB 是否也支持与 mysql 类似的更新操作。谢谢!
    • DynamoDB 不支持您描述的功能,但我建议您阅读文档/开发人员指南。据我了解,您甚至不需要 ID,或者您可以让 ID 成为属性。
    • DynamoDB 不支持您所描述的功能,但我建议您阅读文档/开发人员指南,尤其是关于哈希和范围键的内容。解决您的问题的是数据模式。由于 namelocation 是唯一的,因此您设置 hash-key = name 和 range-key = location (或反之亦然,选择最多样化的哈希键),这样您就可以一步更新行。你甚至不需要 ID 或者你可以让 ID 成为一个属性。这是链接Data Model
    【解决方案2】:

    如果我错了,请纠正我,但更新项目只会消耗 1 次操作,它会获取哈希键值并在存在时更新它,否则将创建新项目(最多 1 kb 项目)

    这里是参考链接:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#CapacityUnitCalculations

    希望有帮助

    【讨论】:

      【解决方案3】:

      您不需要先获取主键。如果您知道主键,则无需获取任何内容,只需使用UpdateItem API 调用即可更新您的项目。

      如果仍不清楚,请编辑您的问题并添加一些您正在尝试执行的代码示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 2017-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多