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>