最近有一篇报道指出,Oracle公司拥有的关于一种快速排序方法的专利已经失效了。这意味着现在开源数据库可以自由使用这种技术了。该算法的发明者Mark Callaghan表示,这种已有20年历史的算法能够显著提升数据排序的速度,从而让数据库系统更加高效。

这项专利于2010年被授予Oracle公司,编号为US7680791B2。该专利涉及一种利用常见前缀来优化数据排序的方法,发明人建议将这种算法命名为“Orasort”。这种算法能够有效避免在排序过程中重复比较相同的关键字部分所带来的效率问题。

该算法结合了多种技术:在比较关键字时跳过常见的前缀;在排序过程中灵活运用快速排序和基数排序两种算法;对关键字的子字符串进行缓存处理,以减少缓存缺失的情况;以及在排序完成之前就生成结果。

由于数据在排序过程中会被分成更小的组,因此许多关键字会具有相同的开头部分。该算法会记住这些共享的部分,在比较过程中忽略它们,而在需要的时候则切换到更高效的排序方法。Callaghan是曾在Oracle、Google和Facebook工作的数据库专家,他解释了这项专利是如何被实现的,以及为什么它现在如此重要:

“我在Oracle工作时发明了这项技术。这项技术在10gR2版本中被引入,其性能比当时使用的旧排序算法提高了约5倍。我希望有一天能看到这项技术以开源的形式出现。该专利的描述非常清晰,比一般的专利更容易理解。幸运的是,知识产权律师很好地利用了我编写的功能描述和设计文档。”

相关社区对此表现出极大的兴趣,他们希望能够将这项技术应用到MySQL和PostgreSQL等数据库中。Flooid.in的CTO Varun Singh认为:“这个算法描述得非常详细,可以直接将其与专利文件一起交给AI程序来处理。Mark真是了不起的人。”

另外,Google的数据库工程师Hannu Krosing尝试用Python、C和C++语言实现这项技术。根据文章所述,Oracle公司的内存排序算法的性能比之前的算法高出约5倍,甚至得到了Larry Ellison的感谢邮件。Callaghan回忆说:“一旦我在Oracle的DBMS中实现了这项技术,我就能够将其与旧的排序算法进行比较。新的排序算法通常快5倍左右。然后我又将其与SyncSort进行了比较。我不记得他们是否有DeWitt条款,所以无法分享具体的结果,但可以说,Oracle中的新排序算法确实很出色。”

Charles Thayer评论道:“我一直没有考虑过排序算法何时能够给出第一个结果项的问题,以及如何开始响应流并最小化延迟时间的问题。(快速排序在这方面应该表现得相当不错。)这真是一项有趣的工作。”

Oracle拥有超过52000项专利,其中许多专利都与数据库技术有关,包括自管理数据库架构和优化数据库性能的方法。这些专利涵盖了数据库管理的各个方面,比如自动调优和高效的数据存储技术等。

Comments are closed.