官網說明
- ① Sharding-JDBC是一個開源的分佈式數據庫中間件解決方案。它在Java的JDBC層以對業務應用零侵入的方式額外提供數據分片,讀寫分離,柔性事務和分佈式治理能力。並在其基礎上提供封裝了MySQL協議的服務端版本,用於完成對異構語言的支持。
- ② Sharding-JDBC是基於JDBC的客戶端版本定位爲輕量級Java框架,使用客戶端直連數據庫,以jar包形式提供服務,無需額外部署和依賴,可理解爲增強版的JDBC驅動,完全兼容JDBC和各種ORM框架。
- ③ Sharding-JDBC封裝了MySQL協議的服務端版本定位爲透明化的MySQL代理端,可以使用任何兼容MySQL協議的訪問客戶端(如:MySQL Command Client, MySQL Workbench等)操作數據,對DBA更加友好。
不同於Mycat等中間件,Sharding-JDBC是在代碼層面上進行讀寫分離,傳統的讀寫分離是由開發者自行在業務邏輯中去實現讀庫與寫庫兩種操作分離,而Sharding-JDBC則是進一步將這種實現剝離出來
先創建SQL 庫和表
1 數據庫 ds_0和表
CREATE DATABASE IF NOT EXISTS `ds_0` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
USE `ds_0`;
CREATE TABLE IF NOT EXISTS `t_order_0` (
`order_id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`user_id` INT(11) NOT NULL,
`status` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=INNODB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `t_order_1` (
`order_id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`user_id` INT(11) NOT NULL,
`status` VARCHAR(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `t_order_item_0` (
`order_item_id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`order_id` BIGINT(20) NOT NULL,
`user_id` INT(11) NOT NULL,
PRIMARY KEY (`order_item_id`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2 數據庫ds_1 和表
CREATE DATABASE IF NOT EXISTS `ds_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
USE `ds_1`;
CREATE TABLE IF NOT EXISTS `t_order_0` (
`order_id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`status` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `t_order_1` (
`order_id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`status` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `t_order_item_0` (
`order_item_id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_id` bigint(20) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`order_item_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `t_order_item_1` (
`order_item_id` bigint(20) NOT NULL AUTO_INCREMENT,
`order_id` bigint(20) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`order_item_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;