【问题标题】:DynamoDB Model/Keys AdviceDynamoDB 模型/键建议
【发布时间】:2013-02-25 08:28:47
【问题描述】:

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

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

  • 用户ID
  • visitedProfileId
  • 日期
  • 状态
  • 是移动

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

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

【问题讨论】:

    标签: nosql amazon-dynamodb


    【解决方案1】:

    您可以通过多种方式执行此操作 - 这可能取决于您可能希望在此表上执行的任何其他查询。

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

      假设您想查找用户 ID 1234abcd 的最近 20 行,其中包含 activestatustrueisMobile(我猜这就是您的意思“使 [他们] 受到影响”),那么您的 query 将如下所示:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 2018-10-27
      • 2019-08-10
      相关资源
      最近更新 更多