1

我有 web 应用程序,我在 php 中提供文件下载。一切正常,我在下载列中file field增加了它。

但我想获得完整的下载统计数据,例如在each day或在monthtime of day或从which location

但我无法找到如何为此设计 mysql 表。我是否需要为此在数据库中记录每个下载请求。现实世界中的任何设计模式或示例

4

2 回答 2

0

在您响应文件下载之前,您可以添加一些代码来记录请求详细信息以进行分析。关于数据库设计选项:

  • 只存储计数并在您提供下载时增加它。占用空间小,但在分析和报告方面提供的灵活性较低。
  • 存储单个下载:您可以存储时间戳、字段甚至是请求 IP,这些在您的分析中都非常有用,但这种方法会占用大量空间。
  • 您还可以在中途遇到,例如完整存储过去一个月的数据,然后将它们从数据库中归档到一个 zip 文件中,然后只为您的报告存储增量的分类数据。

您还可以使用诸如服务器端 Google Analytics 之类的东西

于 2013-07-30T06:47:49.570 回答
0

创建一个类似于以下的表:

+-------------+---------------------+------+-----+-------------------+----------------+
| 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;

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

于 2013-07-30T08:01:46.610 回答