天天看點

阿裡雲HybridDB for PG實踐 - 列存儲加字段和預設值

postgresql , greenplum , 相對偏移 , 列存儲 , appendonly , ao表

greenplum的append only table支援更新、删除。通過什麼支援呢?bitmap檔案,标記被删除的行。

是以在更新,删除後,資料可能膨脹。

另一方面,列存儲每列一個檔案,同一行通過偏移對應起來。例如int8的兩個字段,通過偏移很快能找到某一行的a列對應的b列。

接下來談談加字段,在加字段時,ao表示不會rewrite table的。如果ao表以及有一些垃圾(被删除的資料)記錄後,加的字段會使用相對偏移嗎(換句話說,需不需要填充已删除的記錄),答案是要填充。

1、建立3張ao列存表。

2、前兩張分别插入1000萬記錄,最後一張插入2000萬記錄。

3、分析表,并記錄它們的大小

4、更新第一張表,全表更新。并記錄更新後的大小,翻了一倍。

5、對三個表添加字段,設定預設值。

6、分析表,檢視表的大小。

很顯然,ao表在添加字段時,以已有檔案的記錄數為準(即使全部都删除了,也需要在新增字段上初始化這個值),。

如果有相對偏移量的概念,至少tbl2可以忽略前1000萬行的偏移。

堆表不存在這個問題,因為堆表加字段會rewrite全表。

<a href="https://github.com/digoal/blog/blob/master/201708/20170817_01.md">《如何檢測、清理greenplum垃圾 - 阿裡雲hybriddb for pg最佳實踐》</a>