0

DynamoDb 用にテーブルを最適に設計する方法を誰かが理解してくれることを願っていました。特定のユーザーが別のユーザーのプロファイルにアクセスしたことを追跡するために使用されるアプリケーションを構築しています。

現在、1 つのエントリに次のフィールドが含まれる MongoDB があります。

  • ユーザーID
  • 訪問したプロファイル ID
  • 日にち
  • 状態
  • isMobile

遅すぎないように、これを DynamoDB にどのように変換しますか? ステータスと isMobile を有効にして、特定の userId を持つすべてのアイテムを選択するには、検索クエリを実行する必要があります。私の鍵は何でしょうか?制限機能を使用して、最新の x エントリのみを要求できますか (日付でソートされていますか?)。

DynamoDB の使用方法はとても気に入っていますが、通常の NoSQL データベースとキー値の nosql データベースの間でクリックするのは少し複雑に思えます。

4

1 に答える 1

3

これを行うにはいくつかの方法があります。おそらく、このテーブルで実行する可能性のある他のクエリに依存します。

  1. あなたHashKeyのテーブルを にしてuserIdから、 を(例えば) にするRangeKeyことができます。次に、を使用してクエリを実行できます(および を設定して昇順で返します)。<status>:<isMobile>:<date>active:true:2013-03-25T04:05:06.789ZBEGINS_WITHRangeKeyConditionScanIndexForwardfalse

    したがって、 ofとof1234abcdを持つユーザー ID の最新の 20 行を検索したいとします(「[それら] を有効にする」とは、これが意味することだと思います)。クエリは次のようになります。statusactiveisMobiletrue

    {
      "TableName": "Users",
      "Limit": 20,
      "HashKeyValue": { "S": "1234abcd" },
      "RangeKeyCondition": {
        "ComparisonOperator": "BEGINS_WITH"
        "AttributeValueList": [{ "S": "active:true:" }],
      },
      "ScanIndexForward": false
    }
    
  2. 別の方法は、 を作成することHashKey <userId>:<status>:<isMobile>であり、RangeKeydate. この場合、 は必要ありませんRangeKeyCondition(この例では、HashKeyValueは になります{ "S": "1234abcd:active:true" })。

于 2013-02-25T00:28:47.587 に答える