2012-01-16 17 views
3

私はあなたの友達と比較して過去1週間に何回アクション(ウェブページを開いた回数)を何回実行したかを示すFacebookのリーダーボードに取り組んでいます。1週間のインプレッションをリレーショナルデータベースに保存するにはどうすればよいですか?

このような毎週のデータをリレーショナルデータベースに保存するには、何らかの方法が必要で、データベースの設計に関する助言が必要です。

オプション1

は、店舗へのテーブルにユーザーIDとタイムスタンプを持つ行としてすべてのアクションを持ってして、タイムスタンプを持っている各友人>今日に関連するすべてのアクションに対してクエリを数える - 1週間。

このソリューションは簡単に実装できますが、スケールが心配です。 1000人のfacebookの友達がいれば、何百万ものアクションが潜んでいる可能性のあるデータセットに対して、この合計クエリを1000回実行する必要があります。

オプション2

ユーザーテーブルを持ってその日に実行されたアクションの数を含む曜日ごとに列が含まれています。それから、週の合計を得るために、その日の列を合計することができます。その後、毎日の初めに、その日の値は0にリセットされます。

このソリューションはうまくスケールされますが、私のアプリケーションに「今日」のエントリを上書きするかどうかを指示するロジックを実装する方法に固執していますそれを増やしてください。

これらのデザインの代替デザインや考えは、歓迎します。

+0

オプション1は、あなたが持っている友達の数にかかわらず、ただ1つのクエリです。 –

+0

結合クエリですか? – Josiah

+0

あなたの構造を知らずに、私は "おそらく"と言わなければならないでしょう。 –

答えて

0

オプション2を使用して終了し、毎日 "今日は新しい日"の論理フラグを使用しました。だから、私のテーブルは次のようになります:

 
id | monday | monday_new | tuesday | tuesday_new | ... | sunday | sunday_new | lifetime 
INT | INT | BOOL  | INT  | BOOL  | ... | INT | BOOL  | INT 
0

オプション2はほぼ完璧です。

プライマリキーとしての弱い使用の日の代わりに。次に、毎日の値を増やします。

関連する問題