我在考慮將玩家加入遊戲的高效算法。由於會有大量玩家,因此該算法應該是異步的(即可擴展到羣集中的任意數量的機器)。 有細節: 想象一下,有一個無向圖(每個節點是一個球員)。玩家之間的每條邊都意味着玩家可以參加同一場比賽,如果沒有優勢,他們就不能參加比賽。我需要實現算法,按照以下標準對玩家進行分組:並行/集羣圖節點分組的高效算法
- 每個玩家都有一個狀態:「等待遊戲」或「在遊戲中」。只有等待玩家應該分爲遊戲
- 每場比賽都有球員
我對實現的想法最小和最大行數:在集羣中 圖形將被存儲和訪問過的NoSQL數據庫(從不同的機器)。還沒有特別的模式(有什麼建議嗎?)。同時鎖定對單個玩家的訪問(又名悲觀鎖)不是一種選擇,因爲這是一個潛在的瓶頸,可能會放慢其他嘗試訪問/收集同一玩家的進程。
我的問題是:有沒有人實現過這樣的算法?有什麼建議麼? PS:我已經有了一些想法,但首先想要討論/檢查人們的建議。
謝謝!
EDIT1: 針對托馬斯Jungblut: 使用遊戲插槽是一個有趣的想法,但(只要我理解正確的話),可能無法在某些情況下工作。 Fox例子:每個遊戲應該有3個玩家。新6個播放器(讓ABCDEF調用它們,見的exaple 1)以該順序通過一個來進入圖/隊列中的一個:A,B,E,F,C,D。
作爲結果只(A,B,C),另加2場空插槽比賽:(D)和(E,F)。但最佳的應該是2場比賽:(A,C,D)和(B,E,F),對嗎?
也許有基於MapReduce的一個很好的執行? – neleus
你的時間要求是什麼?如果您認爲MapReduce是您的選擇,您肯定可以等待幾個小時來將人員分組到遊戲中(這對我來說聽起來很奇怪)。我個人會使用一個消息隊列,並讓人們貪婪地在有空閒插槽的遊戲中。你可以用一個簡單的mysql數據庫來做到這一點。你也應該在更科學的單位中定義「大量的球員」。 –
關於遊戲插槽,請參閱我上面的編輯。沒有具體的時間要求......這取決於技術使用和其他許多因素。我的目標是實現一個或多個算法,然後分析它們的性能,缺點和優點。 「大量的球員」 - 讓我們假設它是一百萬。 – neleus