2017-03-19 247 views
10

我有4個表:userspostscategoriescategories_map設計數據庫

postsidtextcategory_id
categories_map包含user_idcategory_id

我的目標是做一個隊列中用戶可以預覽。此外,用戶將能夠跳過一些帖子或編輯文本。如果用戶跳過帖子,它將永遠不會出現在隊列中。但是,用戶無法更改序列,因爲cron將執行腳本。

第一種方法,我認爲是創建一個包含 user_idpost_idtext_modifiedis_skippedlast_posted表。所以當cron作業執行時,它會留下一個時間戳,所以下次這篇文章將不會被抓取,用戶可以輕鬆地更改這篇文章的文本。

第二種方法是創建一個單獨的表,其中將爲用戶user_id,post_id,category_id,text_modified生成隊列。所以cron作業可以很容易地按照這個表格工作,並在完成後刪除該行。但通過這種方法,如果我將有30個用戶,平均每個類別包含5000個帖子,我的表格就會有450000行。是的,如果它被正確索引它應該是一切都好。但是當我擁有100-200個用戶時,它可以擴展嗎?

我應該去或有任何其他的解決方案,它的方法呢?

回答

6

很多事情取決於你的產品。我們不知道:

  1. 用戶如何互相交互?
  2. 做他們的行動(跳過)需要被保留的,還是我們好,如果他們失去他們以上99.9個百分點。
  3. 他們對文章進行了文字修改,全局可見或僅對他們進行了修改。
  4. 用戶是否按類別檢查帖子?

說,所有這些未知數,我將它取刺:

  • 如果答案第4題是YES然後選擇#2似乎更多聲音從你的PK判斷。
  • 如果答案第4題是NO然後選項#1似乎更多聲音從你的PK判斷。

對於數據庫大小,我認爲你正在做一些預優化。你應該考慮表格寬度。由於你的表格非常窄(只有幾列,主要是整數),所以你不必太擔心特定表格的長度。

時變成一個約束,(你可以以此爲基準,或等着看特定的服務器上的磁盤空間),你可以在用戶通過分片擴展數據庫容易。你基本上把不同的用戶放在不同的db服務器上

  • 注:問題1,將決定如何輕鬆上面會

說了這麼多,記住的性能問題:

  1. 名單會得到很長。
  2. 如果用戶修改會影響其他用戶,那麼您將必須執行相當多的扇出工作,才能將更新發布到特定隊列。

在這種情況下,您可能需要查看一些分佈式緩存,如Memcached,Redis。

  • 注:根據對問題的回答2 & 3,你可能甚至不需要持續的隊列。
+0

1.用戶不會互相交互2.跳過此帖後。它不會再出現他們了3.文本修改將只出現在他們的「牆上」(頁面)4.不清楚這個問題。他們正在檢查發佈給他們的結果。 |如果我不需要堅持排隊,我將如何拉動職位? – user256968

+0

在這種情況下,您的問題是一個典型的時間表/新聞源問題。有一個警告,用戶需要編輯他們的牆(與全球職位分開)。你可以按照我的建議。分解數據庫應該很容易。 –

+0

我想我沒有讓我的問題正確。之後我不關心時間線/新聞源。我只需要這個隊列用於cron。該隊列不會反映用戶的任何內容。舉個例子:用戶選中了3個類別。總共將有100個隊列或其他內容。 Cron會先選擇並撥打一些電話給不同的API。所以在隊列中只剩下99個等等。希望我現在更清楚 – user256968