【问题标题】:Should a session table be cleared off from the records after a user logs out?用户注销后是否应该从记录中清除会话表?
【发布时间】:2016-11-19 06:17:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: mysql session architecture storage


    【解决方案1】:

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

    其次,这种表格总是会触发你提出的问题,只有在你评估并回答了一些初步问题后才能给出最佳答案,例如:

    1. 当您希望检查用户的活动时,往前走多远才有意义?一个月?一年?

    2. 您可能希望保持此信息可用的最长时间(即使使用非常规查询来检索?

    3. 我希望在这张桌子上被问到什么类型的问题(查询)?

    如果您回答了这些问题,您可以考虑以下选项:

    1. 有一个每天运行一次的例行程序(在午夜或您的系统可以承受的任何其他时间),它会删除时间戳早于一个月(或任何其他适合您的时间段)的行需要),或者

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

    3. 通过添加一些字段(如上所述)和索引来为您的“SELECT”需求提供良好的答案,从而将表的结构更改为更有效的结构。

    【讨论】:

    • 是的,问题是会有多个具有相同字段的记录,即 idPeople(这不能是唯一的),我只知道这个,我可以使用它来查询表。跨度>
    • 这就是为什么我建议在表结构中添加一个字段,例如会话初始化时间戳。您可以设置一个结合时间戳和用户的唯一索引,并通过用户和最新时间​​戳获取记录过滤(因此,搜索将使用索引而不是实际表进行)。
    • 好的,明白了,谢谢!
    • 不客气。顺便说一句,如果我的回答对您有所帮助,如果您将其标记为这样,我将不胜感激(单击答案左侧的“V”)。谢谢。
    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2017-02-10
    • 2016-12-09
    • 1970-01-01
    • 2016-08-07
    相关资源
    最近更新 更多