基于sharding-jdbc的使用限制

目录
  • 使用限制
    • JDBC未支持列表
      • DataSource接口
      • Connection接口
      • Statement和PreparedStatement接口
      • 对于ResultSet接口
      • JDBC 4.1
    • SQL语句限制
  • shardingjdbc使用及踩坑内容
    • 1.使用shardingjdbc做分库分表
    • 2.踩坑内容

使用限制

JDBC未支持列表

Sharding-JDBC暂时未支持不常用的JDBC方法。

DataSource接口

不支持timeout相关操作

Connection接口

不支持存储过程,函数,游标的操作

不支持执行native的SQL

不支持savepoint相关操作

不支持Schema/Catalog的操作

不支持自定义类型映射

Statement和PreparedStatement接口

不支持返回多结果集的语句(即存储过程,非SELECT多条数据)

不支持国际化字符的操作

对于ResultSet接口

不支持对于结果集指针位置判断

不支持通过非next方法改变结果指针位置

不支持修改结果集内容

不支持获取国际化字符

不支持获取Array

JDBC 4.1

不支持JDBC 4.1接口新功能

查询所有未支持方法,请阅读com.dangdang.ddframe.rdb.sharding.jdbc.unsupported包。

SQL语句限制

不支持DDL语句

不支持子语句

不支持UNION 和 UNION ALL

不支持特殊INSERT

每条INSERT语句只能插入一条数据,不支持VALUES后有多行数据的语句

不支持DISTINCT聚合

shardingjdbc使用及踩坑内容

1.使用shardingjdbc做分库分表

最近公司由于业务需要,对日益增加的数据量越来越无法容忍,遂作出分库分表的决定,考察了几个技术方案后,决定使用shardingsphere做分表中间件。

使用maven拉取jar包:

    <dependency>
       <groupId>io.shardingsphere</groupId>
       <artifactId>sharding-jdbc</artifactId>
       <version>3.0.0.M3</version>
      </dependency>
      <dependency>
       <groupId>io.shardingsphere</groupId>
       <artifactId>sharding-jdbc-spring-namespace</artifactId>
       <version>3.0.0.M3</version>
      </dependency>

分表配置:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:sharding="http://shardingsphere.io/schema/shardingsphere/sharding"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
  http://shardingsphere.io/schema/shardingsphere/sharding
       http://shardingsphere.io/schema/shardingsphere/sharding/sharding.xsd"
    default-autowire="byName">

 <!-- 分表算法 -->
 <bean id="tableShardingAlgorithm" class="pxf.commom.support.sharding.tableShardingAlgorithm" />
 <sharding:complex-strategy id="tableStrategy"
          sharding-columns="uid"
          algorithm-ref="tableShardingAlgorithm" />
 <!-- ds_0为数据源,如果做分库,可配置多个数据源;不分表的表不用在此做配置-->
 <sharding:data-source id="dataSource">
  <sharding:sharding-rule data-source-names="ds_0" default-data-source-name="ds_0" >
   <sharding:table-rules>
    <sharding:table-rule
      logic-table="test_table"
      actual-data-nodes="ds_0.test_table_$->{0..128}"
      table-strategy-ref="tableStrategy" />
   </sharding:table-rules>
  </sharding:sharding-rule>
 </sharding:data-source>
</beans>

2.踩坑内容

1). 用于分表的列在sql中不能为空,所以像insert之类的语句需要做下非空判断;

2). sqlmap中LONGVARCHER字段不能使用,会报序列化异常,可改为VARCHAR类型;

3). union语法不支持,可改为OR查询(shardingjdbc连OR也不支持,所以建议使用shardingsphere)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Java使用Sharding-JDBC分库分表进行操作

    目录 主从库搭建 Compose File Master 配置 Slave 配置 主从配置 创建分库分表 Order 1 库 Order 2 库 User 库 Sharding-JDBC 引入 Sharding-JDBC 配置 可选配置 数据源配置 主从复制配置 数据节点配置 Demo 程序 Sharding-JDBC 是无侵入式的 MySQL 分库分表操作工具,所有库表设置仅需要在配置文件中配置即可,无须修改任何代码. 本文写了一个 Demo,使用的是 SpringBoot 框架,通过 Doc

  • SpringBoot使用Sharding-JDBC实现数据分片和读写分离的方法

    目录 一.Sharding-JDBC简介 二.具体的实现方式 1.maven引用 2.数据库准备 3.Spring配置 4.精准分片算法和范围分片算法的Java代码 5.测试 一.Sharding-JDBC简介 Sharding-JDBC是Sharding-Sphere的一个产品,它有三个产品,分别是Sharding-JDBC.Sharding-Proxy和Sharding-Sidecar,这三个产品提供了标准化的数据分片.读写分离.柔性事务和数据治理功能.我们这里用的是Sharding-JDB

  • ShardingSphere jdbc集成多数据源的实现步骤

    目录 集成sharding jdbc 1. 引入依赖 2. 配置分表规则 问题 集成多数据源 1. 引入依赖 2. 多数据源配置 3. 增加多数据源配置 4. 使用 总结 最近有个项目的几张表,数量级在千万以上,技术栈是SpringBoot+Mybatis-plus+MySQL.如果使用单表,在进行查询操作,非常耗时,经过一番调研,决定使用分表中间件:ShardingSphere. ShardingSphere今年4月份成为了 Apache 软件基金会的顶级项目,目前支持数据分片.读写分离.多数

  • Sharding-Jdbc 自定义复合分片的实现(分库分表)

    目录 Sharding-JDBC的数据分片策略 分片键 分片算法 分片策略 SQL Hint 实战–自定义复合分片策略 小结 Sharding-JDBC中的分片策略有两个维度,分别是: 数据源分片策略(DatabaseShardingStrategy) 表分片策略(TableShardingStrategy) 其中,数据源分片策略表示:数据路由到的物理目标数据源,表分片策略表示数据被路由到的目标表. 特别的,表分片策略是依赖于数据源分片策略的,也就是说要先分库再分表,当然也可以只分表. Shar

  • SpringBoot集成Sharding Jdbc使用复合分片的实践

    目录 1.Sharing JDBC 简介 2.系统改造 2.1 对接外部系统的系统 2.2 内部系统间的调用 3.解决方案 4.代码实现 4.1 Sharding JDBC 配置 4.2 数据源操作类 4.3 分片测试类 4.4 测试结果 参考文章: 最近主要的工作重心是数据库的容量规划. 随着业务的逐渐增大,原有保存在单表的数据量也日益增强.数据库数据会随着业务的发展而不断增多,因此数据操作,如增删改查的开销也会越来越大.再加上物理服务器的资源有限(CPU.磁盘.内存.IO 等).最终数据库所

  • spring boot使用sharding jdbc的配置方式

    本文介绍了spring boot使用sharding jdbc的配置方式,分享给大家,具体如下: 说明 要排除DataSourceAutoConfiguration,否则多数据源无法配置 @SpringBootApplication @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class Application { public static void main(String[] arg

  • SpringBoot 如何使用sharding jdbc进行分库分表

    目录 基于4.0版本,Springboot2.1 在pom里确保有如下引用 里面我profiles.active了另一个 之后手工把表都建好 写个测试代码 需要注意一个坑 基于4.0版本,Springboot2.1 之前写过一篇使用sharding-jdbc进行分库分表的文章,不过当时的版本还比较早,现在已经不能用了.这一篇是基于最新版来写的. 新版已经变成了shardingsphere了,https://shardingsphere.apache.org/. 有点不同的是,这一篇,我们是采用多

  • 解决sharding JDBC 不支持批量导入问题

    目录 sharding JDBC 不支持批量导入 sharding-jdbc不支持多条sql语句批量更新 修改思路 sharding JDBC 不支持批量导入 package com.ydmes.service.impl.log; import com.ydmes.domain.entity.log.BarTraceBackLog; import org.springframework.beans.BeansException; import org.springframework.contex

  • Sharding JDBC读写分离实现原理及实例

    一.核心功能和不支持项 核心功能 提供一主多从的读写分离配置,可独立使用,也可配合分库分表使用. 独立使用读写分离支持SQL透传. 同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性. 基于Hint的强制主库路由. 不支持项 主库和从库的数据同步(所以需要另外实现主从同步,如使用Mysql的binlog实现). 主库和从库的数据同步延迟导致的数据不一致. 主库双写或多写. 跨主库和从库之间的事务的数据不一致.主从模型中,事务中读写均用主库. #涉及到的库及表

  • Spring Boot中使用JDBC Templet的方法教程

    前言 Spring 的 JDBC Templet 是 Spring 对 JDBC 使用的一个基本的封装.他主要是帮助程序员实现了数据库连接的管理,其余的使用方式和直接使用 JDBC 没有什么大的区别. 业务需求 JDBC 的使用大家都比较熟悉了.这里主要为了演示在 SpringBoot 中使用 Spring JDBC Templet 的步骤,所以我们就设计一个简单的需求.一个用户对象的 CURD 的操作.对象有两个属性,一个属性是id,一个属性是名称.存储在 MySQL 的 auth_user

  • Spring JDBC的使用详解

    JDBC介绍 从这篇文章开始,我们将会介绍SpringBoot另外一个核心的技术,即数据库访问技术,提到数据访问,学习Java的同学瞬间能就想起JDBC技术,JDBC 是 Java Database Connectivity 的全称,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的一套标准的API,这套标准不同的数据库厂家之间共同准守,并提供各自的具体实现.如图所示: 这样设计的好处,就是Java程序只需要和JDBC API交互,从而屏蔽了访问

  • 基于sharding-jdbc的使用限制

    目录 使用限制 JDBC未支持列表 DataSource接口 Connection接口 Statement和PreparedStatement接口 对于ResultSet接口 JDBC 4.1 SQL语句限制 shardingjdbc使用及踩坑内容 1.使用shardingjdbc做分库分表 2.踩坑内容 使用限制 JDBC未支持列表 Sharding-JDBC暂时未支持不常用的JDBC方法. DataSource接口 不支持timeout相关操作 Connection接口 不支持存储过程,函数

  • Springboot之日志、配置文件、接口数据如何脱敏

    目录 一.前言 二.配置文件如何脱敏? 1. 添加依赖 2. 配置秘钥 3. 生成加密后的数据 4. 将加密后的密文写入配置 5. 总结 三.接口返回数据如何脱敏? 1. 自定义一个Jackson注解 2. 定制脱敏策略 3. 定制JSON序列化实现 4. 定义Person类,对其数据脱敏 5. 模拟接口测试 6. 总结 四.日志文件如何数据脱敏? 1. 添加log4j2日志依赖 2. 在/resource目录下新建log4j2.xml配置 3. 自定义PatternLayout实现数据脱敏 4

随机推荐