2016-11-19 76 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

是的,理解,謝謝! –

相關問題