2016-11-19 29 views
0

我正在使用MySql表来存储当前登录用户的会话记录。一旦用户注销,我会更新同一记录中的几个字段并标记(撤消)它不应该再次使用。因此,对于每个LogIn都会创建一条新记录。这符合我的目的,但事实证明,桌子将变得巨大。在用户注销后,会话表是否应该从记录中清除?

存储会话的标准方法是什么?应该将被撤销的那些存储在单独的表中,还是应该将它们删除或保留在同一个表中?

我认为将数据留在同一个会话表中。查询特定记录时,我使用两个字段进行查询:(idPeople(不唯一)和已撤销(0或1)),例如SELECT * FROM session WHERE idPeople = "someValue" AND revoked = 0。然后在用户登录或登录时根据需要更新记录。巨大的桌子会影响这个吗?或者MySql会处理这个?还有什么是我无法看到的其他后果?

回答

1

首先,向表中添加一个唯一字段(例如SESSION_ID,这可能是一个正在运行的自动增量编号)可能是个好主意,将此字段定义为唯一ID,然后使用它来快速查找记录更新(即revoke=1)。

其次,这种类型的表始终触发你问的问题,之后您评估,并回答了一些初步的问题,只能给出最好的答案,例如:

  1. 当你想检查一个用户的活动,多远到过去是否合理?一个月?一年?

  2. 什么是最长的时期,你可能希望保留这些信息,(甚至使用非例行查询来获取?

  3. 什么类型的问题(查询)我期望被问到这个表?

一个你回答这些问题,你可以考虑以下选项:

  1. 有一个例行的过程,每天运行一次(在午夜或任何其他时间,系统可以负担得起),这会删​​除时间戳超过一个月(或任何其他适合您需要的期间)的行,或者

  2. 同上,但首先这些记录复制到“历史”表,

  3. 更改你的表的结构,以更有效的一个,通过添加一些领域(如上述建议)和指数是将为您的“SELECT”需求提供很好的答案。

+0

是的,问题是将有多个记录与相同的字段,即idPeople(这不能是唯一的),我知道这一点,我可以查询表。 –

+0

这就是为什么我建议在表结构中添加一个字段,例如会话初始化时间戳。您可以设置一个结合时间戳和用户的唯一索引,并获取用户的记录过滤和最新的时间戳记(因此,搜索将使用索引而不是实际表格进行)。 – FDavidov

+0

是的,理解,谢谢! –

相关问题