这适用于Google App Engine,但不一定受其限制。
在Google App Engine上,数据库不是关系数据库,因此不能实现聚合函数(例如求和,平均等)。每行彼此独立。要计算总和和平均值,应用程序只需通过重新计算每个对数据库的新写入来分摊其计算,以便它始终是最新的。
如何计算百分位数和频率分布(即密度)?我想制作一个值字段密度的图表,这组值可能大约为数百万。遍历整个数据集可能是可行的(每个查询的限制是返回1000行),并基于此计算,但我宁愿做一些聪明的方法。
是否有一些计算或近似密度/频率/百分位分布的算法可以在一段时间内计算出来?
顺便说一句,数据是不确定的,因为最大值和最小值可能在所有地方。因此,分配必须占用大约95%的数据,并且仅基于此进行密度。
答案 0 :(得分:2)
一遍又一遍地获取整行(一次限制为1000),以便每行获得一个数字肯定没有吸引力。因此,通过在包含数字列表的单独实体中记录该单个数字来对数据进行非规范化(我认为每个查询的限制为1 MB,因此每个列表的4字节数字不超过250,000个数字)。
因此,当添加数字时也会获取最新的“添加数据值列表”实体,如果完全填写新数据,则添加新数字,保存它。如果统计数据中的微小错误不是杀手锏,可能就不需要是交易性的,正如您所暗示的那样。
如果可以更改项目的数据,则具有记录“已删除”数据值的相同类型的单独实体;将一个项目的值从23更改为45,将23添加到最新的“已删除值”列表,将45添加到最新的“添加值”一个 - 这也包括项目删除。
答案 1 :(得分:0)
遍历整个数据集可能是可行的(每个查询的限制是返回1000行),并基于此计算,但我宁愿做一些聪明的方法。
这对我来说是最明显的方法,为什么你要避免它?