Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Parse.com:从大量数据中生成统计信息_Javascript_Parse Platform_Backend - Fatal编程技术网

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

Javascript Parse.com:从大量数据中生成统计信息,javascript,parse-platform,backend,Javascript,Parse Platform,Backend,我是一名视频游戏开发人员,我使用Parse.com进行游戏开发。多亏了它,我保存了球员的分数和比赛时间。在每次游戏结束时,我都会展示社区统计数据,让玩家看到自己的分数在社区分数中的位置 像这样的东西: 由于我不是后端专家,而且我从未想过我的一款迷你游戏需要处理大量数据,因此我天真地使用云代码(Parse.com提供的功能)计算了这些统计数据,对每个分数条目进行了分析,并生成了一个由40分组成的图表 到目前为止,我从Parse.com数据库中提取了每个分数,并提取了以下数据: 最大分数(int

我是一名视频游戏开发人员,我使用Parse.com进行游戏开发。多亏了它,我保存了球员的分数和比赛时间。在每次游戏结束时,我都会展示社区统计数据,让玩家看到自己的分数在社区分数中的位置

像这样的东西:

由于我不是后端专家,而且我从未想过我的一款迷你游戏需要处理大量数据,因此我天真地使用云代码(Parse.com提供的功能)计算了这些统计数据,对每个分数条目进行了分析,并生成了一个由40分组成的图表

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

  • 最大分数(int):集合中的最大分数
  • 点(字符串):从0到1的40点,逗号分隔,描述实际图表
  • entry_count(int):数据库中的条目数
  • 中奖(浮动):该组的中奖分数
编辑

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

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的分数,最后一点表示接近最大分数的分数。数字从0到1。因此,如果90%的分数为0(或几乎为0),字符串中的第一个数字将为0.9

/EDIT

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

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


欢迎提供任何帮助或指导。

祝贺您有了一个流行的应用程序。行计数是一个低成本的操作,只需执行(new Parse.Query(“MyTable”)).count()。进行汇总统计的方法是在他们自己的表中的一行中保持一个运行的最大值和平均值。您可以使用计数计算增量平均值。要点是:

newAve = oldAve + (newScore-oldAverage)/count
max更简单:

newMax = (newScore>oldMax)? newScore : oldMax;
我不知道你的问题中的
要点是什么,但希望你能在这里扩展想法

编辑


我认为我理解分数数据是分数的分布。听起来好像你把分数分为40个类别(可能是四舍五入),然后计算每个类别的分数。如果我是对的,这也可以用一个附加的摘要表示法来处理:添加一个表,其中有一列表示bin(比如一个int,0..40),一个int列表示在该bin中获得的分数。整个表40*2的内容可以很容易地读入内存并进行操作。

谢谢您的回答。实际上,主要的问题是关于计算点。在图像上,你可以看到一张由40个点组成的图表。分数越高(接近1.0),使用该分数的游戏就越多。然后,如果90%的游戏分数接近150,最大分数为300,那么图表中心的分数将为0.9。此外,图表左侧为0分,右侧为最高分。现在更清楚了吗?这是一个简单的想法,但应该能奏效。谢谢你的帮助。