Parse.com:从大量数据中生成统计数据

Parse.com: generate statistics out of a large set of data

我是一名视频游戏开发者,我在游戏中使用 Parse.com。多亏了它,我可以保存玩家分数和游戏持续时间。在每个游戏环节结束时,我都会显示社区统计数据,让玩家了解他的分数在社区分数中的位置。

看起来像这样的东西:

因为我不是后端专家,而且我从来没有想过我的一个迷你游戏必须处理大量数据,所以我天真地使用云代码([=49 提供的功能)计算了这些统计数据=]) 对每个分数条目进行分析并生成由 40 分组成的图表。

到目前为止,我从 Parse.com 数据库中提取了每个分数并提取了以下数据:

编辑

points 字符串在这里是最重要的。这是一个看起来像的字符串:

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),则字符串中的第一个数字将为 0.9...

/编辑

问题是到目前为止玩的游戏数量(超过 500K 游戏)。这意味着负责计算统计点的脚本必须处理 500K+ 分数,这远远高于实际的 JavaScript 数组限制。

我知道这可能是任何后端专家的基本问题,但我找不到聪明的解决方案。我不知道如何使用 Parse.com 中 JavaScript 中编写的云代码从如此多的数据条目中生成统计信息。

如有任何帮助或指导,我们将不胜感激。

恭喜您拥有一款受欢迎的应用。行计数是一个低成本的操作,只需执行 (new Parse.Query("MyTable")).count()。进行汇总统计的方法是将 运行 最大值和平均值保持在它们自己 table 的一行中。您可以使用计数 see here 计算增量平均值。要点是:

newAve = oldAve + (newScore-oldAverage)/count

最大值更简单:

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

不确定我是否理解 points 在你的问题中指的是什么,但希望你可以在这里扩展这些想法。

编辑

我想我将积分数据理解为分数分布。这听起来像是您将分数分为 40 个类别(可能通过四舍五入),然后计算每个分箱中获得的分数。如果我是对的,这也可以用一个额外的摘要表示来处理:添加一个 table 和一个代表 bin 的列(比如一个 int,0..40)和一个代表 int 的列在那个 bin 中获得的分数。整个 table 40*2int 可以很容易地读入内存并进行操作。