閱讀823 返回首頁    go 人物


DRDS分庫分表__開發手冊_分布式關係型數據庫 DRDS-阿裏雲

分庫分表在 DRDS 裏麵是一個很重要的概念。DRDS 在後端將數據量較大的數據表水平拆分到後端的每個 RDS 數據庫中,這些拆分到RDS中的數據庫被稱為分庫,分庫中的表稱為分表。DRDS 由每個分庫負責每一份數據的讀寫操作,從而有效的分散了整體訪問壓力。在係統擴容時,隻需要水平增加分庫的數量,並且遷移相關數據,就可以提高 DRDS 係統的總體容量。

分庫分表相關概念

拆分鍵

即分庫/分表字段。 DRDS 根據拆分鍵的值將數據表水平拆分到後端的每一個 RDS 分庫裏。換句話說,鍵值相同的數據,一定會位於同一個 RDS 數據庫裏。DRDS 裏除了可以定義分庫鍵以外,每一張邏輯表都可以定義自己的拆分鍵。拆分鍵暫時隻能是單個字段。如果分庫鍵與分表鍵相同,那麼在插入時隻需要指定該分庫/分表鍵。如果分庫鍵與分表鍵不同則在插入時需要同時指定分庫鍵和分表鍵。

全表掃描

複雜的SQL語句會分發到所有庫上執行,並且在 DRDS 中進行比較和合並。全表掃描相當消耗性能,應該在業務中盡量避免。

DML例子

1) 在 INSERT / REPLACE 語句中必須包含分庫分表的字段(拆分鍵)。例如:

拆分字段是id

  1. INSERT INTO table VALUES (‘name1’, ‘value2’)
  2. 報錯
  1. INSERT INTO table (id, name, value) VALUES (1, ‘name1’, ‘value2’)
  2. 允許執行

3) SELECT / UPDATE / DELETE 語句如果 WHERE條件中沒有包含拆分字段,則會進行全表掃描。

舉例:分庫分表鍵是id + date.

  1. SELECT * FROM table
  2. 會進行全表掃描
  1. SELECT * FROM table WHERE date > 3
  2. 會進行全表掃描
  1. SELECT * FROM table WHERE id = 1;
  2. 會路由到id為1的分庫
  1. SELECT * FROM table WHERE id = 1 AND date > 3;
  2. 進行路由計算

4) 同一個拆分字段,AND 連接的條件個數隻能為2,OR 連接的條件個數不限。

舉例:拆分鍵是date.

  1. SELECT * FROM table WHERE date > ‘2014/1/30’ AND date < ‘2014/3/1’;
  2. 正確,date 字段 AND 連接的條件個數是 2。
  1. SELECT * FROM table WHERE date > ‘2014/1/30’ AND date < ‘2014/3/1’ AND date < ‘2014/2/28’;
  2. 錯誤,date 字段 AND 連接的條件個數是 3

注意 對於WHERE條件中的整型拆分字段,DRDS會對條件進行合並,如

  1. SELECT * FROM table WHERE id > 1 and id < 5 and id < 3
  2. 不會出錯,DRDS會調整為
  3. SELECT * FROM table WHERE id > 1 and id < 3

5) 同一個拆分字段的條件可以包含多個值,但每個值隻能對應一種比較關係。

舉例:拆分鍵是date.

  1. SELECT * FROM table WHERE date > ‘2014/1/30’ AND date < ‘2014/3/1’;
  2. 正確,date 字段兩個條件的值分別是 ‘2014/1/30’ 和 ‘2014/3/1’。
  1. SELECT * FROM table WHERE date > ‘2014/1/30’ AND date < ‘2014/1/30’
  2. 錯誤,date 字段的條件值 ‘2014/1/30’ 同時對應了大於和小於關係。

最後更新:2016-11-23 17:31:30

  上一篇:go DRDS控製指令__開發手冊_分布式關係型數據庫 DRDS-阿裏雲
  下一篇:go DRDS DDL語句__開發手冊_分布式關係型數據庫 DRDS-阿裏雲