给定多个数据库节点的键值对(其中键是非唯一的),如何通过键计算前1000的算术平均值?
由于数据量很大,计算所有算术平均值并对它们进行排序不是一种选择。
可行的方法可能在某种程度上限制了关键的处理空间,但如何处理呢?
发布于 2022-11-02 11:26:23
键和数据库节点的基数是什么?假设您有数十亿个密钥和数十个数据库节点。让我们调用节点数'n‘。现在,要解决这个问题,我们需要三个步骤:
让我们看看每个步骤的最佳可能算法。
查找候选密钥:
H 117
第4步中的值是选择顶级k键的本地截断。H 218H 119
H 119现在从所有节点中选择最小的本地截断。H 220h 121/code>步骤6中的值是全局截断。只有较高的键才意味着在下一步中会考虑这个全局关机。。
计算全局平均值并选择前1000:
每个节点向公共节点发送平均值高于全局截止值的所有键的本地值(键、均值、出现项)。公共节点通过每个节点的平均值和出现次数来计算每个键的平均值。公共节点选择顶部1000。如果k低于1000,则步骤3可能找不到1000个唯一键,然后我们需要运行另一轮排除selected.
Local平均计算不需要重复的键,只需要更改全局截断。G 235
对于最优的解决方案,您需要根据节点数目、密钥和节点间的密钥复制来优化算法。
https://stackoverflow.com/questions/74290629
复制