1. 程式人生 > >阿里分析型資料庫AnalyticDB與MySQL對比

阿里分析型資料庫AnalyticDB與MySQL對比

AnalyticDB全面相容MySQL協議和SQL 2003,基本上可以像MySQL一樣使用它。現在重點看看它們有什麼區別。

一、與MySQL資料型別對比

AnalyticDB資料型別 MySQL資料型別 差異
boolean bool、boolean 一致
tinyint tinyint 一致
smallint smallint 一致
int int、integer 一致
bigint bigint 一致
float float[(m,d)] AnalyticDB不支援自定義m和d,MySQL支援
double double[(m,d)] AnalyticDB不支援自定義m和d,MySQL支援
varchar varchar 一致
date date 一致
timestamp timestamp AnalyticDB支援到精確到秒,MySQL支援自定義精度

注意事項
varchar長度不得超過8K,否則可能會出現欄位為null。如果此列超過8k又不能過濾掉,可以設定該列去掉索引disableIndex =true。去掉索引後建議該列不要在查詢中進行篩選和計算。

二、與MySQL概念對比

  • 由於AnalyticDB是線上的分散式資料庫,所以多了彈性計算單元(Elastic compute units
    簡寫ECU)、表組和分割槽的概念。

  • 其中MySQL的資料庫是由表組成的,而AnalyticDB的資料庫是由ECU組成。

  • AnalyticDB的表又分為維度表和普通表,維度表指帶有緯度概念的表,可以和任何普通表進行關聯;普通表指分割槽表,針對分散式系統查詢而設計的表。

  • 在AnalyticDB中,資料儲存支援按一列或多列進行排序(先按第一列排序,第一列相同情況下使用第二列排序),以保證該列中值相同或相近的資料儲存在磁碟同一位置,這樣的列我們稱之為聚集列

三、與MySQL的sql語句對比

由於概念不同,所以sql也會有些差別了,現在列出AnalyticDB中主要的不同於MySQL的sql要點。

建立普通表組

AnalyticDB中獨有的。

create tablegroup tablegroup_name;
  • tablegroup_name為表組名稱,資料庫級別全域性唯一。
  • 維度表組由系統建立,表組命名為dbname_dimension_group。

建立維度表

與MySQL類似,但新增了options (updateType=‘realtime’)引數,且CREATE 後面加了個引數DIMENSION 表示緯度表。

 CREATE DIMENSION TABLE table_name (
    column_name data_type [NOT NULL][DEFAULT 'default'][COMMENT 'comment'][, …],
    primary key (column_name[, …])
) 
options (updateType='realtime')

建立普通表

AnalyticDB中多了分割槽,表組以及聚合列的概念。

CREATE TABLE table_name (
    column_name data_type [NOT NULL] [disableIndex true] [DEFAULT 'default'][COMMENT 'comment'][, …],
    primary key (column_name[, … ])
)
PARTITION BY HASH KEY(column_name) PARTITION NUM 128
CLUSTERED BY (column_name)
TABLEGROUP tablegroup_name
options (updateType='realtime')
  • data_type:AnalyticDB支援的列型別參考資料型別。

  • disableIndex :是否設定索引,預設為false,即設定索引,若不需要設定索引,則設為true。

  • NOT NULL:可選項,列屬性,預設為NULL。

  • DEFAULT ‘default’:可選項,列屬性。

  • COMMENT ‘comment’:可選項,列屬性。

  • primary key:指定主鍵,可以為聯合主鍵,普通表的主鍵中必須含有分割槽列

  • HASH KEY:分割槽列的選取參考一級分割槽的規劃和設計。

  • PARTITION NUM:分割槽的數量。

  • CLUSTERED BY:要聚合的列,當以聚集列為查詢條件時,由於查詢結果儲存在磁碟同一位置,可以減少輸入/輸出I/O(Input/Output)次數

  • TABLEGROUP:歸屬的表組

  • updateType=’realtime’:實時更新。

刪除普通表組

drop tablegroup tablegroup_name;
  • tablegroup_name:為表組名稱。

  • 維度表組不能刪除,刪除普通表組之前需要先清空其中的表。

INTERSECT和EXCEPT/MINUS

MySQL中沒有這兩個聚合函式。

  • INTERSECT:返回派生自兩個查詢表示式的行的集合運算。返回結果中將丟棄未同時由兩個表示式返回的行,即並集運算

  • EXCEPT|MINUS:返回派生自兩個查詢表示式之一的行的集合運算。返回的結果行必須存在於第一個結果表而不存在於第二個結果表中。MINUS和EXCEPT完全同義,即差集運算。

查詢資料量

AnalyticDB一次性最多隻能查詢一萬條資料,不過這個已經能滿足大部分場景了。