我希望有人能帮助我了解如何为DynamoDb最好地设计我的表。我正在构建一个应用程序,用于跟踪某个用户对另一个用户档案的访问。
目前我有一个MongoDB,其中一个条目包含以下字段:
- userId
- 已访问ProfileId
- 日期
- 状态
- isMobile
这将如何以一种不会太慢的方式转化为DynamoDB?我需要进行搜索查询,以选择具有特定userId的所有项目,从而影响状态和isMobile。我的钥匙是什么?我可以使用限制功能只请求最新的x个条目吗(按日期排序?)。
我真的很喜欢DynamoDB的使用方式,但在常规NoSQL数据库和键值NoSQL数据库之间点击似乎真的有点复杂。
有几种方法可以做到这一点,这可能取决于您可能想对该表进行的任何其他查询。
-
使表中的
HashKey
为userId
,然后RangeKey
可以为<status>:<isMobile>:<date>
(例如active:true:2013-03-25T04:05:06.789Z
)。然后可以使用RangeKeyCondition
中的BEGINS_WITH
进行查询(ScanIndexForward
设置为false
以升序返回)。假设您想查找用户ID
1234abcd
的最近20行,它们的status
为active
,isMobile
为true
(我猜这就是您所说的"影响[它们]"的意思),那么您的查询将如下所示:{ "TableName": "Users", "Limit": 20, "HashKeyValue": { "S": "1234abcd" }, "RangeKeyCondition": { "ComparisonOperator": "BEGINS_WITH" "AttributeValueList": [{ "S": "active:true:" }], }, "ScanIndexForward": false }
-
另一种方法是使
HashKey
成为<userId>:<status>:<isMobile>
,而RangeKey
将只是date
。在这种情况下,您不需要RangeKeyCondition
(在本例中,HashKeyValue
将是{ "S": "1234abcd:active:true" }
)。