Orasort:利用Oracle过期专利实现5倍加速的列排序算法

Hacker News Top 新闻

摘要

Orasort是Oracle的专利列排序算法,可实现5倍更快的排序速度。该专利于2024年到期后进入公有领域,使得云公司和开源数据库(如MySQL和PostgreSQL)能够集成该算法。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/06 20:06

# Oracle 的秘密列排序技术在专利到期后公开,使排序速度提升 5 倍 – deepsystemstuff.com 来源:https://deepsystemstuff.com/how-oracles-secret-column-sorting-technique-became-public-after-its-patent-expired-making-sorting-5x-faster/ Oracle 排序算法专利已过期;现进入公有领域。 Oracle 是全球最流行的数据库产品之一。 高度复杂的应用依赖 Oracle 来存储关键数据和事务。 为了提升数据库的速度和可靠性,Oracle 发明了许多优化技术。 其中一项发明是针对数据库表的排序技术。 Oracle 发明了一种名为 Orasort 的算法,使排序速度提升了 5 倍。Oracle 团队不仅机智地实现了该算法,还在 CPU 级别进行了优化。 本文将用即使是零经验的程序员也能理解的简单语言,解释 Orasort 算法。 该算法的专利由 Mark Callaghan 注册。 在 2024 年达到 20 年期限后,Orasort 的专利自动过期并进入公有领域。 我们将看到这个算法是如何工作的,像 AWS 这样的云公司和开源社区从中获得了哪些好处,以及其他重要内容。 在理解 Orasort 如何工作之前,我们需要了解传统排序是如何工作的,以及它如何影响 Oracle 的性能。 ## 传统排序在 DBMS 中的工作方式 ### 逐字符排序 在传统的排序算法中,一个字符串中的每个字符都与另一个字符串中对应的字符进行比较。 两个字符串之间逐字符进行排序。 它不仅仅根据第一个字符排序(例如以 'A' 开头的值);数据库还需要对以 'A' 开头的值内部进行排序。 考虑以下示例。 有两个以 'A' 开头的值: Apple Amazon 现在,这两个单词之间的排序开始。 这两个单词中 'A' 相同。 现在需要检查第二个字符。'P' 与 'M' 比较,由于 M < P,因此根据第二个字符做出决定。 现在,升序顺序为: Apple Amazon 上面的比较很简单;DBMS 只需比较两个字符。 现在考虑第二个示例。 Applet Apples 这里,比较将持续到最后一个字符,升序顺序为: Apples Applet 现在考虑以下示例。 Apple is good Apple is bad 这里,比较将消耗更多的 CPU 周期。 升序顺序为: Apple is bad Apple is good 这就是传统排序的工作方式。 我们可以想象这有多耗时。 ## Orasort 作为救星出现 传统排序方法使用逐字符比较,简而言之,就是 1 字节比较。 Orasort 提出了一个非常聪明的想法,Oracle 团队利用 CPU 寄存器。 CPU 寄存器通常是 8 字节大小,如果 Oracle 从两个字符串中各提取 8 字节进行比较,那么比较需要的寄存器和 CPU 周期更少。 Oracle 从两个值中提取前 8 个字节,并将这些字节转换为 64 位整数。 然后,每个值变成一个 64 位整数,正在比较的另一个值也执行相同的过程。 如果能够做出决定,比较就停止。否则,取出接下来的 8 个字节,比较继续。 #### **订阅我们,永久免费获取内容。** ## Orasort 提供的好处 ### 开源数据库 自公开以来,Orasort 为开源社区带来了巨大的好处。 包括 MySQL 和 PostgreSQL 在内的开源数据库已经集成了 Orasort 并正在进行实验。 ### 降低云计算成本 公司使用云服务开展业务。Orasort 由于需要更少的 CPU 周期,降低了运营成本。 ## Orasort 的高级流程 ### 键提取与规范化 假设一个表有 1 万条记录,并且选择了名为 'email' 的列进行排序。 那么,1 万条记录将被加载到 RAM 的缓冲区中。 但是,这些记录并非以其所有值的形式获取;而是为每条记录生成键和 ID。 这些记录被加载到排序区,排序在此进行。 现在,我们之前讨论的 Orasort 过程就在这个排序区(RAM 的一部分)中发生。 但是,如果记录达到数百万条呢?Oracle 无法将所有记录指针加载到缓冲区中。 在这种情况下,Oracle 将数据分成多个部分并保存在磁盘上以备后续使用。然后它将这些部分逐个调入 RAM。 ### 将排序后的数据写回磁盘 写入是一个异步任务,Oracle 不会采取一次性写入所有排序数据的方法。 它使用一种中间写入方法,即在 Orasort 仍在运行时持续写入。当写入完成时,最终的合并发生在磁盘上。 ##### *DSS 不是一个普通的科技博客;我们研究开源项目,扮演科技记者的角色,并向你呈现几乎任何技术平台的深度技术信息。请考虑订阅我们。我们正在建设一个社区,在这里你将永久免费获取此类文章。*

相似文章

公共前缀跳过与自适应排序

Hacker News Top

本文描述了一项已过期的专利,涉及一种新的内存排序算法,该算法具备公共前缀跳过、自适应性和关键子串缓存等特性,已在Oracle 10gR2中实现,并显著提升了性能。

SQLite 通过预排序提升性能

Hacker News Top

本文展示了在将随机数据插入 SQLite 之前进行预排序,可以利用 B+ 树的顺序特性并减少页分裂,从而将插入性能提升 2-3 倍。

无分支快速排序:性能超越 std::sort 和 pdqsort,提供 C 和 C++ API

Hacker News Top

一种新的无分支快速排序实现(blqsort)借助排序网络技术,在 Apple M1 和 AMD Ryzen 系统上的性能超越了 std::sort 和 pdqsort,以单头文件形式提供 C 和 C++ 库。其性能提升得益于无分支分区、中位数之中位数枢轴选择以及针对小数组的自定义排序网络。