【问题标题】:Website Visits Database Designs网站访问数据库设计
【发布时间】:2015-05-05 07:25:47
【问题描述】:

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

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

对于方案 b : 我们每次都添加新 IP,为了报告,我们在应用程序中使用 GroupBY。

【问题讨论】:

  • c) ip,访问日期时间
  • 我认为 b 会更快,不必检查是否存在或进行更新(这通常比插入更昂贵)。您还可以获得更精细的数据视图,因此可以进行更有趣的分析。如果您认为需要bigint 来计算一个人浏览页面的次数,我认为您高估了您网站的吸引力。 :p
  • 也许可以,但是如果网站用户太多怎么办? b 又快了?
  • 选项(a)是好的表结构..
  • 那些列是关键

标签: php mysql sql asp.net database


【解决方案1】:

第一个是完美的。

为什么?

  1. 看,对于一位访问者,您只存储一条记录。一个访问者不能有多个记录,就像您对一个客户有多个地址一样。在这种情况下,地址是多个。但客户将只是一个。同样的情况也适用于您的示例。

  2. 您无需通过为同一用户/访问者多次添加同一行来增加数据库大小。

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

    因此,如果您遵循方式 2,您将为一位具有相同 ip 的访问者插入 1000 个条目。 如果您遵循方式 1,您将有 1 个条目使用 countVisited 进行更新。现在告诉我是获取 1000 行更快还是获取 1 行??

  4. 如果你想更新一些参数,你需要在1000条记录中搜索访问者的记录,然后修改它。你可以告诉自己哪种方式更好。

【讨论】:

  • 在顶部的 cmets 上,TZHX 表示,对于 a 中存在两个操作(SELECT,UPDATE),b 更快,但我认为如果网站用户太多,b 不会更快!
  • 您更新/插入的频率将远远超过您在此类表中选择的频率。使用是恒定的,分析是不规则的。
猜你喜欢
  • 1970-01-01
  • 2015-01-25
  • 2014-01-06
  • 2011-03-17
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多