私は投稿を「傾向」を計算するために、次の式を使用して計画しています:ユーザーからのトレンドポストのクエリを許可するためにDynamoDBデータベースを構成する方法はありますか?
Trending Score = (p - 1)/(t + 2)^1.5
P =票(ポイント)。 t =提出からの時間(時間単位)。
私はDynamoDB(Amazonのnosqlデータベースサービス)を使用してトレンドポストをクエリできるように、データベーステーブルの構造をアドバイスしたいと考えています。
DynamoDBには、テーブル内の各項目の主キーが必要です。主キーは、ハッシュ属性(文字列または数字)と範囲属性(文字列または数字)の2つの部分で構成されます。ハッシュ属性は、各項目ごとに一意でなければならず、必須です。範囲属性はオプションですが、使用される場合、DynamoDBは範囲属性にソートされた範囲インデックスを作成します。投稿
HashAttribute: post_id
RangeAttribute: NONE
OtherFields: user_id,title, content, points, categories[ ]
テーブル名:
テーブル名:
HashAttribute: user_id
RangeAttribute: NONE
OtherFields: first_name, last_name
テーブル名のユーザーは次のよう
私が念頭に置いていた構造が入るカテゴリーを
HashAttribute: category_name
RangeAttribute: post_id
OtherFields: title, content, points
テーブル名:カウンターだからここ
HashAttribute: counter_name
RangeAttribute: NONE
OtherFields: counter_value
は、私は次の表の設定となるだろう要求のタイプの一例である(例:USER_ID = 100):
ユーザーアクション1:
ユーザーは新しい投稿を作成し、投稿を2つのカテゴリ(野球、サッカー)にタグ付けします
クエリ(1):counter_nameに= 'post_idの' と増分+ 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
を最終目標であります次の種類のクエリを実行できるようになります。
最高点での投稿のための特定のカテゴリ
3.クエリ内の記事のための傾向ポスト
2.クエリ用 1.クエリは値
い誰も私は私のテーブルを構築できるか任意のアイデアを持っていますトレンド投稿のクエリを実行できるようになりましたか?または、これはDynamoDBに切り替えることでできることですか?
どのデータベースを使用しているのかは具体的な方がよいでしょう。様々な "NoSQL"データベースは大きく異なります。 –
トレンドの投稿をどれくらい頻繁に再計算しますか?上記のタイムスタンプはどこに保管していますか?あなたはいつ投稿を時代遅れの対象から外すことができますか? – Nick
@Layble私はインクリメンタルカウンタとしてpost_idを使用することを計画していたので(降順でpost_idをソートすると最新の投稿が表示されます)私がpost_idとタイムスタンプを使用することを考えていたのは、categoryテーブルに重複したRange Attributesの可能性を避けるためでした(例:2人の異なるユーザーが全く同じ時間にサッカーについて投稿した場合)。少なくとも毎分トレンドの投稿を再計算したいと思う。 –