【问题标题】:Parse.com: generate statistics out of a large set of dataParse.com:从大量数据中生成统计数据
【发布时间】:2015-02-09 23:48:36
【问题描述】:

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

看起来像这样:

由于我不是后端专家,而且我从来没有想过我的小游戏必须处理大量数据,所以我天真地使用云代码(Parse.com 提供的功能)计算了这些统计数据每个分数条目并生成一个由 40 分组成的图表。

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

  • max_score(int):集合中的最高分;
  • points(字符串):40个点,从0到1,逗号分隔,描述实际图表;
  • entry_count(int):数据库中的条目数;
  • medium (float):该组的中分;

编辑

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.9...

/编辑

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

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

任何帮助或指导将不胜感激。

【问题讨论】:

    标签: javascript parse-platform backend


    【解决方案1】:

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

    newAve = oldAve + (newScore-oldAverage)/count
    

    最大值更简单:

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

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

    编辑

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

    【讨论】:

    • 感谢您的回答。实际上主要问题是关于计算点。在图像上,您可以看到由 40 个点组成的图表。分数越高(接近 1.0),具有该分数的比赛就越多。那么如果 90% 的游戏得分接近 150 并且最高得分为 300,那么图表中心的点将具有 0.9 的值。此外,图表左侧为 0 分,右侧为最高分。现在清楚了吗?
    • 这是一个简单的想法,但应该可以。感谢您的帮助。
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多