2016-05-12 118 views
0

我有一個頁面,顯示餐廳配置文件數據,並顯示一個數據是用戶的總簽入數到餐廳存儲餐廳checkin count數據的最佳方法是什麼?

我有一個MySQL表所示:user_checkins存儲用戶的簽入的餐館,如:

id | user_id | res_id | checkin_date  | 
1 |  102 | 5526 | 2016-04-21 03:20:21 | 
2 |  165 | 5574 | 2016-04-21 06:35:21 | 
3 |  102 | 4565 | 2016-04-24 02:15:30 | 

和另一個表res_checkin_count

id | res_id | total_checkin_count | 
1 | 5526 | 1055    | 

一會兒許多行會在user_checkins被創建後,因爲人們經常籤

問:我是否應該刪除舊行?像創建覆蓋面餐廳定期刪除(如每天)舊行一個cronjob和更新另一個MySQL表餐廳total_checkin_count數只存儲每個餐廳的total_checkin_count?這會消耗大量的內存嗎?

我守行,讓它積累和使用SELECT COUNT(*)都得到每家餐廳total_checkin_count

編輯:user_checkins表實際存儲所有用戶籤各種餐館,每次有人訪問一個「restaurant_profile」網頁時,SELECT COUNT(*)查詢將在user_checkinsres_id X上運行,讓那家餐廳的total checkin count,是多餘?

+0

爲什麼不只是每個位置和最後簽入列總運行在一個單一的表?你真的需要確切地知道他們什麼時候辦理入住手續嗎?如果是這樣,你可以歸檔嗎?當有人訪問一個restaurant_profile網頁 – tadman

+0

每次,我將運行在user_checkins表的SELECT COUNT(*)(它存儲所有的餐館簽入),就意味着每次有人訪問restaurant_profile網頁時,SELECT COUNT(*)將在運行表,這是多餘的? – yeh

回答

0

當你說你需要評估如果許多超出的MySQL的能力多行。一般來說,MySQL應該能夠輕鬆地處理每表1億行的數量。您是否希望很快就能超過1億行?如果沒有,那麼將數據放在一邊,這樣可以降低歸檔系統帶來的複雜性。

如果在另一方面,你是不是在表數億行的期待更多,那麼,運行的日常工作進行刪除或存檔的數據可以保持你的數據庫運行良好的幫助。

0

在我看來,這些表是在MySQL,但是我剛剛擺脫res_checkin_count的是一種聚合函數的副本是計數,所以你是在浪費內存,因此只能有2種情況:

1您的user_checkins表沒有超過200萬條記錄,並且您爲列res_id創建nuncluster索引並且沒問題。

2您擁有一個Monstrous網站,您可以在其中存儲超過200萬條活動記錄,並且您可以爲每個州或每個區塊(3至5個郵政編碼)創建表格,這樣您就可以擁有分佈式記錄,最有可能的人形式爲TX將搜索和查詢TX等餐廳。

+0

什麼? 200萬?如果你的意思是最大INT爲21億,那麼它可以使用無符號整數增加到40億。 – TheDrot

+0

我並不是指索引可以容納的最大數量INT我的意思是如果他使用主機提供程序有時候MySQL數據庫每個表限制爲2 GB。我給出了一個平衡表負載而不是平衡服務器工作負載的建議。 –