栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

分库分表 & ShardingSphere

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分库分表 & ShardingSphere

基本概念

垂直分库和分表是在数据库设计的时候就考虑。
随着数据量增加,不要直接考虑分库分表。先使用缓存、读写分离、索引等方式,如果这些方式都不能解决问题了,再使用水平分库和水平分表。

分库分表带来的问题:
1、跨节点连接查询问题
2、多数据源管理问题
ShardingSphere可以解决

分表 垂直分表

示例:
用户在浏览商品列表时,只有对某商品感兴趣时才会查看该商品的详细描述。因此,商品信息中商品描述字段访问频次较低,且该字段存储占用空间较大,访问单个数据IO时间较长;商品信息中商品名称、商品图片、商品价格等其他字段数据访问频次较高。
由于这两种数据的特性不一样,因此他考虑将商品信息表拆分如下:

水平分表

水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。

分库 垂直分库

垂直分库是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用

它带来的提升是:

解决业务层面的耦合,业务清晰
能对不同业务的数据进行分级管理、维护、监控、扩展等
高并发场景下,垂直分库一定程度的提升IO、数据库连接数、降低单机硬件资源的瓶颈
垂直分库通过将表按业务分类,然后分布在不同数据库,并且可以将这些数据库部署在不同服务器上,从而达到多个服务器共同分摊压力的效果,但是依然没有解决单表数据量过大的问题。

库内垂直分表只解决了单一表数据量过大的问题,但没有将表分布到不同的服务器上,因此每个表还是竞争同一个物理机的CPU、内存、网络IO、磁盘。

示例:

水平分库

当在业务层面无法再进行垂直分库的时候,可以尝试使用水平分库。
水平分库是使用相同的库表结构来存储同类型的数据

示例:
经过垂直分库后,数据库性能问题得到一定程度的解决,但是随着业务量的增长,PRODUCT_DB(商品库)单库存储数据已经超出预估。粗略估计,目前有8w店铺,每个店铺平均150个不同规格的商品,再算上增长,那商品数量得往1500w+上预估,并且PRODUCT_DB(商品库)属于访问非常频繁的资源,单台服务器已经无法支撑。此时该如何优化?
这里可以根据店铺ID为单数的和店铺ID为双数的商品信息分别放在两个库中

Java实现 - ShadingSphere

ShadingSphere官网

概念

ShadingSphere是一套开源的分布式数据库中间件解决方案。重点关注Sharding—JDBC、Sharding—Proxy。
定位是关系型数据库中间件,合理在分布式环境下使用关系型数据库操作。

Sharding—JDBC

是轻量级的Java框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为“增强版的 JDBC 驱动”,完全兼容 JDBC 和各种 ORM 框架(例如JPA、MyBatis)。也支持任意第三方连接池(例如druid、DBCP等)

作用

(它的作用“并不是”去做分库分表)
数据库工程师做好分库分表之后,Sharding—JDBC去操作已经分好的内容(例如向多个库中放数据,读数据等)。Sharding—JDBC目的是 简化分库分表之后的数据库相关操作。

Sharding—JDBC主要功能:
1、数据分片
2、读写分离

实操示例

1、环境:SpringBoot+MyBatisPlus+Sharding-JDBC+Druid连接池
springboot 2.2.1.RELEASE

2、依赖


        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
        

        
            com.alibaba
            druid-spring-boot-starter
            1.1.20
        

        
            mysql
            mysql-connector-java
        

        
            org.apache.shardingsphere
            sharding-jdbc-spring-boot-starter
            4.0.0-RC1
        

        
            com.baomidou
            mybatis-plus-boot-starter
            3.0.5
        

        
            org.projectlombok
            lombok
        
    

3、建表(水平分表)

CREATE TABLE course_1 (
                         cid BIGINT ( 20 ) PRIMARY KEY,
                         cname VARCHAr ( 50 ) NOT NULL,
                         user_id BIGINT ( 20 ) NOT NULL,
                         cstatus VARCHAr ( 10 ) NOT NULL
);
CREATE TABLE course_2 (
                         cid BIGINT ( 20 ) PRIMARY KEY,
                         cname VARCHAr ( 50 ) NOT NULL,
                         user_id BIGINT ( 20 ) NOT NULL,
                         cstatus VARCHAr ( 10 ) NOT NULL
);

4、创建实体类、mapper接口、启动类上加mapperscan注解

5、配置Sharding-JDBC分片策略
(1)、在项目application.properties配置
查找配置:官网——了解更多——左侧 用户手册——ShardingJDBC——配置手册——SpringBoot配置

Sharding—Proxy

定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前提供 MySQL 和 PostgreSQL(兼容 openGauss 等基于 PostgreSQL 的数据库)版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat 等)操作数据,对 DBA 更加友好。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489451.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号