2011-07-05 57 views
1

我需要處理每個用戶的帖子的讀取/未讀狀態。 現在寫我正在使用非規範化的列來存儲逗號分隔的user_ids。由於它是一個文本列,因此選擇查詢的性能會降低。處理閱讀/未讀郵件的用戶喜歡郵件在mysql

現在我想爲所有用戶分配一個常數,用戶A-1,用戶B-2,用戶C-4和用戶D-8(按位) ,並將其組合存儲在一個整數列中。因此,當用戶A,C讀取整數列的值時將爲(1 + 4)5. 並在條件中使用按位運算符來查詢讀取/未讀文章。問題是沒有。我可以作爲組合存儲的用戶的數量限制爲62個用戶的狀態。如果我必須進一步擴展,我可能會添加另一個BIGINT列來存儲其他用戶。

什麼可能是存儲該信息的最佳方式。 以下是我需要做的動作。

  1. 當一個新的回覆發佈時,我必須更新爲0值(使每一個未讀)。
  2. 用戶閱讀帖子時更新列中的狀態。
  3. 爲用戶選擇所有未讀帖子。

編輯: 我試圖間接地解決第三個行動。我在選擇列列表中添加整數列,並在應用程序代碼中查找用戶的讀取狀態,而不是添加爲mysql標準。任何方式,這不是一個解決方案。我仍然需要一個好的。

回答

0

我只想做這種方式,創建一個表是這樣的:

CREATE TABLE views(
    user_id bigint not null, 
    post_id bigint not null, 
    primary key(user_id,post_id 
) 

,然後只檢查是否與用戶的ID的記錄和帖子的ID存在。您也可以使用它來計算視圖的數量。

+0

我已經試過了,在我的情況下它不能很好地縮放。 100多個用戶和50萬個帖子。根據一些標準檢索帖子集。 – John

+0

還有一個不太好,芽不需要任何存儲空間,只要比較日期,就可以向他們展示自上次登錄以來的新功能。 – bigblind

+0

感謝弗雷德裏克,讀/未讀狀態在這裏扮演着至關重要的角色,所以它不可能是不穩定的 – John