网站访问数据库设计

4

对于网站访问计数,您更喜欢哪种表格方案?

enter image description here

方案a: 检查IP是否存在,我们将计数增加一步,不添加新的IP。

方案b: 每次添加新的IP,并在我们的应用程序中使用GroupBY进行报告。


1
c) IP,访问日期时间 - Strawberry
1
我认为 b 会更快,因为不需要检查是否存在或进行更新(这通常比插入更昂贵)。您还可以获得更精细的数据视图,因此可以进行更有趣的分析。如果您认为需要一个 bigint 来计算单个人查看页面的次数,那么我认为您高估了您网站的吸引力。 :p - TZHX
也许吧,但如果网站用户太多呢?B是否会再次更快? - S.A.Parkhid
@TZHX,在scheme中,bigint(大整数)方面,我同意你的观点,但我并不确定b是否更好! - S.A.Parkhid
1
这些列就是关键。 - Strawberry
显示剩余2条评论
2个回答

2

第一种方法是完美的。

为什么?

  1. 因为对于一个访客,您只存储一条记录。不能有多个记录与一个访客相关联,就像一个客户有多个地址一样。在这种情况下,地址是多个的,但是客户只有一个。您的示例也适用于此情况。

  2. 您不需要为同一用户/访客添加相同的行来增加数据库大小。

  3. 对于SELECT,您需要获取多个记录,尽管大多数记录都是相同的。

    因此,如果您采用第二种方式,您将为具有相同IP的一个访客插入1000个条目。 如果您采用第一种方式,您有1个条目,该条目将与countVisited更新。现在告诉我,获取1000行更快还是获取1行更快?

  4. 如果要UPDATE某个参数,则需要在1000个记录中搜索访客的记录,然后进行修改。您可以自己判断哪种方式更好。


在顶部的评论中,TZHX说对于a和b存在两个操作(SELECT,UPDATE),a更快,但是如果网站用户太多,我认为b不会更快! - S.A.Parkhid
1
在这种类型的表上,您将经常进行更新/插入操作,而不是选择操作。使用是持续的,分析是不规则的。 - TZHX

0
在我的数据库中,我使用[Count:bigint, Time:bigint],其中Time被四舍五入为整天(时间戳除以24*60*60)。我每天大约有一百万个访问者,而且每天只获取一条记录 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接