我希望有人能帮我理解如何最好地为DynamoDb设计表格。我正在构建一个应用程序,用于跟踪某个用户对其他用户的个人资料的访问。
目前我有一个MongoDB,其中一个条目包含以下字段:
如何以不会太慢的方式转换为DynamoDB?我需要进行搜索查询以选择具有特定userId的所有项目,并将状态和isMobile视为有效。我的钥匙是什么?我是否可以使用限制功能仅请求最新的x条目(按日期排序?)。
我非常喜欢DynamoDB的使用方式,但在常规NoSQL数据库和键值nosql数据库之间进行点击似乎有点复杂。
答案 0 :(得分:3)
有几种方法可以做到这一点 - 它可能取决于你可能想在这张桌子上做的任何其他查询。
将表格的HashKey
设为userId
,然后RangeKey
可以为<status>:<isMobile>:<date>
(例如active:true:2013-03-25T04:05:06.789Z
)。然后,您可BEGINS_WITH
使用RangeKeyCondition
中的ScanIndexForward
(false
设置为1234abcd
以升序返回。
因此,假设您要查找最新的20个用户ID status
行,其active
isMobile
和true
{
"TableName": "Users",
"Limit": 20,
"HashKeyValue": { "S": "1234abcd" },
"RangeKeyCondition": {
"ComparisonOperator": "BEGINS_WITH"
"AttributeValueList": [{ "S": "active:true:" }],
},
"ScanIndexForward": false
}
(我猜你的意思是“把它们带入影响”),然后你的query会是这样的:
HashKey
另一种方法是制作<userId>:<status>:<isMobile>
RangeKey
,date
只是RangeKeyCondition
。在这种情况下,您不需要HashKeyValue
(在示例中,{ "S": "1234abcd:active:true" }
将是{{1}})。