尝试将相同的值放在项目列表中并获取ValidationException

时间:2014-04-25 21:23:45

标签: amazon-dynamodb nosql

我最近决定试用amazon-dynamodb,并且仍然试图抓住它。

在我的用例中,我必须在项目中将两个与字符串列表(“SS”)具有相同值的变量存储到DynamoDB中。当我试图这样做时,这就是我得到的

[ValidationException: One or more parameter values were invalid: Input collection [X,X] contains duplicates.]
message: 'One or more parameter values were invalid: Input collection [X, X] contains duplicates.',
code: 'ValidationException',
time: Fri Apr 25 2014 20:38:21 GMT+0000 (UTC),
statusCode: 400

我的问题:有没有办法在项目列表中存储重复值?

任何有关此的知识将不胜感激。

2 个答案:

答案 0 :(得分:2)

在DynamoDB中,Hash KeyHash Key + Range Key组合必须是唯一的。

在哈希键(id)上只有表格id必须是唯一的。

id      
--------
john    
mary    
jane    

在哈希键(id)+范围键(timestamp)表格中,id + timestamp的组合必须是唯一的

id      | timestamp
--------|-------------------------
john    | 2014-04-28T07:53:29.000Z
john    | 2014-04-28T08:53:29.000Z
john    | 2014-04-28T09:53:29.000Z
mary    | 2014-04-28T07:53:29.000Z
jane    | 2014-04-28T07:53:29.000Z

如果您的表格的Hash Key类型为String Set,那么DynamoDB也希望String Set的值也是唯一的。

id (String Set)     
------------------------
["john"]
["mary"]
["jane"]
["john", "mary"]    
["john", "jane"]
["john", "jane", "mary"]

因此,如果您尝试实现以下目标,可以这样做,因为每个组合都是唯一的。

id (String Set)     
----------------
["john", "mary"]
["john", "jane"]

但是,如果您尝试实现以下内容,则会发生异常:

id (String Set)     
----------------
["john", "mary"]
["john", "mary"]

答案 1 :(得分:2)

不,字符串“列表”实际上是“设置”。如果您尝试添加带有重复项的值列表,它将为您提供此类异常;如果您尝试添加已在集合中的值,它将以静默方式成功。

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes