2012-09-18 77 views
1

我即將建立一個網上商店,需要提出一個跟蹤用戶信息的解決方案,並基於此建議他們可能喜歡的用戶產品,然後構建一個個人用戶配置文件(他們喜歡什麼)。被跟蹤/用於算法跟蹤用戶活動,以建立個人用戶配置文件和建議

信息,我認爲應該包括:

  • 過去的訂單
  • 願望清單/書籤/收藏夾...
  • 輸入搜索條件
  • 產品瀏覽(在這裏也跟蹤並考慮「落客」 - 引用,意思是用戶關閉網站/立即返回或查看更多圖片/向下滾動(視口)等)

產品被分配到的類別,以及不同的屬性,例如顏色,標籤等表productcolorcategory關係等

產品
id_product
價格
timestamp_added

顏色
id_color
...

product_color
id_product_color
id_product
id_color

的問題是:

1)你將如何構建一個數據庫來跟蹤例如產品被查看?它應該是就這樣?:

product_viewed
id_product_viewed
id_product
id_user
時間戳

2)如果我想例如計算用戶最喜歡的3種顏色是基於用戶購買的產品的顏色,放在他們的願望清單中,添加書籤,查看:可以從性能角度處理這些顏色,以計算每次查詢數據庫時應該推薦哪些產品時間?或者您是否不時更新用戶配置文件,僅根據所跟蹤的數據僅存儲已計算的最喜歡顏色,並使用存儲的計算數據查找與此信息相匹配的產品?

像Facebook,亞馬遜或pinterest這樣的大型網站如何做到這一點?根據您點擊的項目,您可以根據自己喜歡的項目獲得建議。他們如何處理這個問題?

回答

0

用你剛纔寫的表格做它是一個好方法。 Facebook和其他公司也在這樣做。

但爲了提高效率,他們使用所謂的B-Trees。

+0

好的,謝謝你!我只從索引中知道B樹,我會看看這個,謝謝!你對我的問題有何看法?你會如何計算最喜歡的顏色? – Chris

+0

雖然我剛剛搜索了一棵B樹,但是有可能給出一個解釋,爲什麼像Facebook這樣的人會使用B樹而不是另一種解決方案?即爲什麼B-Tree是最好的? –

+0

有了像Facebook這樣的海量數據庫,有時間提供信息很重要。經典的樹不會是最好的解決方案。使用B-Tree,您可以將所有葉子放在一個層面,因此只需一步即可訪問信息:「數據庫 - >信息」。而不是經典的樹:'數據庫 - >配置文件 - >名稱 - >信息'。但據我所知,這超越了MySQL。一棵B樹有點難以設置。 – IMX

1

是的,您的product_viewed架構可以。

對於他們的三個最喜歡的顏色,試試這個未經測試的代碼:

select c.name, count(*) as rank 
from product_viewed pv 
JOIN product_color pc on pc.id_product = pv.id_product 
JOIN color c on pc.id_color = c.id_color 
where pv.id_user = 1 
group by c.name 
order by rank desc 
limit 3 

上用來連接的表和上觀看的項目數一個合理的限度的ID鑑於指標,這應該有不俗的表現。在路上,你可能只看他們最近的100個產品等,只是爲了防止其永遠增長。 (或者,如你所建議的,緩存)。

沒有什麼神奇的這一點,所以它可能類似於這些網站都在做。