如今,越来越多的Cross -Source计算情况。数据计算不再限于单一,但可能来自不同的数据伙伴进行联合计算。
计算时,最重要的是将标识符对齐,即两方的作用应与相同的标识(例如ID卡,注册号等)与联接操作相关联,请提取交叉点部分两侧,然后将其进行计算以获取它。结果所需的结果。
而且这个加入过程似乎很简单。实际上,有很多门。在这里,我们将从最简单的联接方法开始,以演示逐步加入的优化过程。
首先,假设以下场景:
获取2个表的完整数据,然后直接浏览2张循环
如果ID匹配,则将2行的合并用作连接结果
图标如下:
关于上述加入有2个问题:
1.性能差,O(MN)的复杂性两次
2.为了收集完整的数据,它可能导致内存溢出。例如,有10亿行的数据,不能一次存储。
首先解决了现在提到的第一个问题
实际上,联接过程与热门过程非常相似,因此您可以想到哈希表。
1.我们使用hashmap存储较小的TB2表(只有10W行)。将ID列作为哈希表的键。
2.仅做仪表循环的大桌。如果ID列可以在哈希表中匹配,请删除缝合数据的数据
这是对O(M)的优化
另一个问题尚未解决:“为了收集完整的数据,可能会导致内存溢出。”
然后,我们可以根据一定数量将大表格分开,然后将其分为多批数据
例如,每次有1,000件,以及上面的哈希手表碰撞过程,带有小手表。
该空间复杂性为O(K + N)。
完成碰撞后,您将收到下一批数据。如下所示
请注意,“告知此响应机制的计算”也可以优化为阻止缓冲液队列。
但是还有另一个问题。如果小手表本身也很大,例如1亿,那么计算节点甚至无法拥有小手表,我该怎么办?
另外,由单个节点计算的CPU受到限制。如何在短时间内快速提高性能?
当计算节点具有由小表组成的哈希表时,目前可以扩展2个连接计算节点,并可以引入分布式计算以共享内存压力。
例如,我们可以在ID列上执行洗牌切片
如果ID是统一的,则小表的数据将分为3个部分,并且可以存储。
大仪表数据以相同的方式大小,并分为相同的节点。它对计算结果没有影响。只要您的碎片算法确保ID匹配的ID,就必须处于同一节点。
此外,分布计算理论还可以在理论上以许多节点的数量增加连接的数量。
这种分布式计算方法已经可以解决大多数加入操作,但是仍然存在一个问题:
1.假设网络带宽压力相对较大(例如
2.一些涉及安全性的计算方案可能需要加密到数据
这两种情况都会导致数据在输出时花费大量时间,甚至超过加入。如何优化?
本地计算是指在通过网络输出数据之前提前进行一些预处理。此操作反映在各种计算引擎中
对于加入过程,我们可以:
1.执行小表ID的一定压缩处理(例如,在哈希之后以前x位为the)
这可以减少数据传输量。
2.然后将此数据传输到表所在的节点,然后提前设置简单的作业,以便您可以过滤大量数据,这些数据不需要事先通过网络输出。
以上只是最基本的联接优化过程,在大规模数据,高性能,高安全性和交叉网络的复杂方案中,加入计算将面临更多挑战。
因此,您可以关注华为信托的抽动服务,并专注于高性能和高安全性联邦计算和联邦学习,促进交叉机构数据的可靠整合和协同作用,并安全发布数据价值。
本文分享了从华为云社区优化联接计算过程的过程“如何优化加入计算过程高和高性能?4优化您以掌握它们的本质”,作者:BreakDraw。