在比例下制作地理空间加入互动

2021-06-30 01:39:48

SQL连接是Quintessential数据库操作。连接允许用户切片和骰子多个不同的数据集,例如,将交易数据与产品SKU或客户信息与购买历史相结合。可以在不加入的情况下创建类似的结果,但需要宽的扁平桌子,并且可能是重的预先处理和后处理。正确执行,加入提供灵活性,提高性能并允许广泛的数据探索。

然而,通过定义,加入昂贵。连接将列与一个或多个表中的列使用一个或多个谓词与匹配行的一个或多个谓词组合到新表中。程序员对语义相当于For循环的连接操作是有益的。鉴于以下查询,它将来自表T1和表T2的记录相结合使用表T1中的谓词列A等于表T2中的列B,我们可以为循环编写一个伪耦合:

这样的操作具有复杂性N * M,其中N是T1,M中的记录数是T2中的记录数。对于小表,这是微不足道的(特别是在GPU上)。尽管如此,对于大表或复杂的加入谓词,我们迅速超过了即使是最强大的单服务器系统的计算能力。加入优化是一家学习的数据库研究区域,许多着名的方法减轻了上面详述的“N平方”问题。一种常见方法是利用哈希表数据结构来减少两个表之间所需的匹配测试的数量。此方法在其中一个表上构建一个哈希表,并将循环扩展到哈希表中以获取潜在的匹配行集:

虽然循环结构保持类似于我们的第一个示例,但散列表可以显着减少第二循环中的搜索数。在最佳情况下,哈希表可以提供恒定的时间查找和严格的平等保证,将循环缩短为:

OmniCIDB支持哈希加入CPU和GPU上的哈希表的现场建设。根据加入平等谓词和/或大小的复杂性支持多个哈希函数。今天,我们将考虑使用哈希联接加速地理空间连接查询。

我们将地理空间连接查询定义为使用地理空间运算符作为连接谓词的地理空间连接查询。用户可能有一个具有经度和纬度的地理编码推文表,并且希望确定推文的邮政编码在倾斜的地图上呈现在渲染的地图上的邮政编码的推文。这样的查询可能如下所示:

(请注意,左连接保留在Zipcodes数据集中无匹配的推文,如果它没有相应的邮政编码,而不是排除的邮政编码,则将包含“空”颜色。

Warning: Can only detect less than 5000 characters

Warning: Can only detect less than 5000 characters

尽管我们正在寻找增加的优化来提高我们重叠的并行和性能,但它已经显示出具有巨大的好处,使大地理连接成为互动或接近交互式的性能水平。在一台机器上,使用2个NVIDIA RTX 3090 GPU,在各种示例中重叠在200到1,200倍之间的循环加入在200到1,200倍之间,最极端地增加了我们的推荐给美国人口普查组的11.3k查找循环。每秒加入22.38M查找,重叠连接。最后,我们认为有可能的额外加速。例如,利用空间填充曲线进行顺序和散列的实验表明,数据表明,通过增加空间位置和降低散列连接的探针阶段,降低执行发散的额外3-4倍的可能性,因此保持调整这个前面。

多边形连接点只是上述技术的一个示例应用。通用重叠运算符适用于各种查询,包括空间和时间查询(或两者的组合)。一般来说,两个广泛的应用程序出现了;要求算法构建散列表和查询的查询,其基于定义查询中的重叠关系的谓词来构建散列表和查询。我们已经实现了地理空间点之间的距离连接,作为后一种类型的示例;如果用户在彼此的N个单位内请求所有点,则可以构建哈希表,使得始终保证对相邻频体的简单搜索以返回可能位于彼此的N个单位内的点。虽然我们处于生产这些技术的早期阶段,但多边形加入中的点在全部产品模式下的5.6版中提供,包括桌面,无纽代尼和企业版。