假如使用者評論了某個視訊,需要将評論記錄儲存取來,如果按照使用者的緯度分表,則每個使用者的評論記錄都儲存在同一表中,是以很快很友善的查找到某使用者的評論情況,但是某視訊被評論的情況則很有可能分布在多張表中,查找起來比較麻煩。反之,按照視訊ID次元分表,可以很友善的查找到此視訊的評論情況,但要查找到某人的評論記錄比較麻煩。
是以常見的解決方式有:
a.通過掃表的方式解決,此方法基本不可能,效率太低了。
b.記錄兩份資料,一份按照使用者緯度分表,一份按照視訊ID次元分表。
c.通過搜尋引擎解決,但如果實時性要求很高,又得關系到實時搜尋。
我們采用的是記錄雙份:有一個userId--belongId-commentId三個int類型的表。這個基于userId取模。而Comment基于belongId(通常是videoId)取模
2. 聯合查詢的問題
聯合查詢基本不可能,因為關聯的表有可能不在同一資料庫中。
3. 避免跨庫事務
避免在一個事務中修改db0中的表的時候同時修改db1中的表,一個是操作起來更複雜,效率也會有一定影響。
4. 盡量把同一組資料放到同一DB伺服器上
例如網站評論,視訊評論uid 取摸和comment取摸一緻的資料庫放在一起,這樣,使用者的評論和某些視訊的評論都放在一起;
例如将賣家a的商品和交易資訊都放到db0中,當db1挂了的時候,賣家a相關的東西可以正常使用。也就是說避免資料庫中的資料依賴另一資料庫中的資料。
本文轉自 位鵬飛 51CTO部落格,原文連結:http://blog.51cto.com/weipengfei/1333870,如需轉載請自行聯系原作者