我使用DynamoDB和C#驱动程序,我有一个用户表。该表具有以下两个主键:
然后我尝试在上下文中使用Load方法加载用户:
_dynamoDBClient.Context.Load<User>(12345);
然后我得到以下例外:
&#34; exceptionMessage&#34;:&#34;无法转换属性的范围键值 创建&#34;,&#34; exceptionType&#34;:&#34; System.InvalidOperationException&#34;
如果我使用特定范围键加载,如:
_dynamoDBClient.Context.Load<User>(12345, "2015-01-01");
一切都好。
是否有办法只使用主哈希键加载一个键入的用户,即使该表有一个范围键?每次我需要获取用户时,我都不想发送创建日期。或者我是否想过了解dynamoDB中范围键的概念?
答案 0 :(得分:8)
Load
方法用于从表中检索单个项目,因此您需要提供整个主键。
在幕后,Load
方法实际上从本机AWS DynamoDB API调用GetItem
操作,该API对需要提供的属性有以下要求:
对于主键,您必须提供所有属性。对于 例如,使用哈希类型主键,您只需要提供 哈希属性。对于散列和范围类型的主键,您必须 提供hash属性和range属性。
来源: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html
如果您的表的主键由Hash和Range Key组成,那么您必须提供两者以匹配单个项目。
现在,当涉及到您的数据模型时,Range Key用于对通常一起检索的相关记录进行分组。在您的情况下,我假设有其他用户具有相同的UserId
,但具有不同的创建日期。如果您不需要将用户组合在一起(并按创建日期排序),那么只有Hash Key就足够了。
这两篇文章可能会帮助您确定适用于不同场景的正确密钥类型:
在dynamodb表中使用Hash范围有什么用? What is the use of a Hash range in a dynamodb table?
何时使用什么PK类型? DynamoDB: When to use what PK type?