我有 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;
通过为每次下载记录一个条目,您可以灵活地分析可以分析的数据类型。每个条目占用的空间量将是最小的,并且将让您访问比每次下载增加单个值更多的选项。