postgresql , 10.0 , merge sort , gather merge
在数据库中,经常会有多个节点append,然后sort的情况。
例如一张表有10个分区,查询所有分区,并按某列排序输出,常规的做法是所有的记录append,然后sort。
postgresql 10.0 将支持append node的并行计算,也就是说所有的分区表可以并行的sort,然后返回,此时就可以使用merge sort来提高排序的速度。
另外,像单表的并行计算,如果需要排序输出的话,每个worker process可以并行的排序,然后在merge sort输出结果。
在许多分布式数据库中,merge sort也是必备的,否则排序都收到上层节点做是非常耗费cpu和内存的。
merge sort原理,首先要保证下层的所有节点返回的数据是有序的(例如每个node都按id的顺序返回),以轮询所有下层node的方式组装并返回有序结果。
merge sort和merge join的原理也类似。
merge sort的性能提升示例
讨论
这个patch的讨论,详见邮件组,本文末尾url。
postgresql社区的作风非常严谨,一个patch可能在邮件组中讨论几个月甚至几年,根据大家的意见反复的修正,patch合并到master已经非常成熟,所以postgresql的稳定性也是远近闻名的。
<a href="https://commitfest.postgresql.org/13/810/">https://commitfest.postgresql.org/13/810/</a>
<a href="https://www.postgresql.org/message-id/flat/cagpqqf09opx-cqrpbks0gq49z+m6kbxgxd_p9gx8ckk_d75hoq@mail.gmail.com#cagpqqf09opx-cqrpbks0gq49z+m6kbxgxd_p9gx8ckk_d75hoq@mail.gmail.com">https://www.postgresql.org/message-id/flat/cagpqqf09opx-cqrpbks0gq49z+m6kbxgxd_p9gx8ckk_d75hoq@mail.gmail.com#cagpqqf09opx-cqrpbks0gq49z+m6kbxgxd_p9gx8ckk_d75hoq@mail.gmail.com</a>