核心概念:
1.邏輯表:水平拆分的數據庫(表)的相同邏輯和數據結構表的總稱。例,根據主鍵尾數拆分為10張表,分別是t_order_0到t_order_9,他們的邏輯表名為t_order
2.真實表:在分片的數據庫中真實存在的物理表。即上個示例中的t_order_0到t_order_9。
3.數據節點:數據分片的最小單元。由數據源名稱和數據表組成,例:ds_0.t_order_0
4.綁定表:指分片規則一致的主表和子表。例如:t_order表和t_order_item表,均按照order_id分片,則此兩張表互為綁定表關系。綁定表之間的多表關聯查詢不會出現笛卡爾積關聯,關聯查詢效率將大大提升。
5.廣播表:指所有的分片數據源中都存在的表,表結構和表中的數據在每個數據庫中均完全一致。適用於數據量不大且需要與海量數據的表進行關聯查詢的場景,例如:字典表。
分片算法:精確分片算法、范圍分片算法、復合分片算法、Hint分片算法
SQL Hinit: 對於分片字段非SQL決定,而由其他外置條件決定的場景,可使用SQL Hint靈活的注入分片字段。例:內部系統,按照員工登錄主鍵分庫,而數據庫中並無此字段。SQL Hint支持通過Java API和SQL注釋(待實現)兩種方式使用。
SQL支持:全面支持DML、DDL、DCL、TCL和部分DAL。支持分頁、去重、排序、分組、聚合、關聯查詢(不支持跨庫關聯)
不支持:不支持CASE WHEN、HAVING、UNION (ALL),有限支持子查詢。
分頁優化:由於LIMIT並不能通過索引查詢數據,因此如果可以保證ID的連續性,通過ID進行分頁是比較好的解決方案
SELECT * FROM t_order WHERE id > 100000 AND id <= 100010 ORDER BY id
行表達式:
1)${begin..end}表示范圍區間
2)${[unit1, unit2, unit_x]}表示枚舉值
3)連續多個${ expression }或$->{ expression }表達式,整個表達式最終的結果將會根據每個子表達式的結果進行笛卡爾組合
未完待續:3.2讀寫分離
PS.讀完這篇文章后,去搜索spring boot 整合 和 分庫相關的資料
