1
我的網站提供了大量的標記和分類內容,並且我試圖創建一個強大的算法來將內容與用戶需求連接起來。用戶可以選擇他們最感興趣的標籤,並且與這些標籤匹配的內容被賦予更高的優先級。此外,內容可以被「喜歡」(優先推動),時間衰減優先推倒。因此,最終,用戶應該看到與他們感興趣的內容相對應的相對較新的內容,並且也受其他用戶的歡迎。優化從一個非常大的MySQL表中提取數據的算法
目前的算法是這樣的:
- 拉離
content
表中的所有項目。指定每個項目的得分爲1. - 檢查
content_tags
對user_tags
以查看從步驟1拉出的數組中是否有匹配項。如果是,請將乘數應用於該項目的得分。 - 查看
content_likes
查看每件商品有多少喜歡的商品。根據此金額應用另一個乘數。 - 根據項目的時間衰減應用第三個因子。顯然,較舊的物品會受到比新物品更大的懲罰。
- 按總分數排序。結果數組首先應該有最相關的項目。然後,我可以簡單地將此數組修剪到20個左右的項目,並將其顯示在頁面上。
正如你可能會說,這是一個緩慢的算法,它不僅需要運行一個查詢拉每一塊內容,但隨後它具有運行單獨的查詢檢查content_tags
, user_tags
和content_likes
。查詢太多!
我想我的第一個問題是:我做這一切都錯了嗎?除此之外,你能想出任何方法來優化我上面總結的所有內容嗎?算法本身工作得很好,假設項目和用戶都有相關的標籤。但是我擔心,當我的桌子增長到數以萬計的項目時,我會陷入一片混亂。
感謝您的幫助!
問:你能想出任何方法來優化我上面概述的所有內容嗎?答:設計您的數據庫模式 - 並創建數據庫索引 - 進行高效查詢。 – paulsm4
你爲什麼不跟蹤每個內容的分數?然後你就沒有經歷過所有這些,只需要爲內容抽取分數就很容易。 – kennypu
我認爲跟蹤評分的問題在於,它會根據每個用戶的偏好而改變。如果它只包含喜歡和時間衰減,我可以保持分數,但用戶標籤增加了複雜度的新維度。 –