2012-10-21 56 views
2

我有一個非常大的MySQL表,它太大而無法經常查詢(500m +行)。我所做的是在另一個名爲「recent」的表中緩存我需要的結果。使用唯一索引來限制MySQL中每列的行數

在 「近期」 表的架構看起來像這樣

USER_ID

PAGE_ID

DISPLAY_ORDER

我穿上USER_ID和DISPLAY_ORDER唯一索引,因爲我只是想本表中每個用戶最多可以存儲64條記錄。因此,DISPLAY_ORDER只是一個最多可達64的int。這些行使用REPLACE INTO進行更新。

這是一個好辦法?或者,我應該定期從用戶點擊64行以上的表中刪除數據。我需要考慮性能。在未來幾個月內,主桌面將達到5億,而在每個用戶的64行上,這意味着「近期」桌子的面積也會相當大......

感謝您的任何幫助。

+4

您可以考慮[分區](http://dev.mysql.com/doc/en/partitioning.html)您的基礎表。 – eggyal

回答

0

如果我是你,我會認真考慮轉向大數據NoSQL數據庫。像Cassandra或HBase,它們都具有非常好的性能和大量數據。讓5-10個集羣節點用MapReduce爲您完成工作,而不是一個巨大的單片服務器試圖掃描並查找多條記錄。

0

我同意eggyal和Todd Nakamura。

eggyal:分區數據
當與大你真正需要的,所以你必須在經文整個事情中的數據的一個子集運行查詢的機會對數據進行分區數據集處理。

Todd Nakamura:調查不同的數據庫技術。
這個問題看起來像NoSQL數據存儲是一個很好的解決方案。它將允許極大的數據集,並且可以使用Map/Reduce(Hadoop)來平行查詢。