首页 文章

DynamoDB模型/密钥建议

提问于
浏览
0

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

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

  • userId

  • visitedProfileId

  • 日期

  • 状态

  • 是移动

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

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

1 回答

  • 3

    有几种方法可以做到这一点 - 它可能取决于您可能想要在此表上执行的任何其他查询 .

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

    所以,假设你想找到最近的20行用户ID 1234abcdstatusactiveisMobiletrue ('m guessing that'是你的意思"taking [them] into affect"),那么你的query看起来像:

    {
      "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" } ) .

相关问题