2013-07-17 44 views
1

該功能的工作方式如下:什麼是每天收到電子郵件通知的「保存搜索」功能的最佳數據結構?

  • 網站具有用戶和用戶之間可以有任意數量的搜索 保存(如喬布斯在紐約,PHP就業等)。有很多參數 參與,所以這是幾乎不可能的索引(我正在使用MySQL)。
  • 每天都有大量新職位發佈到網站
  • 我們每24小時會發布過去24小時內發佈的工作,並將其與現有工作搜索進行匹配,然後通過電子郵件向用戶發送有關匹配工作的電子郵件。

這裏的問題在於它是一個高流量的網站,即使是樂觀的案例(發佈的新職位很少),運行此搜索查詢需要10分鐘。這個問題有沒有經典的解決方案?我們一直在使用獅身人面像搜索密集的地方,但我不能在這裏應用它,因爲獅身人面像不會返回所有結果,它會最終切斷它們。現在,我可以做的最好的事情是擁有search.matched_job_ids列,然後在發佈任務時,將其與所有現有搜索進行匹配,並在匹配搜索的matched_job_ids列中記錄作業ID。在這一天結束時,我們將通過電子郵件向用戶發送並截斷列。這在技術上不會提供任何性能改進,但通過執行許多較小的搜索查詢而不是一個大的查詢來隨時間推移負載。有沒有更好的方法?

回答

1

每個工作都可以用參數數量 - 工作範圍,工作名稱,工資等來描述。每個參數組預定義值 -

  1. 工作領域 - IT,醫藥,工業...
  2. 招聘名字 - 程序員,測試人員,駕駛...
  3. 10-50成千上萬元不等,50 -100 ...
  4. Flexy時間,全職,兼職...

讓我們的編碼保存的搜索。所有參數中的最大數值(我相信它是工作名稱)是數字系統的基礎。參數數量 - 位數。

BIGINT = 2^64-1 = 18 446 744 073 709 551 616 = 20 digits。在正常的10個基本系統中,您可以描述每個參數都有10個值的20-1 (first digit is fixed) = 19。由於10個值不足以描述作業名稱等參數,因此應使用30-60個基本系統。當然,這會導致參數總數減少,但我可以用12-15個參數來描述一些作業。

創建表savedSearches(code,mail)哪些索引(代碼,郵件)。索引類型 - 主鍵。

新工作發佈:

1)以編程方式對其進行編碼。
2)select mail from savedSearhes where code=calculatedCode。郵件處於隱蔽索引 - 選擇sholuld足夠快。
3)發送新工作到選定的郵件。

重要注意事項 - 一個參數 - 發佈作業的主機公司可能有太多值。我想你應該單獨存儲它,而不是保存在SeSehes表中,因爲用戶通常不關心公司 - 他關心薪水,技能e.t.c.

如果用戶想要搜索的不是固定參數,例如不僅僅是程序員職位而是測試人員,團隊領導者則必須搜索而不是單個編碼號碼,而是間隔

我的想法只是假設,進一步調查的基礎))

相關問題