1

这适用于 Google App Engine,但不一定受此限制。

在 Google App Engine 上,数据库不是关系型数据库,因此无法实现聚合函数(例如 sum、average 等)。每行相互独立。要计算总和和平均值,应用程序只需通过重新计算对数据库的每个新写入来摊销其计算,以便它始终是最新的。

如何计算百分位数和频率分布(即密度)?我想绘制一个值域的密度图,而这组值可能在数百万的量级。循环遍历整个数据集(每个查询的限制是返回 1000 行)并基于此进行计算可能是可行的,但我宁愿做一些聪明的方法。

是否有一些算法可以计算或近似可以在一段时间内计算的密度/频率/百分比分布?

顺便说一句,数据是不确定的,因为最大值和最小值可能无处不在。因此,分布必须采用大约 95% 的数据,并且仅基于此进行密度。

4

2 回答 2

2

一遍又一遍地获取整行(一次限制为 1000 个......)以便每行获得一个数字肯定没有吸引力。因此,通过将单个数字记录在包含数字列表的单独实体中来对数据进行非规范化(我相信每个查询的限制为 1 MB,因此每个列表的 4 字节数字不超过 250,000 个数字)。

因此,在添加数字时,还要获取最新的“添加的数据值列表”实体,如果完全创建一个新实体,则追加新数字,保存它。正如您所暗示的那样,如果统计数据中的微小错误不是杀手,则可能不需要事务性。

如果可以更改项目的数据,则具有记录“已删除”数据值的相同类型的单独实体;要将一个项目的值从 23 更改为 45,将 23 添加到最新的“已删除值”列表中,并将 45 添加到最新的“添加值”列表中——这也包括项目删除。

于 2009-05-25T23:16:16.680 回答
0

循环遍历整个数据集(每个查询的限制是返回 1000 行)并基于此进行计算可能是可行的,但我宁愿做一些聪明的方法。

这是对我来说最明显的方法,你为什么要避免它?

于 2009-05-25T23:06:56.730 回答