我应该使用一个单独的表来存储在线用户或者我应该只使用另外的领域现存的成员表?

StackOverflow https://stackoverflow.com/questions/1445617

  •  22-07-2019
  •  | 
  •  

我正在一个在线系统,允许用户进行社交互动,当然要能识别实际上在线用户将是非常重要的。我知道HTTP无状态的,我知道如何使用会话,所以我需要用户的最后活动时间比较任意到期时间做到这一点。

我的终极问题归结为:?我是不是应该将某些字段添加到现有成员表(last_active_timeis_user_onlinehide_online_status等),或者这将是最好保持在一个单独的表信息我最初的想法是使用现有的表为简单起见。除了对复杂程度,有什么好处/一个VS其他的缺点是什么?

有帮助吗?

解决方案

我将一个单独的表内维持此。如果你有一百万用户,你想知道是谁在网上,你不希望被一遍又一遍地扫描该表再次找到这些信息。您的“在线”表会比较小,你可以有定期扫描它对于那些还没有来,在过去的5分钟左右,然后工作只需从网上表中删除并更新成员表中需要什么为 “last_seen”

其他提示

创建一个新的表。

首先,有哲学原因,它是一个对象(读:表)应该有一个目的。这变得模糊了很多数据库逻辑设计,但它是一个很好的原则仍然。

但是,真正的原因是从物理设计:第一,可以假设将在任何给定时间被登录的用户的数目要远小于用户总数,使存储要求将更低。和较低的存储要求直接转换成减少的负载在数据库上,仅仅是因为你有更少的块读取和更新。

如果你把这个数据在主表,而且,比那些块将被分散在一个更广阔的空间,而块的内容将不断增长和收缩为你改变的数据。

最后,你可能会需要一些指标,例如看现在谁在线上。和这些索引将(1)占用更大的空间,(2)创建甚至更多的散射必须被物理地写入磁盘脏块,和(3)引入更新争论的焦点。

我认为这取决于你希望有多少用户拥有。如果只打算是几千用户,我只想让在线状态的用户的属性,在user表中。如果有会比这更多,那么你会希望有一个online_users表,并保持信息的存在,有一个外键,主用户表。为了获取利益(通过上面提到的海报),你会想要一个任务运行每隔几个小时左右,从online_users表中删除不活动的用户。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top