Database design 天数日志';由适合用户的数据结构访问?

Database design 天数日志';由适合用户的数据结构访问?,database-design,data-structures,Database Design,Data Structures,我正在制作一个web应用程序,我想包括一个功能,它可以记录用户与网站交互的所有日子,就像Stackoverflow所做的那样: 什么样的数据结构适用于此 我曾想过要有一个以用户id为列、以所有日期为行的表,但这只是最直观的答案,而且会占用大量空间 没有我必须运行的特殊查询。仅显示日历中的天数(如图所示),并计算总天数和连续天数(如图所示) 关于什么是最佳方式,有什么建议吗?Stackoverflow是如何做到的?您无法回避需要为每个用户存储访问的每一天,否则您显然无法回忆起这些信息。若要将其简

我正在制作一个web应用程序,我想包括一个功能,它可以记录用户与网站交互的所有日子,就像Stackoverflow所做的那样:

什么样的数据结构适用于此

我曾想过要有一个以用户id为列、以所有日期为行的表,但这只是最直观的答案,而且会占用大量空间

没有我必须运行的特殊查询。仅显示日历中的天数(如图所示),并计算总天数和连续天数(如图所示)


关于什么是最佳方式,有什么建议吗?Stackoverflow是如何做到的?

您无法回避需要为每个用户存储访问的每一天,否则您显然无法回忆起这些信息。若要将其简化为只存储天数计数,则每个用户只需使用两个值即可完成此操作—上次访问的天数和访问天数计数

我不会创建用户ID的列,因为向表中添加列是一项昂贵的操作(可能需要重新创建整个表)。更好的办法是在每一行中存储一个用户ID和一对日期

Table Visited
  ? - Column ID (Primary key)
  Column UserID
  Column Day
如果索引正确,我希望您要执行的大多数操作都应该是闪电般的快

我猜这就是堆栈溢出/堆栈交换的方式

请注意,与Stack Overflow存储的数据相比,这实际上是一个微不足道的数据量——如果您只是每天发布一条评论,那么您已经远远超过了存储当天在线的数据所需的数据量


另一种方法是为每个用户创建一个天数位图。我相信堆栈溢出已经存在了5年多了,大约2000天,所以大约2000位,250字节。一旦你认为你应该在未来五年内至少增加一倍(并且你需要为这张位图中的空间用完一天),查询它对于大多数接口来说并不是特别好和/或效率高,而且很多用户可能不止一次访问过这个站点,与上面建议的访问表相比,这看起来不是一个很好的选择。

最佳选择实际上取决于您希望以哪个比率运行什么查询。你想到的这些“最直观的答案”是什么?@Dukeling我没有什么特别的疑问要问。只需在日历上显示天数(如图所示),并计算图像中的总天数和连续天数。@Dukeling很高兴看到更新的问题。不要期望得到任何明确的答案,因为你必须继续询问,但前提是他们愿意透露此信息,考虑到这不是开源的,他们可能只愿意透露网站的内部信息,所以我甚至不确定询问是否合适。