Mysql
網站排名的最佳數據庫設計
我正在做一個項目,我需要以兩種方式對網站進行排名 - 全球排名和它們在特定國家/地區的排名。計算兩者的基礎有多種因素。大約有 200 個國家需要計算排名。
我正在使用 MySQL
我有兩個問題——
全球排名
每當添加任何新網站時 -
- 如果我將網站排名儲存在數據庫中,我需要重新計算所有網站的排名。每次添加新網站時都需要進行大量處理。
- 或者另一種選擇是為每個網站分配一個分數,每當進行查詢時,
order by
根據分數分配排名,並返回其位置。這似乎不像order by
昂貴的操作那樣可擴展。國家排名數據庫和更新
- 我應該如何儲存每個網站的每個國家/地區排名?
- 添加新網站時如何更新所有這些排名?在這裡更新將比全球排名更昂貴。
- 我應該
on-the-fly
在查詢時生成它然後記憶體結果嗎?遊戲商店等網站如何顯示個性化和基於國家/地區的結果?
你會對數十億的網站進行排名嗎?如果是這樣,那麼即時和重新計算都是不可能的。
相反,讓後台任務處理該問題。為了顯示,顯示表格中的資訊,可能會過時一兩天(取決於重新計算需要多長時間)。
將排名放在單獨的表中,只有
website_id
和rank
。這將使recalc 原子和快速替換整個表。可能是帶有website_id
、country_code
(CHAR(2) CHARACTER SET ascii
) 和的第二個表rank
。您還沒有解釋如何計算排名,因此我無法為您提供有關如何將其作為後台任務進行的任何見解。