次の式を使用して「トレンド」投稿を計算することを計画しています。
Trending Score = (p - 1) / (t + 2)^1.5
p =ユーザーからの投票(ポイント)。t =送信からの時間(時間単位)。
DynamoDB(Amazonのnosqlデータベースサービス)を使用してトレンドの投稿をクエリできるように、データベーステーブルを構造化する方法についてのアドバイスを探しています。
DynamoDBには、テーブル内のアイテムごとに主キーが必要です。主キーは、ハッシュ属性(文字列または数値)と範囲属性(文字列または数値)の2つの部分で構成できます。ハッシュ属性はアイテムごとに一意である必要があり、必須です。範囲属性はオプションですが、DynamoDBを使用すると、範囲属性にソートされた範囲インデックスが作成されます。
私が考えていた構造は次のとおりです。
TableName:ユーザー
HashAttribute: user_id
RangeAttribute: NONE
OtherFields: first_name, last_name
TableName:投稿
HashAttribute: post_id
RangeAttribute: NONE
OtherFields: user_id,title, content, points, categories[ ]
TableName:カテゴリ
HashAttribute: category_name
RangeAttribute: post_id
OtherFields: title, content, points
TableName:カウンター
HashAttribute: counter_name
RangeAttribute: NONE
OtherFields: counter_value
したがって、次のテーブル設定で行うリクエストの種類の例を次に示します(例:user_id = 100)。
User Action 1:ユーザーの処置1:
ユーザーが新しい投稿を作成し、2つのカテゴリ(野球、サッカー)の投稿にタグを付けます
クエリ(1):
counter_name='post_id'とincrement+1の現在の値を確認し、新しいpost_idを使用します
クエリ(2):投稿テーブルに以下を挿入します。
post_id=value_from_query_1, user_id=100, title=user_generated, content=user_generated, points=0, categories=['baseball','soccer']
クエリ(3):
以下をCategoriesテーブルに挿入します。
category_name='baseball', post_id=value_from_query_1, title=user_generated, content=user_generated, points=0
クエリ(4):
以下をCategoriesテーブルに挿入します。
category_name='soccer', post_id=value_from_query_1, title=user_generated, content=user_generated, points=0
最終目標は、次のタイプのクエリを実行できるようにすることです
。1.トレンドの投稿を
クエリする2.特定のカテゴリ
の投稿をクエリする3.ポイント値が最も高い投稿をクエリする
トレンドの投稿のクエリを実行できるように、テーブルをどのように構成できるかを誰かが知っていますか?それとも、これはDynamoDBに切り替えることで実行できる機能を放棄したものですか?