文章
· 一月 19, 2023 阅读大约需 4 分钟

InterSystems IRIS 2022.3 版本下的列存储

您可能还记得在 InterSystems 2022年全球峰会以及 2022.2 版本发布的网络研讨会上,我们发布了一项令人兴奋的新功能——列存储,它可以纳入您 InterSystems IRIS 的解决方案中。 列存储引入了一种存储SQL表数据的替代方法,它为分析查询提供了数量级的加速。 最新的2022.3开发预览版在原有的基础上包括一系列我们认为值得在这里宣布的更新。

快速回顾

如果您不熟悉InterSystems IRIS 的列存储,请观看这段简短的介绍视频以及相关该主题的2022全球峰会内容。 简而言之,我们使用新的$vector数据类型将表数据编码为每列 64k 个值的块。 $vector是一种仅限内部使用的数据类型(目前),它利用自适应编码方案来实现稀疏和密集数据的高效存储。 编码还针对一系列专用$vector操作进行了优化,例如一次计算64k 值的整个块的聚合、分组和过滤,并在可能的情况下利用芯片的SIMD指令

在SQL查询时,我们构建对这些块直接进行操作的查询计划,正如您所想象的,与传统的逐行处理相比,这大大减少了执行查询所需的IO量和ObjectScript指令数。 当然,与面向行且对于单值的操作相比,这个的IO消耗更大,$vector的操作也更重一些,但收益是巨大的。 我们使用一个专业术语矢量化查询计划来表示处理$vector数据的执行策略,通过一系列快速的对于整个块的操作来提高整体的效率。

就一个字“快”

最重要的是,事情变得更快了。 我们扩展了优化器对列索引的理解,现在您将看到更多的查询使用列索引,即使某些请求的字段没有存储在列索引或数据映射中。 此外,您将看到它在许多情况下联合收割机了列索引和位图索引,如果您是从向现有模式添加列索引开始的,那么这将非常有用。

新工具包还包括一系列跨堆栈的更改,以提高性能,从优化到一些查询处理增强功能上的低级$vector操作,以及一组更广泛的可并行化的矢量化查询计划。 加载数据的某些方法,如通过INSERT.. SELECT语句,现在还将使用我们已经用于构建索引的缓冲模型,并且现在能够以真正高的性能构建整个表。

向量化的 JOIN 操作

我们在此版本中添加的最令人兴奋的功能是支持以矢量化方式连接列数据。 在Python 2022.2中,当您希望在一个查询中联合收割机两个表中的数据时,我们仍然会求助于健壮的逐行JOIN策略,该策略同样适用于按列和按行组织的数据。 现在,当JOIN的两端都以列格式存储时,我们使用一个新的内核API在内存中对它们进行JOIN,同时保留它们的$vector格式。 这是实现完全矢量化查询计划的又一重要步骤,即使对于最复杂的查询也是如此。

下面是一个利用新函数的查询示例,该查询对纽约Taxi数据集执行

SELECT
   COUNT(*), 
   MAX(r1.total_amount - r2.total_amount) 
FROM
   NYTaxi.Rides r1, 
   NYTaxi.Rides r2
WHERE
   r1.DOLocationID = r2.PULocationID 
   AND r1.tpep_dropoff_datetime = r2.tpep_pickup_datetime 
   AND r2.DOLocationID = r1.PULocationID 
   AND r1.passenger_count > 2
   AND r2.passenger_count > 2

此查询查找有两名以上乘客的旅行对,第二次旅行在第一次旅行结束的地方开始,在完全相同的时间,并且第二次旅行将乘客带回第一次旅行开始的地方。 这不是一个非常有用的分析,但是我在这个模式中只有一个真正的表,复合JOIN键使这个分析变得不那么琐碎。 在此语句的查询计划中,您将看到类似Apply vector operation %VHASH(用于构建复合JOIN键)和Read vector-join temp-file A的片段,它们表明我们的新矢量化连接器正在工作! 这听起来像是一个冗长的查询计划中的一个微不足道的小问题,但它涉及到内部的大量智能工程,而且有相当多的知名柱状数据库供应商根本不允许这样做,并对您的模式布局施加了严格的约束,所以请加入我们,一起来享受这个! :—)

当查询计划继续读取该临时文件时,您可能会注意到在连接后的工作中仍有一些逐行处理,这就把我们带到了......

接下来我们会...

列存储在2022.3版本中仍被标记为"实验性",但我们正在接近生产就绪状态,并为多表查询提供完整的端到端矢量化操作。 这包括上面提到的Post-Join 工作、查询优化器中更广泛的支持、更快地加载列式表以及对连接器的进一步增强(如共享内存支持)。 简而言之:现在是使用 InterSystems IRIS 2022.3社区版在纽约出租车数据集上进行第一次尝试的好时机,并且在我们发布2023.1时,您只需按下"运行"按钮就可以!

如果您对如何将列式存储用于您自己的数据和查询感兴趣,请直接联系 InterSystems 客户团队,也许我们会在InterSystems 2023年全球峰会上见面;-).

讨论 (0)1
登录或注册以继续