2014-02-28 104 views
0

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

我的情况是这样的: 我有一个表A与字段ID,名称,位置,值

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

回答

0

陈砸在鼻子上。乔伊,你描述的(GET,然后认沽)的情况相当于2个MySQL的函数

SELECT * 
    FROM TABLE 
    WHERE key = x 

    UPDATE TABLE 
    SET var = param 
    WHERE key = x 

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

所以,如果原来的项目看起来像:<密钥ID = 1,第一名称=约翰,最后名称= DOE,年龄= 22>

和执行的PutItem:<密钥ID = 1,位置=纽约>

的最后一个项目是这样的:<密钥ID = 1,位置=纽约>

如果你在的地方PutItem的执行的updateItem那么你会inste广告GET:

<密钥ID = 1,第一名称=约翰,最后名称= DOE,年龄= 22,位置=纽约>

下面是使用的updateItem与Java的链接。还有使用的例子。净和PHP

UpdateItem for Java

+0

我的情况是: 我有场ID,名称,位置值的表一。 名称+位置可以唯一地定义一行。所以现在我想在名称和位置满足某些条件时更新字段“值”,但我不知道该ID。因此,如果我使用mysql,那么我可以通过“更新设置值= XXX其中name =”abc“和location =”123“”来更新它。但是当我使用dynamoDB时,我必须先获得主键ID。然后使用密钥更新该项目。所以我的问题是,DynamoDB是否也支持与MySQL类似的更新操作。 谢谢! – Joey

+0

DynamoDB不支持您所描述的功能,但我建议您阅读文档/开发人员指南。据我所知,你甚至不需要一个ID,或者你可以让ID是一个属性。 – Hanny

+0

DynamoDB不支持您描述的功能,但我建议您阅读文档/开发人员指南,特别是关于散列和范围键的内容。解决您的问题是数据模式。由于_name_和_location_是唯一的,所以您可以设置hash-key = _name_和range-key = _location_(反之亦然,选择最具多样性的散列键),这样您就可以一步更新该行。你甚至不需要_ID_,或者你可以让_ID_成为一个属性。这里是链接[数据模型](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html) – Hanny

0

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

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

相关问题