Nosql DynamoDB型号/钥匙建议

Nosql DynamoDB型号/钥匙建议,nosql,amazon-dynamodb,Nosql,Amazon Dynamodb,我希望有人能帮助我了解如何最好地为DynamoDb设计我的桌子。我正在构建一个应用程序,用于跟踪某个用户对另一个用户的个人资料的访问 目前我有一个MongoDB,其中一个条目包含以下字段: 用户ID visitedProfileId 日期 地位 伊斯莫比尔 如何将其转换为DynamoDB,而不会太慢?我需要进行搜索查询,以选择具有特定用户ID的所有项目,并将状态和isMobile生效。我的钥匙是什么?我是否可以使用限制功能仅请求最新的x条目(按日期排序?) 我非常喜欢DynamoDB的使用方

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

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

  • 用户ID
  • visitedProfileId
  • 日期
  • 地位
  • 伊斯莫比尔
如何将其转换为DynamoDB,而不会太慢?我需要进行搜索查询,以选择具有特定用户ID的所有项目,并将状态和isMobile生效。我的钥匙是什么?我是否可以使用限制功能仅请求最新的x条目(按日期排序?)


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

有几种方法可以做到这一点,这可能取决于您可能希望在此表上执行的任何其他查询

  • 将表的
    HashKey
    设置为
    userId
    ,然后
    RangeKey
    可以是
    (例如
    活动:true:2013-03-25T04:05:06.789Z
    )。然后,您可以在
    RangeKeyCondition
    中使用
    开头(并且
    ScanIndexForward
    设置为
    false
    以升序返回)

    假设你想找到最近的20行用户ID
    1234abcd
    ,它们的
    状态为
    active
    ,而
    isMobile
    状态为
    true
    (我猜这就是你所说的“使[它们]生效”)那么你的

    {
      "TableName": "Users",
      "Limit": 20,
      "HashKeyValue": { "S": "1234abcd" },
      "RangeKeyCondition": {
        "ComparisonOperator": "BEGINS_WITH"
        "AttributeValueList": [{ "S": "active:true:" }],
      },
      "ScanIndexForward": false
    }
    
  • 另一种方法是将
    哈希键设置为
    ,而
    范围键将只是
    日期。在这种情况下,您不需要
    RangeKeyCondition
    (在本例中,
    HashKeyValue
    将是
    {S:“1234abcd:active:true”}


  • 有两种方法可以做到这一点,这可能取决于您可能希望在此表上执行的任何其他查询

  • 将表的
    HashKey
    设置为
    userId
    ,然后
    RangeKey
    可以是
    (例如
    活动:true:2013-03-25T04:05:06.789Z
    )。然后,您可以在
    RangeKeyCondition
    中使用
    开头(并且
    ScanIndexForward
    设置为
    false
    以升序返回)

    假设你想找到最近的20行用户ID
    1234abcd
    ,它们的
    状态为
    active
    ,而
    isMobile
    状态为
    true
    (我猜这就是你所说的“使[它们]生效”)那么你的

    {
      "TableName": "Users",
      "Limit": 20,
      "HashKeyValue": { "S": "1234abcd" },
      "RangeKeyCondition": {
        "ComparisonOperator": "BEGINS_WITH"
        "AttributeValueList": [{ "S": "active:true:" }],
      },
      "ScanIndexForward": false
    }
    
  • 另一种方法是将
    哈希键设置为
    ,而
    范围键将只是
    日期。在这种情况下,您不需要
    RangeKeyCondition
    (在本例中,
    HashKeyValue
    将是
    {S:“1234abcd:active:true”}