Sharding-JDBC(十)如何解决根据ID更新时扫描全部分表

目录

    • 一、问题描述
    • 二、问题解决
      • 1.场景一:同一事务中,新增并更新
        • 1.1 解决方案:
      • 2.场景二:不同事务中,新增后更新场景
        • 2.1 解决方案:

一、问题描述

我们在使用 ShardingJDBC 作为分片工具的时候,会在配置中指定分片键,例如根据 create_time 创建时间来按月分片是比较常用的操作。当分片表中需要根据主键 ID 来进行更新的时候,由于不确定数据的 create_time 具体是多少,ShardingJDBC 就会在选择使用分片表的时候,就会默认选择全部。如果涉及到事务就有可能会产生 锁表事务等待 等问题,从而导致数据库操作时间延长


二、问题解决

首先从逻辑上讲,在没有确定分片键值的情况下,确实没有办法只根据ID确定数据所在分表的位置

但是俗话说,没有绝对的问题,只有相对的场景。我们要从场景入手,才能找到解决问题的办法。

所以,我们要先确认根据ID更新的使用场景:

1.场景一:同一事务中,新增并更新

例如:将数据插入到数据库中后,还需要使用数据库中生成的ID,来更新同一条数据的其他字段的话,就会涉及到根据主键更新扫描全部分表的问题。

1.1 解决方案:

由于是先新增后更新,那么我们程序中已经拿到了 set 好的 createTime 字段,所以我们在更新的时候,只需要在 where 中再添加一下 create_time 的筛选条件就好了:

update t_user set user_no = id where id = ? and create_time = ?;

如果是数组的话,可以这样:

update t_user set user_no = id where id in (?, ?) and create_time in (?, ?);

这样就可以大大缩小操作分表的范围。


2.场景二:不同事务中,新增后更新场景

例如:在列表中编辑某一条数据的时候,就会涉及到根据主键更新扫描全部分表的问题。

2.1 解决方案:
  • 实现1: 在列表查询的时候就查询出创建时间,然后编辑的时候将创建时间和主键一起通过入参传回来。
  • 实现2: 在更新之前,先根据主键查询出数据的创建时间查询出来,由于查询不会进行锁表,也不需要事务等待,所以先查询,然后再根据查询出的创建时间和主键一起作为条件进行更新操作。

整理完毕,完结撒花~ 🌻

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

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

相关文章

代码随想录算法训练营第23期day14|二叉树层序遍历、226.翻转二叉树、101. 对称二叉树

目录 一、二叉树层序遍历 非递归法 递归法 相关题目(10题) 二、(leetcode 226)翻转二叉树 递归法 层序遍历 深度优先遍历 1)非统一写法——前序遍历 2) 统一写法——前序遍历 三、(le…

04_数据库

1 Web架构 web总共分为三个部分: 客户端服务器数据库 web网站访问过程: 客户端向服务器发送请求服务器操作数据库数据库将结果返回给服务器服务器将结果响应给客户端 2 数据库概念 数据库(Database) 数据库是按照数据结构来…

软件测试/测试开发丨App自动化测试-弹窗异常处理

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27692 黑名单处理 运行过程中不定时弹框(广告弹窗,升级提示框,新消息提示框等等) 弹框不是 BUG&#xff0…

docker数据管理和网络通信

docker数据管理 管理 Docker 容器中数据主要有两种方式: 数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机…

测试工程师思维学习

一、测试工程师应具备什么思维? 透过现象看本质,拒绝“一叶障目” 01、质疑和系统思维 02、创新思维 03、全局思维 04、风险驱动和组合思维 05、用户为中心和比较思维 06、BT思维和架构扩展性思维 二、测试工程师应避免的思维 01、同化现象 02、定位效…

数据结构-----二叉排序树

目录 前言 1.什么是二叉排序树 2.如何构建二叉排序树 3.二叉排序树的操作 3.1定义节点储存方式 3.2插入节点操作 3.2创建二叉排序树 3.4遍历输出(中序遍历) 3.5数据查找操作 3.6获取最大值和最小值 3.7删除节点操作 3.8销毁二叉排序树 4.完…

AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

Zookeeper经典应用场景实战(二)

文章目录 1、 Zookeeper 分布式锁实战1.1、 什么是分布式锁1.2、 基于数据库设计思路1.3、 基于Zookeeper设计思路一1.4、 基于Zookeeper设计思路二 1、 Zookeeper 分布式锁实战 1.1、 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候,大家往往采用Sync…

DRM全解析 —— CRTC详解(1)

本文参考以下博文: Linux内核4.14版本——drm框架分析(4)——crtc分析 特此致谢! 1. 简介 CRTC实际上可以拆分为CRTC。CRT的中文意思是阴极摄像管,就是当初老电视上普遍使用的显像管(老电视之所以都很厚,就是因为它…

【状态估计】将变压器和LSTM与卡尔曼滤波器结合到EM算法中进行状态估计(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

并发工具类库使用的常见问题

一、ThreadLocal在多线程环境中没有清理 由于ThreadLocal是和线程绑定的,如果线程被复用了,也即使用了线程池,那么ThreadLocal中的值是可能被复用的,这个特性如果是开发者没有预料到的,那么会产生很大的问题。例如&am…

人机言语交互模型的评估要素

智能客服中的言语交互模型评估要素,主要包括以下几个方面: 有效性:指模型能否准确识别和理解用户的言语意图,以及生成正确和合适的回答。可以通过比较模型生成的回答与人工回答的准确率来评估。流畅性:指模型在回答问…

【单调栈】下一个更大元素 II

文章目录 Tag题目来源题目解读解题思路方法一:单调栈循环数组 写在最后 Tag 【单调栈循环数组】【数组】 题目来源 503. 下一个更大元素 II 题目解读 在循环数组中找下一个更大的元素。循环数组指的是,数组的最后一个元素的下一个元素是数组首元素。 …

C语言之动态内存管理篇(1)

目录 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 今天收假了,抓紧时间写几篇博客。我又来赶进度了。今天我们来讲解动态内存管理。🆗🆗 为什么存在动态内存分配 假设我们去实现一个…

pip永久换源,虚拟环境

1 pip永久换源 2 虚拟环境 pip永久换源 # 自己写一个模块--->传到pypi上 # 安装第三方模块-清华,阿里云 pip install -i 源地址 模块名字# 永久换源 1、文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:\Users\电脑用户\AppDat…

Excel插件:StatPlus Pro 7.7.0 Crack

Windows 版 StatPlus 借助 StatPlus,人们可以获得一套强大的统计工具和图形分析方法,可以通过简单直观的界面轻松访问。StatPlus 的可能应用范围几乎是无限的 - 社会学、金融分析、生物统计学、经济学、保险业、医疗保健和临床研究 - 仅举几个该程序已被…

SignalIR入门

SignalIR入门 简介教程1.创建项目2.添加 SignalR 客户端库3.创建 SignalR 中心4.配置 SignalR5.添加 SignalR 客户端代码 效果 简介 SignalR 是一个用于构建实时 Web 应用程序的开发工具和库,它可以让服务器端代码与客户端代码之间建立双向通信。SignalR 的中文解释…

05_模板引擎

模板引擎可以让将数据和HTML模板更加友好的结合&#xff0c;省去繁琐的字符串拼接&#xff0c;使代码更加易于维护。 1 EJS 文档地址&#xff1a;https://ejs.bootcss.com/#install 1.1 安装 npm install ejs 1.2 标签语法 <% ‘脚本’ 标签&#xff0c;用于流程控制&…

【思维构造】Circle of Monsters—CF1334C

Circle of Monsters—CF1334C 思路 每一个怪兽都有两种死法&#xff1a; 直接被子弹打死先被上一个怪兽爆炸击伤&#xff0c;剩下的血量再用子弹打死 所以&#xff0c;很容易看出来第二种死法对于所有的怪兽都是最优死法&#xff08;消耗子弹最少的死法&#xff09;。我们需要…

什么测试自动化测试?

什么测试自动化测试&#xff1f; 做测试好几年了&#xff0c;真正学习和实践自动化测试一年&#xff0c;自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。 首先理清自动化测试的概念&#xff0c;广义上来讲&a…