私はあなたのイベント表については、以下の構造を示唆している:
- ユーザID -
- キー
ハッシュイベントの日付/時間(ミリ秒単位でタイムスタンプ) - 範囲をキー
- 期間
イベントタイムスタンプを範囲キーとして使用すると、(ユーザーが同じミリ秒で複数のイベントを持つことができない限り)イベントの一意性を確保するのに十分なはずです。シーケンス番号は必要ありません。
このようなスキーマを持つと、単純なqueryを使用して、日付のユーザーのすべてのイベントを取得できます。
残念ながら、DynamoDBは集約クエリをサポートしていないため、ユーザーのイベントの合計数をすばやく取得することはできません(すべてのレコードをクエリし、合計を手動で計算する必要があります)。 だから私はこのようなユーザーイベント統計の別のテーブル作成することをお勧め:
- ユーザID - キー
ハッシュ
- 日 - レンジキー
- events_cnt(ユーザーのためのイベントの合計数をあなたは、イベントテーブルに新しいレコードを追加した後、以下に示すよう
ので日付)のために、あなたはイベントが統計表にユーザーのための対抗インクリメントする必要があります。
var dynamodbDoc = new AWS.DynamoDB.DocumentClient();
var params = {
TableName : "user_events_stats",
Key: {
userId: "65716110-f4df-11e6-bc64-92361f002671" ,
date: "2017-02-17",
},
UpdateExpression: "SET #events_cnt = if_not_exists(#events_cnt, :zero) + :one",
ExpressionAttributeNames: {
"#events_cnt": "events_cnt",
},
ExpressionAttributeValues: {
":one": 1,
":zero": 0,
},
};
dynamodbDoc.update(params, function(err, data) {
});
出典
2017-02-17 07:19:36
xtx
シーケンス番号とは何ですか?イベントを参照するための自動増分フィールドのようなものか、それとも何ですか?もう1つの質問:すべてのユーザーのすべてのイベント、または特定のユーザーのすべてのイベントを照会しますか? – xtx
各行を一意にするためのシーケンス番号があり、これを提供します。一度に1人のユーザーに問い合わせるだけで済みます。 – Gustaf