2012-10-09 77 views
0

我不會面臨這個問題,但總是分片在我腦海中。當然,這只是複製數據,使用Memcached和分區後...MYSQL - 基於組ID或用戶ID

如果我有photo_tbl和結構是像下面

user_id 
group_id 
date_added 
.... and many more 

用戶的個人資料,我們通過下面的查詢0運行顯示用戶照片的羣體頁面,我們展示組照片上運行下面的查詢

SELECT ...... FROM photo_tbl WHERE user_id=? order by date_added desc 
SELECT ...... FROM photo_tbl WHERE group_id=? order by date_added desc 

在這種情況下,如果行有數十億,如果需要在你用什麼鍵分片而無需爲上述兩個查詢影響性能..?

如果我的分片密鑰是user_id,對於組我必須去多個數據庫才能獲得所需的結果(通過更改應用程序邏輯)..如果它在group_id上的用戶配置文件,我必須去多個數據庫才能獲得期望的結果。

+0

對不起,我不知道爲什麼它是脫離主題。請提供評論,如果有問題 – Bujji

回答

3

你基本上有兩個「碎片樹」。您需要按用戶和組進行分片。如果你在單個表中嘗試這種方式,那麼一種方法總是需要對所有分片進行查詢,如果你有一個有效的方法來做這件事,那麼這種方法並不是很糟糕。例如,使用dbShards,您可以跨分片並行運行高效查詢(我們稱之爲「Go Fish」查詢)。

還有其他兩個問題需要考慮:

  1. 複製的表格,並有用戶一個分片,並通過組一個分片。所有的讀取都是針對一個碎片,但是你必須寫兩次。

  2. 使用三張表。由照片ID分片的照片表格。 user_photos(user_id,photo_id和其他字段)由用戶分割。 group_photos(group_id,photo_id和其他字段)按組分組。

我們看到這些場景很多,這些都是我們客戶常用的方法。

+0

有什麼問題謝謝安迪您的答案。這有助於我和澄清我的問題 – Bujji