在進行java開發(fā)的時候,有很多應用是離不開數據庫的,隨著時間的推移,數據庫的數據越來越多,開發(fā)人員需要做分表分庫的操作,那JAVA數據庫怎么分模塊?下面來我們就來給大家講解一下。
1.示例數據庫準備
為了說清楚如何用Java語言和相關框架實現業(yè)務表的分庫和分表處理。這里首先用MySQL數據庫中創(chuàng)建兩個獨立的數據庫實例,名字為mydb和mydb2,此可演示分庫操作。另外在每個數據庫實例中,創(chuàng)建12個業(yè)務表,按年月進行數據拆分。具體的創(chuàng)建表腳本如下:
CREATE TABLE `t_bill_2021_1`( `order_id` bigint(20) NOT NULL COMMENT 訂單id , `user_id` int(20) NOT NULL COMMENT 用戶id , `address_id` bigint(20) NOT NULL COMMENT 地址id , `status` char(1) DEFAULT NULL COMMENT 訂單狀態(tài) , `create_time` datetime DEFAULT NULL COMMENT 創(chuàng)建時間 , PRIMARY KEY(`order_id`) USING BTREE ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci; CREATE TABLE `t_bill_2021_2`( `order_id` bigint(20) NOT NULL COMMENT 訂單id , `user_id` int(20) NOT NULL COMMENT 用戶id , `address_id` bigint(20) NOT NULL COMMENT 地址id , `status` char(1) DEFAULT NULL COMMENT 訂單狀態(tài) , `create_time` datetime DEFAULT NULL COMMENT 創(chuàng)建時間 , PRIMARY KEY(`order_id`) USING BTREE ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci; --省略.... CREATE TABLE `t_bill_2021_12`( `order_id` bigint(20) NOT NULL COMMENT 訂單id , `user_id` int(20) NOT NULL COMMENT 用戶id , `address_id` bigint(20) NOT NULL COMMENT 地址id , `status` char(1) DEFAULT NULL COMMENT 訂單狀態(tài) , `create_time` datetime DEFAULT NULL COMMENT 創(chuàng)建時間 , PRIMARY KEY(`order_id`) USING BTREE ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;
成功執(zhí)行腳本后,在MySQL管理工具中可以看到如下的示例界面:
2.分庫分表實現
在Java語言下的框架中,有眾多的開源框架,其中關于分庫分表的框架,可以選擇Apache ShardingSphere,其官網介紹說:ShardingSphere 是一套開源的分布式數據庫解決方案組成的生態(tài)圈,它由 JDBC、Proxy 和 Sidecar(規(guī)劃中)這 3 款既能夠獨立部署,又支持混合部署配合使用的產品組成。 它們均提供標準化的數據水平擴展、分布式事務和分布式治理等功能,可適用于如 Java 同構、異構語言、云原生等各種多樣化的應用場景。Apache ShardingSphere 5.x 版本開始致力于可插拔架構。 目前,數據分片、讀寫分離、數據加密、影子庫壓測等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 與協(xié)議的支持,均通過插件的方式織入項目。官網地址為: https://shardingsphere.apache.org/index_zh.html 。
下面的示例采用Spring Boot框架來實現,相關的庫通過Maven進行管理。首先給出pom.xml配置文件的定義: