プレイヤーをゲームに参加させるための効率的なアルゴリズムを考えています。膨大な数のプレーヤーが存在するため、アルゴリズムは非同期にする必要があります (つまり、クラスター内の任意の数のマシンに拡張できます)。詳細があります: 無向グラフがあると想像してください (各ノードはプレーヤーです)。プレイヤー間の各エッジは、プレイヤーが同じゲームに参加できることを意味し、エッジがなければ参加できないことを意味します。次の基準でプレーヤーをグループ化するアルゴリズムを実装する必要があります。
- 各プレイヤーには、「ゲーム待機中」または「ゲーム中」という状態があります。待機中のプレイヤーのみをゲームにグループ化する必要があります
- 各ゲームには最小人数と最大人数のプレイヤーがいます
実装に関する私の考え: グラフは、NoSQL データベースを介して (クラスター内のさまざまなマシンから) 格納およびアクセスされます。特定のスキーマはまだありません (提案はありますか?)。また、個々のプレーヤーへのアクセスをロックする (ペシミスティック ロックとも呼ばれる) ことは、同じプレーヤーにアクセス/収集しようとする他のプロセスの速度を低下させる潜在的なボトルネックになるため、オプションではありません。
私の質問は、そのようなアルゴリズムを実装した人はいますか? 助言がありますか?
PS: 私はすでに未加工のアイデアを持っていますが、最初に議論したい/人々が提案するものを確認したいです.
ありがとう!
EDIT1: Thomas Jungblut への回答: ゲーム スロットの使用は興味深いアイデアですが、(正しく理解し次第) 場合によっては機能しない可能性があります。Fox の例: 各ゲームには正確に 3 人のプレイヤーが必要です。新しい 6 人のプレーヤー (ABCDEF と呼びましょう。例 1 を参照) は、A、B、E、F、C、D の順序で 1 つずつグラフ/キューに入ります。
その結果、1 つのゲーム (A、B、C) と、空のスロットを持つ 2 つのゲーム (D) および (E、F) のみが作成されます。しかし、最適なのは (A, C, D) と (B, E, F) の 2 つのゲームですよね?