我正在使用MySql表来存储当前登录用户的会话记录。一旦用户注销,我更新同一记录中的几个字段并标记(撤销)它不应再次使用。因此,对于每个LogIn,都会创建一条新记录。这符合我的目的,但事实证明这张桌子会变得越来越大。
存储会话的标准方法是什么?被撤销的那些是否应该存储在一个单独的表中,还是应该被删除或留在同一个表中?
我考虑将数据保留在同一个会话表中。在查询特定记录时,我查询两个字段:(idPeople(非唯一)和revoked(0或1)),例如SELECT * FROM session WHERE idPeople = "someValue" AND revoked = 0
。然后在用户登录或记录时根据需要更新记录。表的巨大尺寸会影响这个吗?或者MySql会处理这个?还有什么其他后果我无法看到?
答案 0 :(得分:1)
首先,向表中添加唯一字段(例如SESSION_ID
,可能是正在运行的自动增量编号)可能是个好主意,将此字段定义为唯一ID,并将其用于快速找到要更新的记录(即revoke=1
)。
其次,这种类型的表总是触发您提出的问题,只有在您评估并回答一些初步问题后才能给出最佳答案,例如:
当您想要检查用户的活动时,走了多远才有意义?一个月?一年?
您可能希望保留此信息的最长时间是什么(即使使用非常规查询来检索?
我希望在这张桌子上询问什么类型的问题(查询)?
您回答这些问题后,可以考虑以下选项:
有一个例行程序,每天运行一次(午夜或系统可以负担得起的任何其他时间),这将删除时间戳比一个月(或任何其他适合您的期间)更长的行需要),或
与上述相同,但会先将这些记录复制到"历史记录"表,
通过添加一些字段(如上所述)和索引,可以为您的" SELECT"提供更好的答案。需求。