2011-05-20 48 views
0

我有一個網站,人們發佈評論,圖片和其他內容。我想添加用戶可以喜歡/不同於這些項目的功能。什麼是一個好的策略來實現類似於facebook'likes'的功能?

我使用數據庫來存儲所有的內容。

有我在看的幾個方法:

方法1:

  1. 添加「LIKE_COUNT」一欄表,每當有人喜歡的項目增加它
  2. 添加一個'user_likes'表以保持用戶喜歡的一切。

優點:易於實現,所需的最少查詢。 缺點:該項目需要刷新與每次更改類似的計數。我有一個緩存項目的整個列表,這將打破。

方法2:

  1. 創建新表「like_summary」和每個項目的總喜歡存儲在該表中
  2. 添加「user_likes」表保持跟蹤一切用戶已經喜歡。
  3. 緩存在內存緩存的數據like_summary,且僅當該值改變

沖洗它優點:在主項表減負荷,可以不必擔心緩存。 缺點:對memcache命中太多(一頁顯示20項,需要從memcache加載),可能會很慢

有什麼建議嗎?

+0

如果沒有關於預期負載,訪問數量和總體架構和設置的進一步信息,這個問題沒有多大意義。 – 2011-05-20 05:52:53

+0

你是什麼意思'實現Facebook喜歡'?你想讓你的網站複製這個功能(沒有任何真正的facebook連接),或者你想跨網站進行某種mashup-kludge集成嗎?非常不清楚沒有更多的信息.​​.. – phooji 2011-05-20 06:16:41

+0

對不起,因爲不清楚..這裏有一些更多的細節:1.它將只是內部(所以不要被嵌入到外部網站)。 2.你可以認爲它有點類似於堆棧溢出的投票/投票。 3.我想確保它可以擴展到500個併發頁面瀏覽量,每個頁面包含25個「喜歡」項目旁邊顯示的項目。整個系統基於Python/Mysql/Memcache, – Toofan 2011-05-20 06:43:30

回答

3

只是一個瘋狂想法:爲什麼不只是使用Facebook的like按鈕?然後,您不僅可以免費獲得該功能,還可以通過Facebook牆壁帖子增加大量流量到您的網站:「此人喜歡本網站」。

+0

這是供內部使用的一個網站,功能類似於facebook的like按鈕,但不完全一樣。 – Toofan 2011-05-20 06:49:05

1

一個在用戶和項目之間進行多對多映射的關係表應該可以做到。

1

您實際上只需要user_likes表。 like_count是從該表中計算出來的。如果需要獲得性能,則只需要存儲該值,但由於使用的是memcached,因此不要將聚合值存儲在數據庫中,而是僅將其存儲在memcached中。

+0

好點。我一直在考慮在memcache中存儲喜歡數,但是我想知道,與在單個SQL語句中加載所有內容相比,它會具有多少性能。對於具有25個'喜歡'實體的頁面,選項將會有25個memcache請求單個sql語句。 – Toofan 2011-05-20 06:50:24

+0

當然,你將在MySQL中擁有查詢緩存,但它的使用是有限的。 Memcache ID速度非常快,您可以在幾秒到幾百個項目之間進行檢索,以執行單個小查詢。 – GolezTrol 2011-05-20 07:05:36

+0

謝謝!這就說得通了。如果我用一些流行的「計數」來預熱memcache,那麼它應該能夠做得很好。爲什麼我想在數據庫中存儲喜歡的另一個原因是我可以做'喜歡'之類的東西。我仍然可以將like count存儲在數據庫中,但可將其用於批處理。 – Toofan 2011-05-20 07:19:36

相關問題