汇总值以计算分位数

时间:2019-04-17 09:41:06

标签: mongodb performance data-structures aggregation

我正在批量生成数据,这些数据存储在MongoDB中。每个文档的数值均大于0,我们将其称为x和其他各个字段。 我需要使用特定过滤器计算所有文档中从0到100的所有分位数/百分位数。数据集变得越来越大,要使用过滤器查询获取所有文档,然后计算百分位数会花费太长时间,并给MongoDB带来太大压力。

因此,现在我正在研究如何以某种方式聚合数据,从而可以更快地计算0-100分位数。我想计算1个或多个批次的汇总,然后从这些汇总中计算百分位数。 1批包含10、250或500个文档。一个想法是计算批次的0-100的百分位数并保存。在计算总百分位数时,我将计算汇总百分位数的百分位数。我知道这会导致数据丢失,但是我认为这是可以忍受的。 是否有更好的方法以有意义的方式聚合数据,从而使百分位数的计算时间最小化(并且对MongoDB的查询大小)并且准确性很高?

在计算从0到100的准确百分位数时,让您了解x-值的分布方式: 对于某些“数据组”(由过滤器确定),百分位数0到90从20100几乎是线性的,然后对于第99个百分位数上升到138指数级,最大值为> 15.000 对于另一个“数据组”,百分位数0到15从20上升到600,然后在第90个百分位数稳定到750,在第99个百分位数上升到1050,其中最多3000

因此,按桶进行聚合可能很困难。如果在第99个百分位数之前都准确无误,那我就可以保存最大值。

0 个答案:

没有答案