没有合适的资源?快使用搜索试试~ 我知道了~
使用数据传输方法在PostgreSQL上执行外部连接运算符- 译稿1
需积分: 0 0 下载量 76 浏览量
2022-08-08
17:56:36
上传
评论
收藏 329KB DOCX 举报
温馨提示
试读
17页
摘要随着传感设备的发展,人类管理的数据量迅速增加。为了管理如此庞大的数据,关系数据库管理系统(RDBMS)起着关键作用。RDBMS将现实世界数据建模为n元关系表
资源详情
资源评论
资源推荐
使用数据传输方法在 PostgreSQL 上执行
外部连接运算符
译者: 朱君鹏, 李红艳
作者简介
Ryota Takizawa,Hideyuki Kawashima,Ryuya Mitsuhashi,Osamu Tatebe,
来自日本筑波大学。这是一篇关于数据库中连接运算如何有效地实现在数据库中。
译者简介
朱君鹏,华东师范大学博士研究生,个人兴趣主要集中在:新型硬件(GPU、RDMA、
FPGA、NVMe 等)在数据库中的应用,架构设计,分布式系统,机器学习系统
与并行计算技术。
李红艳,杭州衡数软件技术负责人,有百货公司(超过 40 家)、视光集团和知
名电商新零售大数据分析经验。
摘要
随着传感设备的发展,人类管理的数据量迅速增加。为了管理如此庞大的数
据,关系数据库管理系统(RDBMS)起着关键作用。 RDBMS 将现实世界数据建模
为 n 元关系表。Join 运算符是最重要的关系运算符之一,其加速度已得到广泛
而深入的研究。 RDBMS 如何提供这样一个有效的连接运算符?连接算子的性能改
进已经深入研究了十年,并且已经提出了许多技术方案。我们面临的问题是如何
在真正的 RDBMS 中实际使用这些优秀的技术。我们建议通过数据传输方法实现有
效的连接技术。该方法 RDBMS 内部创建一个钩子点,从 RDBMS 中的运算符管道中
提取数据流,并将原始的连接运算符应用于数据,并最终将结果返回给 RDBMS 中
的运算符管道。实验结果表明,与 PostgreSQL 相比,我们提出的方法实现了
1.42 倍的加速。我们的代码可以在 GitHub 上找到。
关键词
关系数据库, PostgreSQL,并行哈希连接运算
1. 概述
1.1 背景
随着传感技术的发展,关系数据库的重要性不断增加。大型天气测量望远镜
(LSST)每晚产生 20TB,大型强子对撞机(LHC)每年产生 30PB 的数据。 Google
和 Facebook 等社交网络公司每天都会收集大量人为生成的数据。
为了管理这些巨大的数据,关系数据库管理系统(RDBMS)起着关键作用。
RDBMS 将现实世界数据建模为 n 元关系表。尽管为这样的大数据开发了各种 NoSQL
技术,但 RDBMS 仍然是一种流行的选择,因为 RDBMS 提供了用于数据运算的 SQL
查询语言。由于 SQL,用户不需要研究新语言来进行数据运算,但是,RDBMS 需
要提供高性能,因为用户需要同时兼顾可用性和性能。
为了加速 RDBMS,近年来开发了新的关系引擎。 Facebook 提供 Presto [6],而
Apache 基金会提供基于 Apache Spark 的 Impala [1]和 SparkSQL [2]。 这些系
统专为并行和分布式计算环境而设计,因此它们提供高并行性,以利用当今的多
核架构,如 Xeon Phi(至强融核)和高速互连技术,如 InfiniBand。他们能高效
地执行关系运算符,如选择,投影,聚合和连接。
连接运算符在 RDBMS 中是一个有用的运算符,因此它被频繁地讨论。另一方
面,连接运算的缺点是其昂贵的运行代价。对于具有 M 和 N 的关系表 R 和 S,连
接的初始成本是 O(MN),这对于非等值连接是必需的。如果我们将连接运算符的
类型限制为等值连接,那么可以将成本减少到 O(N/k),理想的哈希连接将散列
函数应用于 R,并且将 k 个线程应用于超过 k 个 CPU 核心。因为随着上面提到的
数据量的增加,关系表的大小变得越来越大,所以 N 在今天往往是巨大的。这种
理想的连接运算符应由 RDBMS 提供,以加速查询处理。
1.2 问题
真正的 RDBMS 如何在实际意义上提供这样一个有效的连接运算符?已经对
连接算子的性能改进进行了长达数十年的深入研究,并且已经提出了许多技术方
案[12] [3] [13] [5] [11]。我们关注的问题是如何在真正的在 RDBMS 中实际使用
这些优秀的技术。
最近的分布式和并行数据库(例如 Presto,Impala)提供了高效率,而其稳
定性尚未证明,因为它们仍然很年轻,因此其代码库不成熟。如果一个人成功地
在引擎内部实现了这么好的技术,那么它无需的确会加速系统,但是代码维护成
本可能会很昂贵,因为大多数代码在这样的年轻引擎中都不稳定。
PostgreSQL 和 MySQL 等传统数据库提供了很高的稳定性,有许多用例的支持,
而与最近的引擎相比,它的效率有限。对于这样的引擎,有效技术的实现并不是
微不足道的,因为它的稳定性很好。例如,PostgreSQL 使用进程并且它而不使
用线程,因此它需要调用许多系统调用来运算并行查询处理,因为许多进程间通
信是必需的,这在线程的情况下是不必要的。有可能重写 PostgreSQL 内核以便
它利用线程,这需要巨大的努力。这种方法是不合理的,因此通常不被程序员接
受。
因此,从稳定性和实施成本的角度来看,将实用技术应用到真实 RDBMS 的内
部似乎是不恰当的方法。
1.3 贡献
为了解决这个问题,我们建议通过数据传输方法实现一种有效的连接技术。
方法在 RDBMS 内部创建一个钩子点,从 RDBMS 中的运算符管道中提取数据流,并
将我们的原始连接运算符应用于提取的数据,并最终将结果返回给 RDBMS 中的运
算符管道。对于等值连接运算,PostgreSQL 实现了一个非并行的散列连接运算
符,它不利用多核架构提供的并行性。我们改为实现并行和分布式哈希连接运算
符,它应该比 PostgreSQL 中的非并行运算符更高效。
为了评估所提出方法的性能,我们进行了多个节点的实验。结果如图 1 所示。
有趣的是,所提出的方法可能因数据大小而异或更差。当数据大小很小时,
PostgreSQL 性能更好,但是当数据大小很大时,我们提出的方法获胜。我们将
在本文的其余部分详细解释这些细节。我们在 PostgreSQL 之外执行连接运算符
的代码可以在 GitHub 上获得[16]。
图 1 PostgreSQL 与本文提出的方法之间的对比
除了数据传输方法,(a)我们可以在 PostgreSQL 中实现一个新的物理连接
运算符,或者(b)我们可以利用库运算系统库。然而,方法(a)需要很长时间,
方法(b)可以在有限的情况下使用,这在第 6 节中描述。
1.4 组织
本文的其余部分安排如下。第 2 节描述了背景,包括哈希连接,PostgreSQL
的连接性能和研究问题。第 3 节描述了提出的方法,数据传输方法。我们描述了
设计和实现。第 4 节描述了我们在这项工作中实现的并行和分布式散列连接。
第 5 节描述了实验结果及其实验设置。第 6 节描述了相关工作,包括将外部运算
符集成到数据库系统中的连接技术和方法。最后,第 7 节总结。
2.背景
2.1 hash 连接
Hash join [14]是一个关系运算符,在数据库系统中很流行。这里我们解释
一下在 PostgreSQL 上实现的简单散列连接技术。请考虑加入两个关系 R 和 S. R
是外表,S 是内表。当 R 能够完全放在物理内存中时,则 R 的所有部分都被散列。
接着,对于 S 中元组的每个匹配过程,访问散列 R。在理想情况下,成本是 O(S)
而没有哈希构造,这比嵌套循环连接要多得多。
剩余16页未读,继续阅读
兰若芊薇
- 粉丝: 23
- 资源: 301
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab的虫害侵蚀系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的教室人数统计系统 可以统计正脸情况下的人数+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计
- 基于MATLAB的水果分级系统,带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的车票发票识别系统带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 微信小程序电商实战课程SpringBoot2+Vue3+Element plus.rar
- 4.mht
- vulnhub靶场实战系列-DC-1实战流程图
- 使用python绘制一个笑脸
- Java 23种设计模式全归纳
- python完整代码-汉诺塔
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0