2017-07-20 1 views
1

私は、entityID(ハッシュキー)とclickedCounterという2つのフィールドを持つDynamoDBテーブルを持っています。 clickedCounterは、ユーザーがentityIDを何回クリックしたかをカウントする自動インクリメントカウンタです。これは、clickedCounterをDynamoDBのバージョン属性(JavaアノテーションDynamoDBVersionAttribute)としてマークしました。 このテーブルでは、各entityIDが何回クリックされたかを簡単に統計情報を得ることができましたが、は最後のN日間(たとえば過去7日間)ごとの集計統計情報を取得する必要があります。これをどのようにアーカイブできますか?DynamoDBのカウンタフィールドの統計情報は最後のN日間に限ります

潜在的な解決策として、さらに2つのフィールドを追加できます:expiredTime(実際には属性を保存する時間なので、古いデータは自動的に削除されます)とdayOfYear。ここで、dayOfYearはハッシュキーで、entityIDは範囲キ​​ーです。実体識別子が唯一の最後の3日間1005に等しいため例えば、1月10日のために、このアプリは、以下のデータを格納する(データ前回日間TTLマネージャによって削除されます):

dayOfYear entityID clickedCounter expiredTime 
10   1005  9    … 
9   1005  10    …      
8   1005  19    …     
7   1005  12    …     

の統計情報を取得するには上記の例では、ハッシュと範囲キーのペア(この例では、< 10,1005>、< 9、1005>、< 8、1005>、< 7、1005>)によるロードリクエストを行い、すべてのclickedCounter値(ここでは合計は50です)。

より簡単で正確な方法で最後のN日間に要約統計情報を取得することは可能ですか?

+0

私はイベント「clickedCounter」、代わりにentityID(ハッシュキー)、clickedTimestamp(ソートキー)を持っていません。合計を取得したい場合は、ここで説明したようにScannedCountを取得してください。 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html – kosa

答えて

0

DynamoDBは、分析DBとしてではなく、大規模な高速検索を提供するように設計されています。分析クエリには分析ツールを使用する方がよいでしょう。このような集計に適したカウンタを作成することは可能かもしれませんが、平均や別の時間枠などの別の計算をしたい場合は、カウンタが役に立たなくなります。

DynamoDB streamを使用してDynamoDBテーブルの変更を取得し、これらの変更をRedshiftなどの分析データストアに保存するか、単純にS3(Kinesis Firehoseを使用)に記録します。その分析データストアにログの変更があったら、そのログに柔軟なクエリを実行できます。たとえば、Athena(またはS3ツールの他のSQL)を使用して、S3のデータを照会することができます。

0

DynamoDBには、分析クエリのネイティブサポートがありません。これを行う1つの方法は、EMR HiveまたはRedshiftとの統合を使用することです。 DynamoDBからこれらのシステムのいずれかにデータをエクスポートし、このスナップショットでクエリを実行するか、またはEMR Hiveを使用してDynamoDBデータに対してクエリを実行できます。いずれの場合でも、データに対して任意のSQLクエリを実行することができます。

に関係なく、あなたがそれを使用するもののツール、それは高価な(あなたが提供するのRCU/WCUsの多くを必要とする)または低速のいずれかになりますので、あなたのテーブル内のすべてのデータを読み込みませんので、あなたはできません覚えておいてくださいこれらのクエリを対話的に実行することができます。

@Guyは、DynamoDBストリームとLambdaを使用して集約テーブルを管理することをお勧めします。これははるかに高速に動作し、より安価になりますが、作成する必要のあるクエリごとに別のテーブルを維持することになりますので、柔軟性に欠けます。

関連する問題