配置文件页面视图的数据模型

时间:2010-11-22 01:37:38

标签: mysql database database-design relational-database

假设我的网站包含具有可公开访问页面的用户个人资料(每个配置文件各有几个页面)。我想显示用户页面查看统计信息(例如,每页,特定时间段等)。存储页面浏览量的好方法是什么?

这就是我的想法:

Table Page Views
================
- Id (PK)
- Profile Id (FK)
- Page Id (FK)
- Timestamp

我担心此解决方案无法扩展。建议?

3 个答案:

答案 0 :(得分:1)

你的直觉是正确的,写入数据库并不能很好地扩展。您希望避免每个页面请求的数据库事务。

那注意到,你真正关注的是缩放吗?如果是这样,假设有一个互联网站点(而不是内部站点),请跳过自己的站点并使用Google Analytics或类似的东西收集命中数据。然后获取该数据并对其进行处理以生成每个配置文件的总计。

但是,如果你真的很想自己做,那么请考虑使用日志解析。如果您可以枚举每个配置文件的URL,请使用该信息和Web服务器日志来生成命中总计。可以处理大量不同格式的Microsoft's Log Parser等工具,或者像sed和grep这样的* nix命令行工具都是你的朋友。

如果枚举不可能,请更改代码以记录您需要的信息并处理该日志文件。

使用日志,使用批处理生成结果,并使用MySQL的LOAD DATA将这些结果插入数据库。

关于roll我们推荐的最终说明 - 如果你有一个集群环境而不是每个请求的数据库事务,那么这将更好地扩展很多

答案 1 :(得分:0)

这取决于您希望提供哪种报告。

如果您希望能够说“这是在这两个日期之间查看您网页的人员列表”,那么您必须存储您提议的所有数据。

如果您只需要能够说“您的页面在这两个日期之间被查看了X次”,那么您只需要一个包含页面ID,日期和计数器的表格。使用单个UPDATE查询更新每个页面视图上的计数器列。

答案 2 :(得分:0)

我想你可以

<强> tblPerson

personid(pk)
activeProfileID(fk)    -- the active profile to use.
timestamp

<强>的tblpage

pageid(pk)
data

<强> tblPersonProfile

profileID(pk)
timestamp

<强> tblProfilePages

profilePageID(pk)
profileid(pk)
pageid(pk)
isActive