数据库中用户elo分数计算的最佳和最有效的方法

jtjikinw  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(338)

对于我们平台上的大量用户来说,像elo分数这样的计算问题让我绞尽脑汁。
例如。对于大量用户中的每一个用户,一个复杂的公式,基于可变数量的“完成的事情”,将为每个用户提供一个类似匹配原则的分数。
对于我们的情况,它是基于发布的帖子数量,接受的连接,发送的消息,一个月内的会话数量。。其他事情等。
我有两个想法:
实时:在每一个帖子,信息。。运行该用户的公式
每周一次:运行脚本为所有用户计算所有内容。
关于这两个问题,我有:
实时性:对于用户执行的每一个操作来说,查询和计算都是多余的。如果说,有500个用户处于活动状态,所有的用户都在执行操作,那么我认为数据库的运行会很困难。他们还会运行一个脚本来重新计算非活动用户的分数(降低他们的分数)
每周一次:例如,如果我们有5000个用户(在第一阶段),那么这将导致运行计算公式5000次,并且可能需要很长时间,并且当更多用户加入时,时间会增加。
在一个由大约12个变量组成的完整公式中,对单个变量的计算查询大多是简单的“从表中计数”,但也有一些查询类似于计算“我的连接的所有连接”,这需要一些连接。
为此,我首先将每个操作“记录”到一个表中,只记录计数器值,并随每个操作增加/减少它们,然后用这些值运行公式(每周记录一次)。这是可行的,但不能应用于每个变量(如连接的连接)。
注意:我们的服务器端是基于php和mysql的。
我们也在运行redis,但我不确定这是否能改善这些零碎的东西。
如果需要,我们可以选择将数据导出/推送到其他服务器/数据库。
我的主要例子是应用程序'tinder',它使用类似排序的算法进行匹配(可能使用不太复杂的数据变量,因为它们不使用可以加入的组和社区)
我想知道他们是否在每次刷卡、每次设置更改时都能实时运行。。或者如果他们有一个脚本,每次为一小批用户连续运行。
一切都归结到哪里。要做到这一点,最有效/非数据库表锁定的方法是什么?例如,记住,我们将有50000个用户?

s8vozzvw

s8vozzvw1#

我的处理方法是:
实现实时算法。
测量。真的很慢吗?尝试优化
还慢吗?将算法移动到单独的异步进程。只要有更新,就让进程运行。实际上,这和1是一样的,但是它不会减慢php请求的速度,如果它变得很忙,它可能需要更多的时间来赶上。
还慢吗?现在,您可以通过批处理几个更改来进行优化。
如果您现在有5000个用户,请确保它在有5000个用户的情况下运行良好。你不可能一夜之间就增长到5万,所以当你的问题改变时,调整并投资于此。你可能会对你的表现问题感到惊讶。
测量是关键。如果你现在真的想支持5万个用户,那就模拟和测量一下。

相关问题