Ash*_*pta 5 mysql performance database-design database-recommendation query-performance
我正在从事一个项目,我需要以两种方式对网站进行排名 - 全球排名及其在特定国家/地区的排名。计算两者的基础有多种因素。大约有 200 个国家需要计算排名。
我正在使用 MySQL
我有两个问题——
全球排名
每当添加任何新网站时 -
order by
根据分数进行分配排名,并返回其位置。这似乎不像order by
昂贵的操作那样可扩展。国家排名数据库和更新
我应该如何存储每个网站的每个国家/地区排名?
添加新网站时如何更新所有这些排名?在这里,更新的成本甚至比全球排名更高。
我应该on-the-fly
在查询时生成它然后缓存结果吗?
Play 商店等网站如何显示个性化和基于国家/地区的结果?
您会对数十亿个网站进行排名吗?如果是这样,那么即时和重新计算都是不可能的。
相反,有一个后台任务来解决这个问题。对于显示,显示表中的信息,可能会过期一两天(取决于重新计算需要多长时间)。
将排名放在一个单独的表中,只有website_id
和rank
。这将使在 recalc 原子和快速后替换整个表。也许第二张表带有website_id
、country_code
( CHAR(2) CHARACTER SET ascii
) 和rank
。
您还没有解释如何计算排名,因此我无法让您了解如何将其作为后台任务进行。