2015-02-09 97 views
2

我是一名視頻遊戲開發人員,我使用Parse.com來開發我的遊戲。多虧了它,我可以節省球員分數和比賽時間。在每場比賽結束時,我會顯示社區統計信息,讓玩家看到他的分數在社區分數中的位置。Parse.com:從大量數據中生成統計數據

東西看起來像這樣: enter image description here

由於我沒有後端專家,因爲我雖然我的迷你遊戲,一個永遠不會需要處理的數據數量較大,我天真地計算使用這些統計數據一個雲代碼(由Parse.com提供的功能)將每個得分條目分組並生成一個由40分組成的圖表。

到目前爲止,我提取從Parse.com數據庫中的每個分數和提取以下數據:

  • MAX_SCORE(INT):該組中的最高分;
  • points(string):從0到1的40個點,用逗號分隔,描述實際圖表; entry_count(int):數據庫中條目的數量;
  • medium(float):集合的中等分數;

編輯

點串是這裏最重要的。這是一個字符串,如下所示:

0.4147,0.286,0.2179,0.1463,0.1106,0.0819,0.0676,0.0458,0.0363,0.0264,0.0206,0.014,0.0096,0.008,0.0063,0.0042,0.0027,0.0025,0.0018,0.0013,0.0008,0.0008,0.0004,0.0005,0.0003,0.0002,0.0002,0.0001,0.0001,0.0001,0.0001,0,0,0,0,0,0,0,0,0 

每個數字代表統計信息的一個點。分數越高,分數越高。第一個點表示分數接近於0,最後一個點表示分數接近max_score。編號是從0到1。因此,如果90%的分數是0(或幾乎),在字符串中的第一個數字將是0.9 ...

/EDIT

問題是數到目前爲止所玩的遊戲(超過500K遊戲)。這意味着負責計算統計點的腳本必須處理500K +分數,這比實際的JavaScript數組限制更高。

我知道這可能是任何後端專家的基本問題,但我找不到一個聰明的解決方案。我不知道如何使用Parse.com中使用JavaScript編寫的Cloud Code生成大量數據。

任何幫助或指導意見。

回答

1

恭喜有一個流行的應用程序。行計數是一個低成本的操作,只是做(新的Parse.Query(「MyTable」))。count()。執行彙總統計的方法是在自己的表中保持一個行中的最大值和平均值。您可以使用計數來計算增量平均值,即see here。要點是:

newAve = oldAve + (newScore-oldAverage)/count 

最大爲更簡單:

newMax = (newScore>oldMax)? newScore : oldMax; 

不知道我理解的points是指你的問題是什麼,但我希望你可以在這裏擴展思路。

編輯

我想我明白的點的數據是分數的分佈。這聽起來像是你將分數分成40個類別(可能是四捨五入),然後計算每個分箱中獲得的分數。如果我是對的,也可以使用附加的彙總表示來處理:添加一個表,其中包含一個表示分欄的列(例如int,0..40)和一個表示分數數量的int列在那個箱子裏實現。整個表格40 * 2int可以很容易地讀入內存並進行操作。

+0

感謝您的回答。其實主要問題是關於計算點。在圖像上,你可以看到一個由40個點組成的圖表。這個分數越高(接近1.0),那個分數的比賽就越多。然後,如果90%的比賽得分接近150分並且最高分是300,則圖表中心的點將具有0.9的值。 另外,圖表左側是0分,右側是最高分。現在更清楚了嗎? – lvictorino 2015-02-09 15:12:15

+0

這是一個簡單的想法,但它應該工作。謝謝你的幫助。 – lvictorino 2015-02-10 11:37:35