我正在考虑将玩家加入游戏的有效算法。由于会有大量玩家,算法应该是异步的(即可扩展到集群中的任意数量的机器)。有细节:想象有一个无向图(每个节点都是一个玩家)。玩家之间的每个优势意味着玩家可以参加同一场比赛,如果没有优势,他们就不能参加。我需要实现将按照以下标准对玩家进行分组的算法:
- 每个玩家都有一个状态:“等待游戏”或“游戏中”。只有等待的玩家才应该被分组到游戏中
- 每场比赛都有最少和最多的玩家人数
我对实现的想法:该图将通过 NoSQL 数据库(来自集群中的不同机器)进行存储和访问。目前还没有特定的模式(有什么建议吗?)。此外,锁定对单个玩家的访问(也称为悲观锁)不是一种选择,因为它是减慢试图访问/收集相同玩家的其他进程的潜在瓶颈。
我的问题是:有没有人实现过这样的算法?有什么建议么?
PS:我已经有了原始想法,但首先想讨论/检查人们的建议。
谢谢!
EDIT1:回应Thomas Jungblut:使用游戏插槽是一个有趣的想法,但(只要我理解正确)它在某些情况下可能不起作用。Fox 示例:每场比赛都应该有 3 名玩家。新的 6 个玩家(我们称他们为 ABCDEF,参见示例 1)按以下顺序依次进入图形/队列:A、B、E、F、C、D。
结果只会创建一个游戏(A,B,C),加上两个空槽游戏:(D)和(E,F)。但最佳应该是 2 场比赛:(A,C,D)和(B,E,F),对吧?