网站排名的最佳数据库设计

Ash*_*pta 5 mysql performance database-design database-recommendation query-performance

我正在从事一个项目,我需要以两种方式对网站进行排名 - 全球排名及其在特定国家/地区的排名。计算两者的基础有多种因素。大约有 200 个国家需要计算排名。

我正在使用 MySQL

我有两个问题——

全球排名

每当添加任何新网站时 -

  • 如果我将网站排名存储在数据库中,我需要重新计算所有网站的排名。每次添加新网站时,这都需要进行大量处理。
  • 或者另一种选择是为每个网站分配一个分数,每当进行查询时,通过order by根据分数进行分配排名,并返回其位置。这似乎不像order by昂贵的操作那样可扩展。

国家排名数据库和更新

  • 我应该如何存储每个网站的每个国家/地区排名?

  • 添加新网站时如何更新所有这些排名?在这里,更新的成本甚至比全球排名更高。

  • 我应该on-the-fly在查询时生成它然后缓存结果吗?

Play 商店等网站如何显示个性化和基于国家/地区的结果?

Ric*_*mes 5

您会对数十亿个网站进行排名吗?如果是这样,那么即时和重新计算都是不可能的。

相反,有一个后台任务来解决这个问题。对于显示,显示表中的信息,可能会过期一两天(取决于重新计算需要多长时间)。

将排名放在一个单独的表中,只有website_idrank。这将使在 recalc 原子和快速后替换整个表。也许第二张表带有website_idcountry_code( CHAR(2) CHARACTER SET ascii) 和rank

您还没有解释如何计算排名,因此我无法让您了解如何将其作为后台任务进行。