如何在较长时间内存储点击次数/天?

时间:2011-03-20 19:13:41

标签: mysql statistics store

我需要存储一些统计信息:某些项目的点击次数(超过1000项)。 我需要每天存储点击次数: 例如:第1天:1234点击第1项 第2天:12312点击第1项 第n天:13123点击第1项

我有一台便宜的服务器,所以我需要一种最佳方式来存储所有这些数据。后来我需要从这个数据中生成图表

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

存储个人每天点击数据库,第二天运行cron job会生成摘要报告,在其他表中存储(小得多)结果,清理前一天的原始数据......

编辑: 如果您只想每天监控每个项目的逻辑结构,那么:

raport_date - date
item_id     - reference to table stored info about items
hits        - number of calculated hits

一切都取决于您需要的报告/图表

答案 1 :(得分:2)

为什么不制作一个包含3列的表格(如果您愿意,还可以添加主要列)。

我认为您需要以下内容:

  1. 一个名为“day”的列,其类型为DateTime
  2. 一个名为“itemId”的列,其类型为Int,这就是您知道点击了哪个项目的方式
  3. 一个名为“click”的列,其类型为Int,它将是您的计数器
  4. 所以我们可以说我们的桌子名为“clickTracking”。

    你可以这样做,“插入clickTracking set day = date_format(now(),”%Y-%m-%d“),itemId = 1,clicks = clicks + 1重复键更新点击次数=点击次数+1 ;“

    我在下面附上了一些带有主键的示例mySQL。如果我有一个auto_increment字段,我发现数据更容易使用,但这不是必需的。

    mysql> create table clickTracking (id int unsigned not null primary key auto_increment,day datetime not null, itemId int unsigned not null, clicks int unsigned not null);
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create unique index item on clickTracking (day,itemId);
    Query OK, 0 rows affected (0.00 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> insert into clickTracking set day = date_format(now(),"%Y-%m-%d"), itemId = 1, clicks = clicks + 1 on duplicate key update clicks = clicks + 1;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into clickTracking set day = date_format(now(),"%Y-%m-%d"), itemId = 1, clicks = clicks + 1 on duplicate key update clicks = clicks + 1;
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> insert into clickTracking set day = date_format(now(),"%Y-%m-%d"), itemId = 1, clicks = clicks + 1 on duplicate key update clicks = clicks + 1;
    Query OK, 2 rows affected (0.00 sec)
    
    mysql> insert into clickTracking set day = date_format(now(),"%Y-%m-%d"), itemId = 2, clicks = clicks + 1 on duplicate key update clicks = clicks + 1;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from clickTracking;
    +----+---------------------+--------+--------+
    | id | day                 | itemId | clicks |
    +----+---------------------+--------+--------+
    |  1 | 2011-03-20 00:00:00 |      1 |      3 |
    |  2 | 2011-03-20 00:00:00 |      2 |      1 |
    +----+---------------------+--------+--------+
    2 rows in set (0.00 sec)
    

    有几种方法可以做到这一点。我提供了一种可能的解决方案。我更喜欢这种方法,因为它使报告易于制作,并且在服务器上具有最小的存储量。

    我建议另外制作一个“项目”表,与此处的itemId相对应。