2014-10-27 54 views
1

我想存儲的視頻觀看次數在數據庫(MySQL的)存儲視圖算到數據庫

我想存儲

所以我創建了一個表,每一位旅客的IP地址(和其他一些信息) (VidoId,IP,日期,用戶代理)

現在我的問題是,每次我想的觀看次數,我必須執行這個查詢:

SELECT Count(*) FROM Views WHERE VideoId = xxx 

我知道我可以在這個存儲到科拉姆n在我的視頻桌上,並在每一張插頁上進行更新。但是這會造成分割並破壞數據,也不可能用EER進行建模。 我也知道我可以緩存它。

我只是想知道有沒有什麼辦法能夠高效做到這一點,modelable?

謝謝。

回答

5

來處理這種情況的典型的方法是創建一個單獨的表,對於一個實體聚集數據。對你來說,這將是一個video_aggregate表具有以下的列:

視頻ID(主鍵),NumberOfViews

這裏是我覺得一些大的優勢大於加入另一個表的努力:

1)非常快讀,如果你需要將它與視頻數據

2)無鎖定結合起來/你的視頻表阻止用戶每次瀏覽的視頻只有一個簡單的加入。事實上,更新雙方的意見和video_aggregate表可以(並且可能應該)是異步的。它可以容忍一點延遲。

3)的視圖的數量不是視頻的屬性 - 不描述該實體在所有。它描述了用戶活動。這似乎迂腐,但它是專家造型極爲重要,將發揮出很好隨着時間的推移,當你把這種關心在關係數據庫模型。

p.s.調用您的表格比「視圖」更具體,比如「VideoViews」。

0

爲了有效地做到這一點,Views(VideoId)創建一個索引:

create index idx_views_videoid on Views(VideoId); 

查詢應然後是對於大多數應用足夠快。