閱讀488 返回首頁    go 阿裏雲


2.3 特色功能__第二章 基本概念_使用手冊_分析型數據庫-阿裏雲

作為創新型的實時OLAP服務,分析型數據庫提供很多獨有的特色功能,這裏便就其中常用的部分進行簡要的介紹。

聚集列

在創建表時,用戶可以指定一列或者若幹列作為聚集列。

  • 在物理上,一個分區內聚集列內容相同的數據會盡可能的分布在同樣的區塊內存放。因此當用戶的查詢Query的條件指定了聚集列的內容或範圍時,查詢性能會有較大的提升。
  • 需要注意的是如果用戶指定多列為聚集列,那麼指定的聚集列的順序就是比較數據是否相同的順序。
  • 聚集列可以在建表後進行修改,但是目前修改後需重新裝載數據完畢後才生效。

多值列

分析型數據庫有一個特殊的數據類型:多值列。

  • 多值列可以存入String類型的多個值。在原始數據中多值列為一列用分隔符(默認為半角逗號,也可以建表時進行配置)分隔的String類型。
  • 多值列數據存入分析型數據庫後,可使用in, contains條件對該列的單個值進行查詢,枚舉查詢後該列的每個值可像一個普通列一樣進行各類操作。但是不允許在沒有進行枚舉查詢時對該列直接select或在group by中使用該列。

多值列的通常使用場景:

已有一個實體屬性表均為普通列並以實體編號為主鍵的情況下,需要新增一個用於進行實體篩選的屬性,而這個屬性和實體編號為多對多的對應關係,按照通常的做法,則新建一張該實體編號和屬性兩列的數據表,和原有的實體屬性表進行Join操作查詢。而使用多值列後,性能會被進行Join操作計算高數倍

一個具體的例子如下:

一張用戶表中已有用戶id和性別、年齡、職業、籍貫的數據。

用戶ID 性別 年齡 職業 籍貫
bigint varchar int varchar varchar

而現在需要增加用戶購買的商品品類的數據用於篩選,於是可以將這個商品的品類id存放在用戶表的一個新增的多值列中使用。

用戶ID 性別 年齡 職業 籍貫 購買的商品品類ID
bigint varchar int varchar varchar multivalue

智能自動索引

分析型數據庫擁有智能的自動索引創建機製。

通常情況下,分析型數據庫會根據導入的數據的每一列分布情況自動為每一列創建符合該列情況的索引類型,無需用戶指定創建索引或索引類型。

注:導入數據每一列分布情況如該列的枚舉值數量的多少,該列的數據是連續或離散。

但是,如果用戶認為某一列不需要進行篩選查詢,可以指定該列不需要創建索引來節省數據存儲空間。

注:0.9版本之前如果一個列需要作為表關聯的hash 分區列,那麼用戶需要人工指定該列創建Hash索引。0.9版本已廢棄Hash索引,可動態根據Join SQL進行優化,完全無需用戶幹預。

查詢CBO優化

分析型數據庫擁有高度智能的CBO(Cost-Based Optimization)優化策略。

在用戶發起的一個Query達到分析型數據庫後,分析型數據庫會智能的判斷該Query涉及的數據的分布情況、索引使用情況、緩存使用情況、Query條件分布等,進行邏輯和物理執行計劃優化和重組,盡可能的以最優的路徑執行Query查詢。

因此大部分情況下用戶無需關心Query的具體寫法,隻要保證語義正確即可。另外分析型數據庫提供一些Hint參數,可以在Query時對執行計劃進行部分調整,詳見《用戶指南》的《多計算引擎和Hint》章節。

最後更新:2016-12-06 11:56:38

  上一篇:go 2.2 數據類型支持__第二章 基本概念_使用手冊_分析型數據庫-阿裏雲
  下一篇:go 2.4 ECU詳解__第二章 基本概念_使用手冊_分析型數據庫-阿裏雲