我有一个web应用程序,在这里我正在php中提供文件下载。一切都很好,我在file field中有一个下载列,在这里我会增加它。
但是我想要完整的静态下载,比如在each day、month、time of day或which location上下载多少次。
但我无法找到如何为此设计mysql表。我是否需要在数据库中查看每一个下载请求。在现实世界中的任何设计模式或例子
发布于 2013-07-30 06:30:16
一般情况下,您将保存每个下载的日期、时间和位置,因为表应该为快速插入进行优化,但是检索可能很慢。
然后,您可能有一个OLAP多维数据集,该多维数据集基于原始表,它将以适合您的标准的方式存储下载数量,即每天、每月或地点。
您可以首先建模用于记录下载点击率的表:

这为您提供了有关下载的基本信息,即从给定的地理位置在给定的日期和时间进行下载。默认情况下,isProcessed是0;稍后您将看到它是如何使用的。
由于表中缺少索引,数据的插入将很快。另一方面,选择可能会很慢,但这并不重要:我们不会使用这个表进行搜索。
该表中的数据将按计划转换为此表(夜间,每小时,每秒一次,取决于您的需求)。一旦传输,该条目将通过将IsProcessed更改为1来标记为已处理。

此表包含能够快速查找所需信息的索引,例如,每个位置的下载计数如下所示:
select sum(CountDownloads) from ProcessedDownload where GeographicalLocation = :location`它可能足以满足您的需求,或者您可以更进一步,根据您需要的标准,使用具有特定维度的OLAP多维数据集。

如果您想更进一步,请搜索雪花模式。您可以为日期-时间和位置实现它,因为根据上下文的不同,星型模式(当前的)可能更合适。
正如注释中所建议的,服务器日志可能是ETL的另一个源,取代了数据库表。我想专业人士会是:
https://softwareengineering.stackexchange.com/questions/206479
复制相似问题