最近有一篇报道指出,Oracle公司所拥有的关于一种快速排序方法的专利已经失效了。这意味着现在开源数据库可以自由使用这种技术了。该算法的发明者Mark Callaghan表示,这种已有20年历史的算法可以显著提高数据排序的速度,从而让数据库系统更加高效。
这项专利于2010年被授予Oracle公司,编号为US7680791B2。该专利涉及一种利用常见前缀来优化数据排序的方法,发明人建议将这种算法命名为“Orasort”。这种算法能够避免在处理类似键时重复比较相同的前缀所带来的效率低下问题。
该算法结合了多种技术:在比较键时跳过常见的前缀;在排序过程中灵活运用快速排序和基数排序两种方法;对关键字的子字符串进行缓存处理,以减少缓存缺失的情况;以及在排序完成之前就生成结果。
因为在排序过程中,数据会被分成更小的组,所以许多键值会具有相同的前缀。该算法能够记住这些共享的部分,在比较时跳过它们,并在需要时切换到更快的排序方式。此外,该算法还会预加载下一个需要处理的字节数,从而减少不必要的操作,提高排序速度。
Callaghan是曾在Oracle、Google和Facebook工作的数据库专家。他解释了这一专利是如何被实现的,以及为什么它现在如此重要:
“我在Oracle工作时发明了这项技术。这项技术在Oracle 10g R2版本中被引入,其性能比之前的排序算法提高了约5倍。我希望有一天能看到这项技术以开源的形式出现。该专利的描述非常清晰,而且比一般的专利更容易理解。幸运的是,知识产权律师很好地利用了我编写的功能和设计文档。”
社区成员们对此表现出浓厚的兴趣,他们希望能够将这项技术应用到MySQL和PostgreSQL等数据库中。Flooid.in的CTO Varun Singh认为,这项技术的实现非常简单,可以将其直接应用于AI系统中。Hannu Krosing则尝试用Python、C和C++语言来实现这项技术。据文章所述,Oracle公司的内存排序算法的性能比之前的算法高出约5倍,甚至得到了Larry Ellison的感谢邮件。Callaghan回忆说:“一旦我在Oracle的DBMS中实现了这项技术,我就将其与旧的排序算法进行了对比。新的排序算法通常快5倍左右。然后我又将其与SyncSort进行了比较。我不记得他们是否有DeWitt条款,不过可以肯定的是,Oracle中的新排序算法效果非常好。”
Charles Thayer评论道:“我一直没有考虑过排序算法何时能够给出第一个结果项的问题,以及如何开始响应流并最小化延迟时间的问题。(快速排序在这方面应该表现不错。)真是有趣的研究成果。”
Oracle拥有超过52000项专利,其中有许多与数据库技术相关的专利,包括自管理数据库架构和优化数据库性能的方法。这些专利涵盖了数据库管理的各个方面,比如自动调优和高效的数据存储技术等。