您好,歡迎來(lái)到賦能網(wǎng)!

JAVA數(shù)據(jù)庫(kù)怎么分模塊?JAVA數(shù)據(jù)庫(kù)分庫(kù)實(shí)例

賦能網(wǎng) 2023-05-09 92

在進(jìn)行java開(kāi)發(fā)的時(shí)候,有很多應(yīng)用是離不開(kāi)數(shù)據(jù)庫(kù)的,隨著時(shí)間的推移,數(shù)據(jù)庫(kù)的數(shù)據(jù)越來(lái)越多,開(kāi)發(fā)人員需要做分表分庫(kù)的操作,那JAVA數(shù)據(jù)庫(kù)怎么分模塊?下面來(lái)我們就來(lái)給大家講解一下。

1.示例數(shù)據(jù)庫(kù)準(zhǔn)備

為了說(shuō)清楚如何用Java語(yǔ)言和相關(guān)框架實(shí)現(xiàn)業(yè)務(wù)表的分庫(kù)和分表處理。這里首先用MySQL數(shù)據(jù)庫(kù)中創(chuàng)建兩個(gè)獨(dú)立的數(shù)據(jù)庫(kù)實(shí)例,名字為mydb和mydb2,此可演示分庫(kù)操作。另外在每個(gè)數(shù)據(jù)庫(kù)實(shí)例中,創(chuàng)建12個(gè)業(yè)務(wù)表,按年月進(jìn)行數(shù)據(jù)拆分。具體的創(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)建時(shí)間
    , 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)建時(shí)間
    , 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)建時(shí)間
    , PRIMARY KEY(`order_id`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

成功執(zhí)行腳本后,在MySQL管理工具中可以看到如下的示例界面:

2.分庫(kù)分表實(shí)現(xiàn)

在Java語(yǔ)言下的框架中,有眾多的開(kāi)源框架,其中關(guān)于分庫(kù)分表的框架,可以選擇Apache ShardingSphere,其官網(wǎng)介紹說(shuō):ShardingSphere 是一套開(kāi)源的分布式數(shù)據(jù)庫(kù)解決方案組成的生態(tài)圈,它由 JDBC、Proxy 和 Sidecar(規(guī)劃中)這 3 款既能夠獨(dú)立部署,又支持混合部署配合使用的產(chǎn)品組成。 它們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)水平擴(kuò)展、分布式事務(wù)和分布式治理等功能,可適用于如 Java 同構(gòu)、異構(gòu)語(yǔ)言、云原生等各種多樣化的應(yīng)用場(chǎng)景。Apache ShardingSphere 5.x 版本開(kāi)始致力于可插拔架構(gòu)。 目前,數(shù)據(jù)分片、讀寫分離、數(shù)據(jù)加密、影子庫(kù)壓測(cè)等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 與協(xié)議的支持,均通過(guò)插件的方式織入項(xiàng)目。官網(wǎng)地址為: https://shardingsphere.apache.org/index_zh.html 。

下面的示例采用Spring Boot框架來(lái)實(shí)現(xiàn),相關(guān)的庫(kù)通過(guò)Maven進(jìn)行管理。首先給出pom.xml配置文件的定義: