springboot整合ShardingSphere分库分表并插入1kw条记录

目录

一,数据分片

二,水平分片

三,创建数据库表

四,springboot项目导入依赖

五,创建类

六,bug


bug放到最后了。

一,数据分片

数据分片指按照某个维度将存放在单一数据库中的数据分散地存放至多个数据库或表中以达到提升性能瓶颈以及可用性的效果。 数据分片的有效手段是对关系型数据库进行分库和分表。分库和分表均可以有效的避免由数据量超过可承受阈值而产生的查询瓶颈。

除此之外,分库还能够用于有效的分散对数据库单点的访问量;分表虽然无法缓解数据库压力,但却能够提供尽量将分布式事务转化为本地事务的可能,一旦涉及到跨库的更新操作,分布式事务往往会使问题变得复杂。 使用多主多从的分片方式,可以有效的避免数据单点,从而提升数据架构的可用性。

通过分库和分表进行数据的拆分来使得各个表的数据量保持在阈值以下,以及对流量进行疏导应对高访问量,是应对高并发和海量数据系统的有效手段。 数据分片的拆分方式又分为垂直分片和水平分片。

二,水平分片

水平分片又称为横向拆分。 相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分。 例如:根据主键分片,偶数主键的记录放入 0 库(或表),奇数主键的记录放入 1 库(或表),如下图所示。

三,创建数据库表

创建两个数据库,分别为ds00,ds01。两个库中分别放下面三张表。

CREATE TABLE `t_order_0` (`id` bigint(20) NOT NULL,`name` varchar(255) DEFAULT NULL COMMENT '名称',`type` varchar(255) DEFAULT NULL COMMENT '类型',`gmt_create` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;CREATE TABLE `t_order_1` (`id` bigint(20) NOT NULL,`name` varchar(255) DEFAULT NULL COMMENT '名称',`type` varchar(255) DEFAULT NULL COMMENT '类型',`gmt_create` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;CREATE TABLE `t_order_2` (`id` bigint(20) NOT NULL,`name` varchar(255) DEFAULT NULL COMMENT '名称',`type` varchar(255) DEFAULT NULL COMMENT '类型',`gmt_create` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

四,springboot项目导入依赖

全放上来了。

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- shardingsphere --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.2.0</version></dependency><!-- 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>

五,创建类

service层

public interface OrderService extends IService<Order> {
}
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
}

entity层

@Data
@TableName("t_order")
public class Order {@TableId(type = IdType.AUTO)Long id;String name;String type;Date gmtCreate;
}

多线程插入1kw条数据。

这里我想用线程池来着,但是不知道为啥就是插不进去。然后就只好用了其他写法。

@SpringBootTest
public class DemoApplicationTests {@AutowiredOrderService orderService;@Testpublic void testabs(){int num = 2000;CountDownLatch latch = new CountDownLatch(1);List<Order> orderList = new ArrayList<>();new Thread(() -> {for (long i = 1; i <= 10000000; i++) {Order order = new Order();order.setId(i);order.setName("xxx" + i);order.setType("xxx");order.setGmtCreate(new Date());orderList.add(order);}latch.countDown();}).start();try {latch.await();} catch (InterruptedException e) {}//2000条为一批,插入1000万条List<List<Order>> partition = Lists.partition(orderList, num);partition.stream().forEach(orders -> {orderService.saveBatch(orders);System.err.println("插入数据成功,rows:" + num);});}}

整个添加的过程时间有点长,大概是15分钟左右。

插入完成,查看数据库,他是按照id平均分布的,最终每张表数据量差不多是160w+

六,bug

Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

这个是纯试出来的。

原因是我的pom.xml文件里有一个Druid的依赖,启动的时候一直启不起来,然后我把这个注掉,然后就没事了,看这篇博客shardingsphere+druid 报错roperty ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required_shardingsphere property 'sqlsessionfactory' or 'sq-CSDN博客。

<!--        <dependency>-->
<!--            <groupId>com.alibaba</groupId>-->
<!--            <artifactId>druid-spring-boot-starter</artifactId>-->
<!--            <version>1.1.10</version>-->
<!--        </dependency>-->

第二个就是在插入数据的时候,一直报插入匹配多个data nodes,可是并没有啊???

下面我自己写的批量插入的sql:

    <!-- 批量插入 --><insert id="batchInsert" parameterType="list">insert into t_order (`name`,`type`,`gmt_create`)values <foreach collection="orderList" item="item" separator=",">(#{item.name},#{item.type},now())</foreach></insert>

找半天我发现可能是,sql语句里面必须有指定分库分表的字段在里面,这个例子用的是id,那sql语句里面也得是有明确的id,然后我就在new的时候设置了他的id。然后暂时不报错了。

---o(╥﹏╥)o---

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/799306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 实验报告11

一、实验目的和要求 目的&#xff1a;熟悉后序线索二叉树并实现后序遍历 要求&#xff1a; &#xff08;1&#xff09;创建二叉树。 &#xff08;2&#xff09;转换为后序线索二叉树。 &#xff08;3&#xff09;实现后序遍历的非递归算法。 二、实验环境 编译器&#xf…

每天学习一个Linux命令之curl

每天学习一个Linux命令之curl 在Linux系统中&#xff0c;有很多有用的命令可以帮助我们与网络进行交互。一个非常常用的命令是curl&#xff0c;它是一个功能强大的工具&#xff0c;可用于发送、接收和处理各种网络请求。本文将详细介绍在Linux下使用curl命令的各种选项及其用法…

如何理解图像处理领域的病态问题(ill-posed problem)

ill-posed problem&#xff0c;我们可以理解为病态问题或者不适定问题。在本文中&#xff0c;统一成为不适定问题。 在讨论不适定问题&#xff08;ill-posed problem&#xff09;之前&#xff0c;我们先来看一下什么叫适定性问题&#xff08;well-posed problem&#xff09;。…

如何明确的选择IT方向?

一、明确目标 作为初学者&#xff0c;先树立自己目标&#xff0c;找到自己感兴趣的IT行业&#xff0c;IT行业分很多种&#xff0c;听的最多次的无非不就是web前端工、程序员、后端、大数据、网络运维等。学习知识也是为了找到更好的工作&#xff0c;所以我建议先去boss直聘、五…

浅谈Mysql(四)——Mysql知识补充

一、mysql什么时候会锁表 MySQL中的查询语句通常不会锁表&#xff0c;因为查询操作只读取数据而不修改数据。然而&#xff0c;当执行某些特定的查询语句或者在特定情况下&#xff0c;MySQL可能会对表进行锁定以保证数据的一致性和完整性。以下是几种可能导致表锁定的情况&#…

目标检测标签分配策略,难样本挖掘策略

在目标检测任务中&#xff0c;样本的划分对于模型的性能具有至关重要的影响。其中&#xff0c;正样本指的是包含目标物体的图像或区域&#xff0c;而负样本则是不包含目标物体的图像或区域。然而&#xff0c;在负样本中&#xff0c;有一部分样本由于其与正样本在特征上的相似性…

jest单元测试——项目实战

jest单元测试——项目实战 一、纯函数测试二、组件测试三、接口测试四、React Hook测试&#x1f4a5; 其他的疑难杂症另&#xff1a;好用的方法 &#x1f31f; 温故而知新&#xff1a;单元测试工具——JEST 包括&#xff1a;什么是单元测试、jest的基本配置、快照测试、mock函数…

机器学习工作流

本文的目的是演示如何构建一个相对完整的机器学习工作流 1.首先对工程进行基本的参数配置 # 进行建模基本配置 SCORE_EVA roc_auc random_state_clf 1 n_jobs 4 cv_split StratifiedKFold(n_splits5, shuffleTrue, random_state1) cv_split2 StratifiedKFold(n_splits5, …

(013)window的Idea运行程序 Amazon java.nio.file.AccessDeniedException

解决方法一 在资源管理器中删除该目录&#xff0c; 在程序中使用代码&#xff0c;重新建立该目录&#xff1a; if (!FileUtil.exist(destinationPath)){FileUtil.mkdir(destinationPath); }解决方法二 JDK 的版本有问题&#xff0c;换个JDK。 解决方法三 网络不好&#xf…

「39」打造专业流畅的直播特效转场……

「39」工作室模式 打造专业流畅的直播特效转场体验 工作室模式是OBS软件里的一个特殊功能,用于后期直播过程中追求直播效果的用户,才会使用此功能。 该功能意在更加平滑,使用模板信息变化的过渡效果。主要用在赛事比分、活动抽奖、直播时需要经常更改的场景和内容,以及片…

Spring之底层架构核心概念解析

你好&#xff0c;我是柳岸花开。 在当今快速发展的软件开发领域&#xff0c;各种技术层出不穷&#xff0c;但有一项技术以其卓越的设计、灵活的配置和广泛的应用&#xff0c;始终屹立在开发者的工具箱中——这就是Spring框架。自2003年首次发布以来&#xff0c;Spring已经成为J…

Android 11属性系统初始化流程

在init进程启动的第二阶段&#xff0c;调用PropertyInit 对属性系统进行初始化 int SecondStageMain(int argc, char** argv) {//省略PropertyInit();//省略 }PropertyInit函数在system\core\init\property_service.cpp 中实现 void PropertyInit() {//省略mkdir("/dev/…

opencv x86(32位) windows下vs2019编译问题

opencv x86(32位) windows下vs2019编译相关资料很多&#xff0c;都特别受用。例如 - https://blog.csdn.net/m0_59025104/article/details/134109081 - https://blog.csdn.net/sements/article/details/108410470 但是&#xff0c;自己编译时候仍遇到一些问题&#xff0c;例如&…

智能网联汽车自动驾驶数据记录系统DSSAD数据元素

目录 第一章 数据元素分级 第二章 数据元素分类 第三章 数据元素基本信息表 表1 车辆及自动驾驶数据记录系统基本信息 表2 车辆状态及动态信息 表3 自动驾驶系统运行信息 表4 行车环境信息 表5 驾驶员操作及状态信息 第一章 数据元素分级 自动驾驶数据记录系统记录的数…

【GameFi】 链游 | Brilliantcrypto点火活动

活动&#xff1a;https://app.galxe.com/quest/brilliantcrypto/GCt8wthq2J Brilliantcrypto点火活动正在Galxe上进行 &#x1f389; 活动时间&#xff1a;2024/04/06 12:00 ~ 2024/05/04 12:00 奖励总价值1200美元的MATIC 完成任务並在Brilliantcrypto Galxe Space上赚取积分。…

【数据结构与算法】:快速排序和冒泡排序

一&#xff0c;快速排序 快速排序是一种比较复杂的排序算法&#xff0c;它总共有4种实现方式&#xff0c;分别是挖坑法&#xff0c;左右"指针"法&#xff0c;前后"指针"法&#xff0c;以及非递归的快速排序&#xff0c;并且这些算法中也会涉及多种优化措施…

Docker是一个开源的应用容器引擎

Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。Docker技术的…

zdpdjango_materialadmin使用Django开发一个Material风格的后台管理系统

启动项目 同样地&#xff0c;还是先看看代码&#xff1a; 将项目启动起来&#xff1a; 浏览器访问&#xff1a;http://localhost:8000/ 代码初步优化 首先是将admin_materal提到本地来&#xff1a; 移除掉第三方依赖&#xff1a; pip uninstall django-admin-materi…

sqlserver2014安装与老版本卸载

本篇博客只提供安装包 安装与卸载难度较低&#xff0c;不做赘述 并不是说一定要卸载才能安装&#xff0c;灵活掌握&#xff0c;如果实际场景需要清理老版本sqlserver那么选择卸载 一、下载 下载地址 sqlserver2014官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 二、卸载…

移动平台相关(安卓)

目录 安卓开发 Unity打包安卓 ​编辑​编辑 BuildSettings PlayerSettings OtherSettings 身份证明 配置 脚本编译 优化 PublishingSettings 调试 ReMote Android Logcat AndroidStudio的调试 Java语法 ​编辑​编辑​编辑 变量 运算符 ​编辑​编辑​编辑​…