1

不完全确定这是否是一个合适的论坛。

我有一个小型数据库集群(4 个盒子),每台机器都有一个整体数据集的碎片。

我需要计算特定数据点的四分位数,但我需要这样做,而无需一次访问整个数据集。

这甚至可能吗?

编辑我更喜欢确切的答案,但一个合理的近似值可能也会起作用。

4

2 回答 2

1

在这种情况下,您无法计算确切的四分位数,但 QDigest 算法可以解决您的问题。你可以得到近似值,这是相当不错的。您可以检查一次,此处提供 Java 实现:https ://github.com/addthis/stream-lib/blob/master/src/main/java/com/clearspring/analytics/stream/quantile/QDigest.java 。

有了这个,您可以在每个集群上创建 QDigest 数据结构。它的超压缩数据结构,将维护数据集的四分位数摘要。此外,您可以执行这些数据结构的联合,从而解决您的问题。

因此,在每个集群上创建一个 QDigest 实例,并组合结果,只需为每个集群执行这些实例的联合,这将为您提供相当好的四分位数近似值。

您可以关注 QDigest 的论文了解详细信息。

于 2014-01-13T11:42:36.623 回答
0

我猜这可能是不可能的,因为你说数据库很小。如果它是一个大型数据集,并且每个集群包含 1/4 的代表性样本,那么我想您可以将特定数据点与一个集群上保存的数据进行比较。

数据集的每个分片的统计数据之间是否存在很大差异?

于 2013-04-05T15:34:54.420 回答