java培训
搜索分类

JAVA数据库怎么分模块?JAVA数据库分库实例

赋能网 2023-05-09 92

在进行java开发的时候,有很多应用是离不开数据库的,随着时间的推移,数据库的数据越来越多,开发人员需要做分表分库的操作,那JAVA数据库怎么分模块?下面来我们就来给大家讲解一下。

1.示例数据库准备

为了说清楚如何用Java语言和相关框架实现业务表的分库和分表处理。这里首先用MySQL数据库中创建两个独立的数据库实例,名字为mydb和mydb2,此可演示分库操作。另外在每个数据库实例中,创建12个业务表,按年月进行数据拆分。具体的创建表脚本如下:

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 订单状态
    , `create_time`
    datetime DEFAULT NULL COMMENT 创建时间
    , 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 订单状态
    , `create_time`
    datetime DEFAULT NULL COMMENT 创建时间
    , 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 订单状态
    , `create_time`
    datetime DEFAULT NULL COMMENT 创建时间
    , PRIMARY KEY(`order_id`) USING BTREE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

成功执行脚本后,在MySQL管理工具中可以看到如下的示例界面:

2.分库分表实现

在Java语言下的框架中,有众多的开源框架,其中关于分库分表的框架,可以选择Apache ShardingSphere,其官网介绍说:ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。Apache ShardingSphere 5.x 版本开始致力于可插拔架构。 目前,数据分片、读写分离、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。官网地址为: https://shardingsphere.apache.org/index_zh.html 。

下面的示例采用Spring Boot框架来实现,相关的库通过Maven进行管理。首先给出pom.xml配置文件的定义: