gpt4 book ai didi

mysql - 数据库中用户 ELO 分数计算的最佳且最有效的方法

转载 作者:行者123 更新时间:2023-11-29 16:56:25 25 4
gpt4 key购买 nike

我很难理解为我们平台上的大量用户进行类似 ELO 分数计算的问题。

例如。对于大量用户中的每个用户,基于可变数量的“完成的事情”的复杂公式将根据类似匹配的原则为每个用户得出分数。

就我们的情况而言,它基于发布的帖子数量、接受的连接、发送的消息、一个月内的 session 数量、.. 完成的其他事情等。

我有两个想法来做这件事:

  • 实时:在每条帖子、消息中......为该用户运行公式
  • 每周一次:运行脚本来计算所有用户的所有内容。

我对这两个问题的担忧:

  • 实时:对用户执行的每个操作进行查询和计算会显得过度。如果假设有 500 个用户处于事件状态,并且所有用户都在执行操作,我认为数据库将会遇到困难。他们还会运行一个脚本来重新计算不活跃用户的分数(以降低他们的分数)

  • 每周一次:例如,如果我们有 5,000 个用户(第一阶段),那么这将导致运行计算公式 5,000 次,并且可能需要很长时间,并且当更多用户加入时,时间会增加.

在大约 12 个变量的整个公式中,对单个变量的计算查询大多是简单的“COUNT FROM table”,但也有一些类似于计算“我的连接的所有连接”,需要一些连接。

为此,我首先将每个操作“记录”到表中,仅记录计数器值,并随着每个操作增加/减少它们,并使用这些值运行公式(每周记录)。这可行,但不能应用于每个变量(例如连接的连接)。

注意:我们的服务器端基于 PHP 和 MySQL。

我们还运行 Redis,但我不确定这是否可以改进这些细节。

如果需要,我们可以选择将数据导出/推送到其他服务器/数据库。

我的主要示例是应用程序“Tinder”,它使用类似排序的算法进行匹配(可能使用不太复杂的数据变量,因为它们不使用您可以加入的群组和社区)

我想知道他们是否在每次滑动、每次设置更改时实时运行,..或者他们是否有一个每次为一小批用户连续运行的脚本。

一切都归结于这里。记住,例如,有一天我们将拥有 50,000 个用户,最有效/非数据库表锁定的方法是什么?

最佳答案

我处理这个问题的方式:

  1. 实现实时算法。
  2. 测量。真的很慢吗?尝试优化
  3. 还是很慢?将算法移至单独的异步进程。每当有更新时就运行该进程。实际上,这与 1 是一样的,但它不会减慢 PHP 请求,如果它变得繁忙,可能需要更多时间才能 catch 。
  4. 还是很慢?现在您也许可以通过批量进行多项更改来进行优化。

如果您现在有 5000 个用户,请确保它在 5000 个用户的情况下运行良好。您不会一夜之间增长到 50,000,因此随着问题的变化进行调整和投资。您可能会对性能问题出在哪里感到惊讶。

测量是关键。如果您现在确实想支持 5 万用户,请进行模拟和测量。

关于mysql - 数据库中用户 ELO 分数计算的最佳且最有效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52538572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com