首页 > 代码库 > "HybridDB · 性能优化 · Count Distinct的几种实现方式” 读后感

"HybridDB · 性能优化 · Count Distinct的几种实现方式” 读后感

原文地址:HybridDB · 性能优化 · Count Distinct的几种实现方式

 

HybridDB是阿里基于GreenPlum开发的一款MPP分析性数据库,而GreenPlum本身基于PostgreSQL。

如此,HybridDB的优化思路和手段难免会受到PostgreSQL影响和限制。

 

文中的语句最终优化得到了几个不同计划,其优化的语句简化后形如

select count(distinct c1) from t group by c2;

 

这条语句在HybridDB下实现:

  1. 每个服务器自行分组、计算count(distinct);
  2. 将上一步结果按照分组列重新分发;
  3. 每个服务器根据收到的数据进行二次分组计算;
  4. 收集汇总到一个服务器得到最终结果。

 

文中优化点集中在分组的实现方式上,

a), 排序+分组;

b), hash分组;

c), orca优化方式,同a#,改进在于第一次排序项不同。

原文中a#, b#, c#的计划概括

a), 

Scan (Columnar Scan + Append) -> Sort(category) -> Group by(category) -> Redistribute -> Sort(category) -> Group by(category) -> Sort -> Gather

b), 

Scan (Columnar Scan + Append) -> Group by(Hash(category,actionId)) -> Redistribute(category) -> Group by(Hash(category, acitonId)) -> Group by(Hash(category)) -> Sort -> Gather

c),
Scan (Dynamic Scan) -> Sort (category, actionId) -> Group by (category) -> Redistribute -> Sort (category) -> Group by(category) -> Sort -> Gather

 

个人认为这篇文章提到的优化和MPP关系不大,单机下也许也能得到类似的不同计划。

也许是受限于数据分布特性、数据量等因素,MPP下数据分发、汇总的MOTION优化并没有体现在这里。

 

"HybridDB · 性能优化 · Count Distinct的几种实现方式” 读后感