DynamoDB型号/钥匙建议



我希望有人能帮助我了解如何为DynamoDb最好地设计我的表。我正在构建一个应用程序,用于跟踪某个用户对另一个用户档案的访问。

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

  • userId
  • 已访问ProfileId
  • 日期
  • 状态
  • isMobile

这将如何以一种不会太慢的方式转化为DynamoDB?我需要进行搜索查询,以选择具有特定userId的所有项目,从而影响状态和isMobile。我的钥匙是什么?我可以使用限制功能只请求最新的x个条目吗(按日期排序?)。

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

有几种方法可以做到这一点,这可能取决于您可能想对该表进行的任何其他查询。

  1. 使表中的HashKeyuserId,然后RangeKey可以为<status>:<isMobile>:<date>(例如active:true:2013-03-25T04:05:06.789Z)。然后可以使用RangeKeyCondition中的BEGINS_WITH进行查询(ScanIndexForward设置为false以升序返回)。

    假设您想查找用户ID 1234abcd的最近20行,它们的statusactiveisMobiletrue(我猜这就是您所说的"影响[它们]"的意思),那么您的查询将如下所示:

    {
      "TableName": "Users",
      "Limit": 20,
      "HashKeyValue": { "S": "1234abcd" },
      "RangeKeyCondition": {
        "ComparisonOperator": "BEGINS_WITH"
        "AttributeValueList": [{ "S": "active:true:" }],
      },
      "ScanIndexForward": false
    }
    
  2. 另一种方法是使HashKey成为<userId>:<status>:<isMobile>,而RangeKey将只是date。在这种情况下,您不需要RangeKeyCondition(在本例中,HashKeyValue将是{ "S": "1234abcd:active:true" })。

相关内容

  • 没有找到相关文章

最新更新