1

特定の日、月、年の製品ごとのビュー数を格納する MySQL データベースにカウンターを作成したいと考えています。

問題は、私が約2000の製品を持っていることです。次のスキーマを使用することを考えました。

 id (BIGINT)
 year (INT[4])
 month (TINYINT)
 day (TINYINT)
 product_id (INT)
 pageviews (BIGINT)

このソリューションの問題点は、最悪のシナリオで各製品が毎日表示される場合、データベースに毎日 2000 行が表示されることです。掛け算は 36 日で、毎月 72,000 になります。

これを実装するためのより良い方法があるかどうか知りたかったのです。私は、毎日のデータは、アプリケーション変数 (.NET で開発) および ArrayList としてメモリにのみ保持されると考えていました。その方向を選択した場合、行/データは少なくなり、毎月 2000 行になります。

私は本当に累積的な毎日のページビューを維持したい. ちなみに、プレビューは説明のためのもので、さまざまなデータを保存しますが、そのデータは非常に頻繁に更新されます。

日次列を使用すると、ほぼ 2 ~ 5 秒ごとに頻繁に更新されます。JavaScript から ASP.NET Web サービスを呼び出し、product_id を渡し、カウンターを +1 増やして、MySQL 非同期を更新するつもりです。これは、アプリケーションが更新の発生を待たないようにするためです。

見積もり表のサイズも知りたいです。私が正しくやっている場合:

BIGINT = 8 バイト

日時 = 10 バイト

INT - 4 バイト

^年/月/日の代わりに日時列を使用することにした場合

30 バイト * 2000 = 60,000 バイト

60KB (約) * 30 日 = 180KB 月

180KB 月 * 12 か月 = 2160KB / 年

私はそれを正しく理解しましたか?

4

1 に答える 1

1

わかりました、私はデータベース設計が得意ではありませんが、それはよく知っています...これらの 2K 製品の毎日のヒットをどのくらいの期間保存したいか自問する必要がありますか?

それらを1週間だけ保持したい場合は、サイズでどれだけかかるかを計算できます(1か月間保持したい場合も).

たとえば 1 か月間保存したい場合は、常に毎月テーブルを作成し、毎日のヒットのデータをそのテーブルに保存して合計し、各テーブルに 2K 行しかないようにすることができます。

または、たとえば月ごとにすべてのヒットを保持する「倉庫」テーブルを使用することもできます。毎月のデータは、月ごとに合計した後、その倉庫テーブルにコピーされます。

これらのヒットを無期限に保存したい場合は、それが私の知る限りの方法です (これもデータベース設計の達人ではありません)。

繰り返しますが、ヒットを 1 か月まで保存したい場合は、これを行う必要があります。

サギ、お役に立てば幸いです。

于 2012-08-05T07:36:39.753 に答える