2013-04-29 54 views
0

問題聲明:我正在開發一個應用程序,其中用戶可以關注其他用戶(如Twitter或其他電子商務網站)並在牆上獲得更新。與商家和用戶的關係。用戶可以跟隨任何商家。用戶自己可以是商家,所以實際上它就像一個用戶跟隨其他用戶(許多許多實際情況)。使用PHP mysql水平擴展數據庫

問題:去做最簡單的方法是讓這將有 ID(自動遞增)結合表| follower_user_id | followed_user_id。但是我不確定數據庫的垂直增長情況,它會如何擴展。如果用戶跟隨100人,那麼對於單個用戶將有100個條目。在這種情況下,如果我想獲得任何用戶的關注者,則需要更長的時間查詢執行的時間。

研究:我想學習Twitter和其他網站和數據庫設計,但它們使用不同的數據庫,如基於圖形的NoSQL等,以解決他們的problems.In我們的情況下,其Mysql.I還去有關使用的緩存機制,但我會想知道,如果有任何方法可以水平存儲值,即每個用戶都有一個單行的跟隨者(逗號分隔將是我試過的單調乏味)。

我可以爲此功能提供單獨的數據庫,如基於Nosql的數據庫(mongo等)。它會對不同情況下的執行力產生什麼影響?

如果我採用easiset方式進行操作的方法是正確的,那麼如何提高5-10k用戶的性能(現在查看一個小型基數)?基本mysql查詢是否工作正常?

請幫助我輸入相同。

+1

這與橫向縮放無關;水平縮放是關於使用多個mysql服務器進行負載平衡 – 2013-04-29 09:56:26

+1

您是否已經完成了任何測試以查看數據庫如何響應很多行?如果你使用索引,那麼即使有數百萬行,你仍然可以得到快速響應。使用模擬數據和查詢進行測試是我處理這個問題的方式。 – gunnx 2013-04-29 09:57:29

+2

如果你在'follower_user_id'和'fol​​lowed_user_id'上索引,查詢應該沒問題。 MySQL可以處理數百萬和數百萬行。 – MatthewMcGovern 2013-04-29 09:58:10

回答

0

經過評論和做一些研究之後,我得出結論:最好的辦法是創建關注者表並執行一些索引並使用緩存機制。

索引的建議複合指數將工作做好 對於緩存我打算使用內存緩存!

0

我使用的系統(我的個人偏好)是與追隨者的ID和用戶增加2列上的用戶,followingfollowers和存儲的簡單加密的JSON數組在它被下..

唯一的缺點是,當查詢你不得不解密它然後json_decode它,但它在我近2年來工作得很好。

+2

我個人不會推薦這個。由於您將同一條信息存儲了兩次,一次存儲在用戶A的「跟隨者」中,一次存儲在用戶B的「跟隨者」中,因此數據沒有正常化。更不用說像發言這樣的大型任務,除去流行的用戶,將需要大量解碼,刪除ID,再次編碼並重新插入數據庫。而不只是'DELETE FROM關係,其中FollowerID = UserID' – MatthewMcGovern 2013-04-29 10:13:28

+1

使得很多困難,保持在你的數據的一致性,需要額外的工作,寫2條記錄,而不是一個只要有一個變化,更大的數據庫容量等 – 2013-04-29 10:14:24

+2

正要給予類似MatthewMcGovern的完全相同的原因註釋:D添加到這一事實,這一做法將使更復雜的查詢困難得多(例如,如果將來你想知道「誰遵循商戶X的人也跟着商人ÿ 「)。保持你的數據原子可以更容易地進行操作和查詢。 – Pudge601 2013-04-29 10:17:08