ShardingSphere-JDBC:數(shù)據(jù)分片實(shí)戰(zhàn)篇
前言
本文主要是實(shí)現(xiàn)了一個(gè)基于Java API調(diào)用ShardingSphere-JDBC實(shí)現(xiàn)數(shù)據(jù)分片。
數(shù)據(jù)分片
數(shù)據(jù)分片是指按照某個(gè)維度將存放在單一數(shù)據(jù)節(jié)點(diǎn)中的數(shù)據(jù)分散地存放在多個(gè)數(shù)據(jù)節(jié)點(diǎn)或表中,來(lái)達(dá)到提升性能瓶頸以及可用性的目的。
數(shù)據(jù)分片的核心手段就是對(duì)關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行分庫(kù)和分表。
創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表
首先我們創(chuàng)建兩個(gè)庫(kù),分別是ds0,ds1,在ds0中創(chuàng)建一個(gè)表t_order0,在ds1中創(chuàng)建一個(gè)表t_order1。
在表中有三個(gè)字段:
order_id,訂單編號(hào),主鍵,用于分表策略的鍵
user_id,用戶編號(hào),用于分庫(kù)策略的鍵
remarks,備注
建表語(yǔ)句
CREATE TABLE `t_order0` (
?
`order_id` bigint NOT NULL COMMENT '訂單號(hào),主鍵',
?
`user_id` bigint NOT NULL COMMENT '用戶ID',
?
`remarks` varchar(50) COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '備注',
?
PRIMARY KEY (`order_id`)?
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4?
COLLATE=utf8mb4_german2_ci COMMENT='訂單表';
CREATE TABLE `t_order1` (
?
`order_id` bigint NOT NULL COMMENT '訂單號(hào),主鍵',
?
`user_id` bigint NOT NULL COMMENT '用戶ID',
?
`remarks` varchar(50) COLLATE utf8mb4_german2_ci DEFAULT NULL COMMENT '備注',
?
PRIMARY KEY (`order_id`)?
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_german2_ci COMMENT='訂單表';
測(cè)試數(shù)據(jù)


操作步驟
我們利用ShardingSphere-JDBC實(shí)現(xiàn)分庫(kù)分表的操作步驟如下:
配置真實(shí)數(shù)據(jù)源
配置t_order表規(guī)則
配置分庫(kù)策略
配置分表策略
配置分片策略
獲取數(shù)據(jù)源
執(zhí)行操作語(yǔ)句
引入Maven依賴
注意:示例代碼的數(shù)據(jù)庫(kù)連接池為Druid,可根據(jù)業(yè)務(wù)場(chǎng)景更換為其他主流數(shù)據(jù)庫(kù)連接池。

規(guī)則配置
ShardingSphere-JDBC 的 Java API 通過(guò)數(shù)據(jù)源集合、規(guī)則集合以及屬性配置組成。以下示例是根據(jù) user_id 取模分庫(kù), 且根據(jù) order_id取模分表的 2 庫(kù) 2 表的配置。

按照我們插入的參數(shù)“order_id = 1 & user_id = 1”的條件,我們應(yīng)該會(huì)查到ds1庫(kù)t_order1的數(shù)據(jù),測(cè)試數(shù)據(jù)如下:

結(jié)果果然如此,說(shuō)明我們做的這個(gè)小demo是ok的,下一篇文章我會(huì)帶領(lǐng)大家深入源碼,探究ShardingSphere-JDBC是如何做到分庫(kù)分表的!
寫在最后
好兄弟可以點(diǎn)贊并關(guān)注我的公眾號(hào)“javaAnswer”,全部都是干貨。
