首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设计用于文件下载统计的数据库表?

如何设计用于文件下载统计的数据库表?
EN

Software Engineering用户
提问于 2013-07-30 06:22:01
回答 1查看 987关注 0票数 1

我有一个web应用程序,在这里我正在php中提供文件下载。一切都很好,我在file field中有一个下载列,在这里我会增加它。

但是我想要完整的静态下载,比如在each daymonthtime of daywhich location上下载多少次。

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

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2013-07-30 06:30:16

一般情况下,您将保存每个下载的日期、时间和位置,因为表应该为快速插入进行优化,但是检索可能很慢。

然后,您可能有一个OLAP多维数据集,该多维数据集基于原始表,它将以适合您的标准的方式存储下载数量,即每天、每月或地点。

您可以首先建模用于记录下载点击率的表:

这为您提供了有关下载的基本信息,即从给定的地理位置在给定的日期和时间进行下载。默认情况下,isProcessed0;稍后您将看到它是如何使用的。

由于表中缺少索引,数据的插入将很快。另一方面,选择可能会很慢,但这并不重要:我们不会使用这个表进行搜索。

该表中的数据将按计划转换为此表(夜间,每小时,每秒一次,取决于您的需求)。一旦传输,该条目将通过将IsProcessed更改为1来标记为已处理。

此表包含能够快速查找所需信息的索引,例如,每个位置的下载计数如下所示:

代码语言:javascript
复制
select sum(CountDownloads) from ProcessedDownload where GeographicalLocation = :location`

它可能足以满足您的需求,或者您可以更进一步,根据您需要的标准,使用具有特定维度的OLAP多维数据集。

如果您想更进一步,请搜索雪花模式。您可以为日期-时间和位置实现它,因为根据上下文的不同,星型模式(当前的)可能更合适。

正如注释中所建议的,服务器日志可能是ETL的另一个源,取代了数据库表。我想专业人士会是:

  • 首先没有要创建的数据库;没有到要管理的数据库的连接,等等。
  • 前一点还意味着,您不必对web应用程序做任何事情就可以报告此类统计数据。将统计数据扩展到其他web应用程序也很简单,因为您不需要更改它们。
  • 服务器日志应该非常快,很可能比在数据库中的表中插入一行要快。
票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/206479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档