在进行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配置文件的定义: