2017-09-09 12 views
0

dyanmoデシベルで、このスキーマを検討し、我々は、いずれかが、そのone.we必要クエリのSQLクエリをアイデアを与えることができ、私はdyanmo DBの初心者だ質問フラスコdyanmoクエリ

[ 
    { 
     'TableName': "user_detail", 
     'KeySchema': [ 
      {'AttributeName': "timestamp", 'KeyType': "HASH"}, 
      {'AttributeName': "question", 'KeyType': "RANGE"}, 
     ], 
     'AttributeDefinitions': [ 
      {'AttributeName': "timestamp", 'AttributeType': "S"}, 
      {'AttributeName': "question", 'AttributeType': "N"}, 
     ], 
     'ProvisionedThroughput': { 
      'ReadCapacityUnits': 40, 
      'WriteCapacityUnits': 40]   } 
    } 
] 

のカウント事前

答えて

1

に、私はいくつかのポインタをスローしますselect count(question) from user_detail where question =1

おかげでそのようになります。

オプション1: - - :

1)スキャンAPI - テーブル全体をスキャンしますDynamoDBのは、APIの2種類があります。ハッシュキーの値がわからない場合は、スキャンapiを使用する必要があります。

2)クエリAPI - ハッシュキーを使用してテーブルをクエリします。クエリAPIのハッシュキーは必須です

ハッシュキーの値はわかりません。したがって、Query APIを使用することはできません。ただし、パフォーマンスとコストの面で非常にコストのかかる操作であるスキャンAPIを使用できます。だから、数百万のアイテムのテーブルを持っているならば避けるべきです。

代替はとしてソート(おそらくtimestamp)キーハッシュキーと他のいくつかのフィールドとしてquestion属性でグローバルセカンダリインデックス(GSI)を作成することです。このようにして、GSIでQuery APIを使用できるはずです。しかし、これでは問題は完全に解決されません。

DynamoDBには、count、min、maxなどの集計関数はありません。したがって、クライアント側で結果セット内のアイテムの数を数える必要があります。

オプション2: -

あなたは、データモデルを変更するオプションを持っている場合は、後述するように、上記の表再設計することができます - 私は使用して多くのユースケースを見てきました

question - hash key 
timestamp - range key 

timestampを範囲キーとして使用します。すべてのユースケースのクエリアクセスパターン(QAP)を分析し、それに応じて決定してください。