2010-07-24 65 views
3

我通過Heroku在Postgres上運行Rails應用程序。在數據庫中存儲項目的「喜歡」?

我想實現與Facebook類似我的網站上的各種物品,如用戶評論「喜歡」。將數據存儲在我的數據庫中最高效和快速的最明智的方法是什麼?

最明顯的一個就是讓用戶和項目之間的類似連接表,像這樣:

user_id int 
item_id int 
item_type string 
created_at datettime 

然而,在顯示的時候,這意味着每一次我拉一個項目的時候,我會必須在整個桌子上拉一個連接,這可能會變得非常大。

對此的明顯反應是將項目中的計數器存儲在計數器中。然而,這不會起作用,因爲誰喜歡一件物品很重要,既用於在物品旁邊顯示,也用於隱藏用戶已經喜歡的物品的類似按鈕。

我的計劃是添加到所有可愛的項目中,我將存儲一個序列化數組的文本字段。這樣,一個項目的每一個拉將與誰喜歡它的完整列表來。有沒有更好的方法來做到這一點,或者這是推薦的方法?

回答

7

您是否有理由相信您的數據集將會非常大以至於連接將會過於昂貴? Postgres雖然速度不及目前最快的關係數據庫管理系統,但現在相當快。我曾經運行一個網站,每天獲得數百萬的綜合瀏覽量,並且需要一些非常複雜的查詢來生成每個頁面。通過做一些簡單的緩存,我們可以在非常適中的硬件上運行它。

您放棄了非規範化時使用RDBMS的許多好處。我只會這樣做,如果我知道我必須這樣做。如果是這種情況,我會考慮使用其他的東西,比如一個簡單的鍵/值數據庫。但是我認爲,如果你的數據量很大,那麼你的情況可能就是這樣。

+0

同意。除非遇到性能問題,否則絕對不應該進行規範化。如果索引正確,「喜歡」表的大小並不重要。 – 2010-07-25 14:58:17