2009-09-18 29 views
1

我正在開發一個允許用戶進行社交互動的在線系統,當然,能夠識別實際上在線的用戶將是非常重要的。我知道HTTP是無狀態的,而且我知道使用會話,所以我需要通過比較用戶的最後一次活動時間和任意到期時間來完成此操作。我應該使用單獨的表來存儲在線用戶,還是應該在現存成員表中使用其他字段?

我的終極問題歸結爲:如果我只是將某些字段添加到現有成員表(last_active_timeis_user_onlinehide_online_status等),或者這將是最好保持在一個單獨的表這一信息?我最初的想法是爲了簡單而使用現有的表格。除了複雜程度之外,一個人與另一個人有什麼好處/不利之處?

回答

1

我會在一個單獨的表格中進行維護。如果您有一百萬用戶,並且想知道誰在線,則您不想一遍又一遍地掃描該表以找到該信息。您的「在線」表格相對較小,您可以定期掃描那些在過去5分鐘左右沒有進入的工作,然後從聯機表中刪除它們,並更新成員表中所需的任何內容爲「last_seen」

2

創建一個新表。

首先,有哲學的原因,這是一個對象(讀:表)應該有一個目的。這在數據庫邏輯設計中變得很模糊,但這仍然是一個很好的原則。

但是真正的原因來自於物理設計:首先,在任何給定時間將被登錄的用戶數量可以假定遠遠小於用戶總數,因此存儲需求會更低。而較低的存儲需求可以直接轉化爲數據庫負載的減少,因爲您擁有更少的塊來讀取和更新。

如果你把這個數據在主表,而且,比那些塊將被分散在一個更廣闊的空間,而塊的內容將不斷增長和收縮爲你改變的數據。

最後,您可能需要一些索引,例如看看現在誰在線。這些索引將(1)佔用更多的空間,(2)創建更加分散的髒塊,這些塊必須物理寫入磁盤,以及(3)引入更新爭用點。

0

我認爲這取決於你期望擁有多少用戶。如果只有幾千個用戶,我只需要在用戶表中將在線狀態設置爲用戶的屬性。如果還有更多,那麼你需要一個online_users表,並在那裏保存這些信息,並在主用戶表中使用外鍵。爲了獲得好處(上述海報提到),您需要每隔幾個小時運行一次任務才能從online_users表中刪除不活動的用戶。

相關問題