我有 web 应用程序,我在 php 中提供文件下载。一切正常,我在下载列中file field增加了它。
但我想获得完整的下载统计数据,例如在each day或在month或time of day或从which location
但我无法找到如何为此设计 mysql 表。我是否需要为此在数据库中记录每个下载请求。现实世界中的任何设计模式或示例
我有 web 应用程序,我在 php 中提供文件下载。一切正常,我在下载列中file field增加了它。
但我想获得完整的下载统计数据,例如在each day或在month或time of day或从which location
但我无法找到如何为此设计 mysql 表。我是否需要为此在数据库中记录每个下载请求。现实世界中的任何设计模式或示例
在您响应文件下载之前,您可以添加一些代码来记录请求详细信息以进行分析。关于数据库设计选项:
您还可以使用诸如服务器端 Google Analytics 之类的东西
创建一个类似于以下的表:
+-------------+---------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+-------------------+----------------+
| download_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| created | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
| filename | varchar(32) | YES | MUL | NULL | |
| ip | int(10) unsigned | NO | MUL | NULL | |
+-------------+---------------------+------+-----+-------------------+----------------+
每次下载文件时,将文件名和 IP 地址插入相应的列(其他两个将自动填充正确的信息)。然后,您可以对该表执行查询以收集您的分析。例如:
如果您想查看 2013 年 6 月的下载量:
SELECT COUNT(*) AS total_downloads FROM file_download WHERE DATE(created) BETWEEN '2013-06-01' AND '2013-06-30';
如果您想查看文件“somefile.zip”自发布以来下载了多少次:
SELECT COUNT(*) AS total_downloads FROM file_download WHERE filename = 'somefile.zip';
或者,如果您想查看“somefile.zip”被下载了多少次,不包括同一访问者下载的重复项:
SELECT COUNT(*) AS total_downloads FROM file_download WHERE filename = 'somefile.zip' GROUP BY ip;
通过为每次下载记录一个条目,您可以灵活地分析可以分析的数据类型。每个条目占用的空间量将是最小的,并且将让您访问比每次下载增加单个值更多的选项。