DynamoDB模型/密钥建议

时间:2013-02-23 21:58:18

标签: nosql amazon-dynamodb

我希望有人能帮我理解如何最好地为DynamoDb设计表格。我正在构建一个应用程序,用于跟踪某个用户对其他用户的个人资料的访问。

目前我有一个MongoDB,其中一个条目包含以下字段:

  • userId
  • visitedProfileId
  • 日期
  • 状态
  • isMobile

如何以不会太慢的方式转换为DynamoDB?我需要进行搜索查询以选择具有特定userId的所有项目,并将状态和isMobile视为有效。我的钥匙是什么?我是否可以使用限制功能仅请求最新的x条目(按日期排序?)。

我非常喜欢DynamoDB的使用方式,但在常规NoSQL数据库和键值nosql数据库之间进行点击似乎有点复杂。

1 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点 - 它可能取决于你可能想在这张桌子上做的任何其他查询。

  1. 将表格的HashKey设为userId,然后RangeKey可以为<status>:<isMobile>:<date>(例如active:true:2013-03-25T04:05:06.789Z)。然后,您可BEGINS_WITH使用RangeKeyCondition中的ScanIndexForwardfalse设置为1234abcd以升序返回。

    因此,假设您要查找最新的20个用户ID status行,其active isMobiletrue { "TableName": "Users", "Limit": 20, "HashKeyValue": { "S": "1234abcd" }, "RangeKeyCondition": { "ComparisonOperator": "BEGINS_WITH" "AttributeValueList": [{ "S": "active:true:" }], }, "ScanIndexForward": false } (我猜你的意思是“把它们带入影响”),然后你的query会是这样的:

    HashKey
  2. 另一种方法是制作<userId>:<status>:<isMobile> RangeKeydate只是RangeKeyCondition。在这种情况下,您不需要HashKeyValue(在示例中,{ "S": "1234abcd:active:true" }将是{{1}})。