sharding-jdbc

1.分库分表的问题

  在系统设计阶段,就要完成垂直分库和垂直分表. 在数据量不断上升,数据库性能无法满足需求的时候, 首先要考虑的是缓存、 读写分离、索引技术等方案.如果数据量不断增加,并且持续增长再考虑水平分库和水平分表

  • 事务一致性问题:分库之后 一个请求可能要访问多个数据库,如何保证事务的一致性
  • 跨节点关联问题:在代码层面进行控制,将关联查询拆分执行后合并结果
  • 分页查询排序问题:将多个库中的数据查出来,根据排序字段再在内存中排序
  • 主键避重问题:表中的数据存储在不同的数据库, 主键自增无法保证ID不重复, 需要单独设计全局主键
  • 公共表问题:不同的数据库,都需要从公共表中获取数据. 可以在每一个库都创建这个公共表, 所有对公共表的更新操作,都同时发送到所有分库执行

2.ShardingJDBC

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBCSharding-ProxySharding-Sidecar(计划中)这3款相互独立的产品组成

shardingJDBC:适用于任何基于JavaORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC;基于任何第三方的数据库连接池,如:DBCP, C3P0, Druid等;支持任意实现JDBC规范的数据库。目前支持MySQLOracleSQLServerPostgreSQL

使用Sharding-Jdbc前需要人工对数据库进行分库分表,在应用程序中加入Sharding-JdbcJar包,应用程序通过Sharding-Jdbc操作分库分表后的数据库和数据表,由于Sharding-Jdbc是对Jdbc驱动的增强,使用Sharding-Jdbc就像使用Jdbc驱动一样,在应用程序中是无需指定具体要操作的分库和分表的

  • mycat和ShardingJDBC的区别
    • mycat是一个中间件的第三方应用,sharding-jdbc是一个jar
    • 使用mycat时不需要修改代码,而使用sharding-jdbc时需要修改代码
    • Mycat 是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库,Sharding-JDBC 是基于 JDBC 的扩展,是以 jar 包的形式提供轻量级服务的
  • sharding JDBC入门
    • 创建数据库lg_order, 模拟将订单表进行水平拆分, 创建两张表pay_order_1 pay_order_2,这两张表是订单表拆分后的表,我们通过Sharding-Jdbc向订单表插入数据,按照一定的分片规则,主键为偶数的落入pay_order_1表 ,为奇数的落入pay_order_2, 再通过Sharding-Jdbc 进行查询
    • 创建数据库
    CREATE DATABASE lg_order CHARACTER SET utf8;
    DROP TABLE IF EXISTS pay_order_1;
    CREATE TABLE pay_order_1 (
    order_id BIGINT(20) PRIMARY KEY AUTO_INCREMENT ,
    user_id INT(11) ,
    product_name VARCHAR(128),
    COUNT INT(11)
    );
    DROP TABLE IF EXISTS pay_order_2;
    CREATE TABLE pay_order_2 (
    order_id BIGINT(20) PRIMARY KEY AUTO_INCREMENT ,
    user_id INT(11) ,
    product_name VARCHAR(128),
    COUNT INT(11)
    );
    • 创建SpringBoot项目引入maven依赖
    • 分片规则配置(水平分表)
    • 编写程序

3.ShardingJDBC 分库分表

4.ShardingJDBC 操作公共表

 

 

Mycat 是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库,而
Sharding-JDBC 是基于 JDBC 的扩展,是以 jar 包的形式提供轻量级服务的

sharding-jdbc

上一篇:MYSQL数据管理


下一篇:linux安装python