天天看點

行存、列存,堆表、AO表性能對比 - 阿裡雲HDB for PostgreSQL最佳實踐

postgresql , gis , postgis , greenplum , 空間檢索 , gist , b-tree , geohash

<a href="https://github.com/digoal/blog/blob/master/201708/20170818_02.md">《greenplum 行存、列存,堆表、ao表的原理和選擇》</a>

以上文檔詳細的介紹了行存、列存,堆表、ao表的原理以及選擇的依據。

<a href="https://github.com/digoal/blog/blob/master/201604/20160404_01.md">《一個簡單算法可以幫助物聯網,金融 使用者 節約98%的資料存儲成本 (postgresql,greenplum幫你做到)》</a>

以上文檔介紹了提升基于列存的全局資料壓縮比的方法。

<a href="https://github.com/digoal/blog/blob/master/201708/20170809_02.md">《解密上帝之手 - 阿裡雲hdb for postgresql資料庫metascan特性(存儲級、塊級、batch級過濾與資料編排)》</a>

以上文檔介紹了局部編排,以及阿裡雲hdb for postgresql資料庫的metascan特性,(在不需要索引的情況下,如何提升任意列的選擇性)。

壓縮實際上是計算(cpu)換空間(磁盤)的做法,該不該做,我們還是先看看壓縮比、性能損耗吧。

某個次元count查詢。

無索引,某個單值查詢

有索引(io放大),某個單值查詢

測試腳本如下

存儲形态

寫入1000萬耗時

空間占用

分組聚合

單值多行查詢(走全表)

建索引耗時

單值多行查詢(走索引)

堆表

120秒

44gb

1.8秒

1.5秒

13秒

37毫秒

ao行存8k不壓縮

81秒

1.3gb

168毫秒

96毫秒

356毫秒

32毫秒

ao行存2mb不壓縮

101秒

39gb

1.7秒

1.9秒

158毫秒

ao行存8k壓縮5級

80秒

557mb

322毫秒

269毫秒

505毫秒

54毫秒

ao行存2mb壓縮5級

104秒

690mb

1.6秒

163毫秒

ao行存8k壓縮9級

331毫秒

247毫秒

500毫秒

58毫秒

ao行存2mb壓縮9級

106秒

1.38秒

1.67秒

162毫秒

ao列存8k不壓縮

92.6秒

362毫秒

622毫秒

877毫秒

36毫秒

ao列存2mb不壓縮

98.8秒

38gb

140毫秒

1.62秒

176毫秒

ao列存8k壓縮5級

83秒

1.4gb

125毫秒

2.2秒

2.5秒

ao列存2mb壓縮5級

593mb

152毫秒

1.37秒

1.73秒

189毫秒

ao列存8k壓縮9級

122毫秒

2.3秒

62毫秒

ao列存2mb壓縮9級

136毫秒

1.77秒

181毫秒

<a href="https://www.aliyun.com/product/rds/postgresql">阿裡雲 rds postgresql</a>

<a href="https://www.aliyun.com/product/gpdb">阿裡雲 hybriddb for postgresql</a>