当前位置: 首页 > news >正文

ShardingSphere介绍

1. ShardingSphere简单介绍

  ShardingSphere是一款目前业内比较流行的分库分表框架,到现在为止有接近十年的开发历程了,其 已经不仅仅只是⽤来做分库分表,⽽是形成了⼀个围绕 分库分表核⼼的技术⽣态。他的核⼼功能已经包括了数据分⽚、分布式事务、读写分离、⾼可 ⽤、数据迁移、联邦查询、数据加密、影⼦库、DistSQL庞⼤的技术体系。
ShardingSphere最为核⼼的产品有两个:⼀个是ShardingJDBC,这是⼀个进⾏客户端分库分
表的框架。另⼀个是ShardingProxy,这是⼀个进⾏服务端分库分表的产品。他们代表了两种不
同的分库分表的实现思路。

2. 为什么需要使用ShardingSphere

  在任何一个商城或者收单系统中,单库单表或许在项目早期能够支撑,其就无法满足日益增长的用户和订单需求了,于是必须考虑到分库分表。在业界分库分表的框架有很多,比如Mycat、shardingsphere等等,考虑到Shardingsphere已经被收录进apache,作为顶级项目,且一直在更新维护,此次就选择Shardingsphere作为分库分表的底层框架。

3. 什么时候需要进行分库以及分表

  我们知道当数据量过大的时候,我们就需要进行分库分表,那究竟什么时候代表数据量过大了呢?业界⽬前唯⼀⽐较值得参考的详细标准,是阿⾥公开的开发⼿册中提到的,建议预估三年内,单表数据超过500W,或者单表数据⼤⼩超过2G,就需要分库分表

4. 分库分表的难点

可能有些读者会觉得,不就是引入第三方框架,分库分表也蛮简单的呀。对于这类读者,建议多多了解shardingsphere结合实际业务场景的使用,同时思考一个问题,如何在分库分表的同时,保证系统性能不怎么受影响呢?

  分库分表不是简单地框架的引入就可以解决的问题,它涉及到一系列的分布式服务问题,包括但不限于分布式订单id、分布式事务、分布式锁、读写分离以及分布式数据库等等业界常见的难点问题。同时如果使用ShardingJdbc进行分库分表的话,并不是所有SQL都能被ShardingSphere支持的,比如一些复杂嵌套查询sql,由于Shardingsphere无法将其按照算法拆分为特定条件,所以就无法被解析,这样在分库分表过程中可能会出现问题。

  针对分库分表,我的建议是“能不分就不分”,实在需要分,则在分库分表之前,对系统有很好的设计,同时至少需要考虑以下问题:

主键重复问题
在分库分表环境中,由于表中数据同时存在不同数据库中,某个数据库⽣成的ID就⽆
法保证全局唯⼀。因此需要单独设计全局主键,以避免跨库主键重复问题。
历史数据迁移问题
如果项目已经在生产运行一段时间,产生了各项数据,如何保证引入分库分表后,历史数据依旧可以被正常访问?
数据库扩容带来的数据迁移问题
当数据库集群需要进⾏扩缩容时,集群中的数据也需要随着服务进⾏迁移。如何在不影响
业务稳定性的情况下进⾏数据迁移也是数据库集群化后需要考虑的问题。
分布式事务问题
传统单库单表服务,我们可以使用本地事务进行事务管理,但是在多库多表的环境中,事务应该如何管理?
数据路由问题
插入的数据会被拆分到多个分片中,如何保证数据查询的时候寻找到对应的分片从而使数据不会”丢失”
归并问题
进⾏多个分片查询时,每个分散的数据库中只能查出⼀部分的数据,这时要对整体结果进⾏
归并,⽐如常⻅的limit、order by等操作,如何使数据复合要求?
实际场景中,分库分表带来的挑战不止上述几个问题,不同业务有不同的处理方式,我们很难寻找统一的解决方案去满足所有场景。

相关文章:

ShardingSphere介绍

1. ShardingSphere简单介绍 ShardingSphere是一款目前业内比较流行的分库分表框架,到现在为止有接近十年的开发历程了,其 已经不仅仅只是⽤来做分库分表,⽽是形成了⼀个围绕 分库分表核⼼的技术⽣态。他的核⼼功能已经包括了数据分⽚、分布式…...

操作系统 | 学习笔记 | 王道 | 2.2处理机调度

2.2 处理机调度 文章目录 2.2 处理机调度2.2.1 调度的概念2.2.2 调度的目标2.2.3 调度的实现2.2.4 典型的调度算法错题总结: 2.2.1 调度的概念 调度的基本概念 处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法(公平、高效的原则&…...

我们项目要升级到flutter架构的几点原因

一、探索 Flutter打造卓越移动应用的新时代框架 在移动应用开发的世界里,Flutter已经成为了一个炙手可热的话题。诞生于Google的怀抱,Flutter以其独特的优势和理念,正在引领一场全球范围内的应用开发 ** 。本文将深入探讨Flutter项目的特点、…...

Solidity开发智能合约

05-Solidity开发智能合约 0 Solidity和智能合约 Solidity开发可运行的智能合约步骤: 源代码通过编译成字节码(Bytecode),同时会产生二进制接口规范(ABI) 通过交易将字节码部署到以太坊网络,部署…...

bind实验

服务端 查看域名 [rootclient yum.repos.d]# hostname client 设置域名 [rootclient yum.repos.d]# hostnamectl set-hostname dns1.openlab.edu [rootclient yum.repos.d]# cd [rootclient ~]# hostname dns1.openlab.edu 安装bind包 [rootclient ~]# yum install bind -y…...

ARM架构下安装新版docker及docker-compose

一、常见CPU 架构: 二、环境信息 CPU架构操作系统配置HUAWEI Kunpeng 920 5220 aarch64openEuler 22.03 (LTS-SP3)64C128g15T 三、安装docker 3.1 二进制包下载 docker-ce 社区下载地址: wget https://mirrors.nju.edu.cn/docker-ce/linux/static/s…...

自锁/非自锁开关原理笔记

前言:编写不易,请勿搬运,感谢理解,仅供学习。 开关介绍 6指针开关,这种开关分为自锁和非自锁开关,自锁开关有两种状态,按下和松开的状态,非自锁开关在按下过后,按键会复…...

基于SpringBoot+Vue的论坛网站-无偿分享 (附源码+LW+调试)

目录 1. 项目技术 2. 功能菜单 3. 部分功能截图 4. 研究背景 5. 研究目的 6. 可行性分析 6.1 技术可行性 6.2 经济可行性 6.3 操作可行性 7. 系统设计 7.1 概述 7.2 系统流程和逻辑 7.3 系统结构 8. 数据库设计 8.1 数据库ER图 (1)问题反…...

基于SSM的博客系统+LW参考示例

1项目介绍 系统角色:管理员、普通用户功能模块:管理员(用户管理,博文分类管理,博文信息管理,话题分类管理,热议话题管理,私信管理,敏感词管理,系统管理等&am…...

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布

目录 Docker Desktop 4.36 发布:企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布!Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布:企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新,简化了…...

webpack5开发环境、生产环境配置 (三)

开发环境:就是我们开发代码时使用的模式。 这个模式我们做两件事情: 1、编译代码,使浏览器能识别运行 2、代码质量检查,树立代码规范 生产环境:开发完成代码后,我们需要得到代码将来部署上线。 这个模式…...

一次Kafka启动失败引出的问题

背景 Some time,有个现场童鞋说咱的Kafka实例有个broker一直crash,还截图给我看了,大致是Kafka启动加载topic分区日志文件的时候,然后就没了,连个WARN都没有。当然,光看这个截图咱啥都不知道,因…...

[Linux] 进程间通信——匿名管道命名管道

标题:[Linux] 进程间通信——匿名管道&&命名管道 水墨不写bug (图片来源于网络) 目录 一、进程间通信 二、进程间通信的方案——匿名管道 (1)匿名管道的原理 (2)使用匿名管道 三、进…...

人机交互中的状态交互、趋势交互

在人机交互中, 状态交互 和 趋势交互 是两种重要的交互方式,它们分别涉及到用户与系统之间不同的交互模型和机制。 1. 状态交互 状态交互主要聚焦于用户与系统之间的状态转换及其反馈机制。在这种交互模式下,系统会根据用户的输入或行为发生状…...

基于Java Springboot房屋租赁App且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…...

golang的wails框架在macos下的问题

1、前言 之前练手写了格调用ollama api的web应用,想找个容器打包下,于是找到wails来打包,windows下都是很正常的,因为就是普通的http调用,也没遇到cors跨域问题,但是到了macos下使用wails dev命令启动的客户…...

编程设计模式助记顺口溜

1、顺口溜 创建型,工厂多,单例建对象,抽象工厂做。建造者分步做,原型克隆最不愁。 结构型,适配器,桥接组合都不错,装饰外观飞享元,代理再添一把火。 行为型,责任链&…...

java网络通信(三):TCP通信、实现客户端-服务端消息通信

目录 1、什么是 TCP协议? 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介:本文章主要是演示如何用java代码以及TCP协议实现网络通信,实…...

mybatis-plus 对于属性为null字段不更新

MyBatis-Plus 默认情况下会根据字段的值是否为 null 来决定是否生成对应的 UPDATE 语句。这是由 更新策略 决定的,默认的行为是 忽略 null 值,即如果字段值为 null,该字段将不会出现在 UPDATE 语句中。 默认行为分析 MyBatis-Plus 默认的 Fi…...

GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记

1 Overall GAGAvatar(Generalizable and Animatable Gaussian Avatar),一种面向单张图片驱动的可动画化头部头像重建的方法,解决了现有方法在渲染效率和泛化能力上的局限。 旋转参数 现有方法的局限性: 基于NeRF的方…...

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿,数据挖掘的小伙伴们!今天我要给你们介绍一本超级实用的书——《数据挖掘:概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作,由该领域的知名专家编写,系统性地介绍了在高维数据空间中分析和提取大量…...

springboot vue 开源 会员收银系统 (12)购物车关联服务人员 订单计算提成

前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中,我们完成订单的挂单和取单功能,今天我们完成购物车关联服务人员,用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…...

lua闭包Upvalue

闭包 lua任何函数都是闭包,闭包至少带1个upValue; CClosure是使用Lua提供的lua_pushcclosure这个C-Api加入到虚拟栈中的C函数,它是对LClosure的一种C模拟 如string.gmatch就是cclosure 定义: #define ClosureHeader \CommonH…...

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接: 二进制压缩包(推荐): ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…...

深入探索Flax:一个用于构建神经网络的灵活和高效库

深入探索Flax:一个用于构建神经网络的灵活和高效库 在深度学习领域,TensorFlow 和 PyTorch 作为主流的框架,已被广泛使用。不过,Flax 作为一个较新的库,近年来得到了越来越多的关注。Flax 是一个由Google Research团队…...

vue项目中单独文件的js不存在this.$store?.state怎么办

在Vue项目中,如果你在单独的文件(比如插件、工具函数等)中遇到this.$store不存在的情况,这通常是因为this上下文不指向Vue实例,或者Vuex store没有被正确地注入到Vue实例中。以下是几种可能的解决方案: 确保…...

物联网客户端在线服务中心(客服功能/私聊/群聊/下发指令等功能)

一、界面 私聊功能(下发通知类,一对多)群聊(点对点)发送指令(配合使用客户端,基于cefsharp做的物联网浏览器客户端)修改远程参数配置(直接保存到本地)&#…...

AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(二)

接上一篇AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(一) new_email 无论为什么文本,识别结果几乎都是垃圾邮件,因此我们需要对源码的逻辑进行梳理一下: 在代码中,new_email 无论赋值为何内容都被识别为…...

hint: Updates were rejected because the tip of your current branch is behind!

问题 本地仓库往远段仓库推代码时候提示: error: failed to push some refs to 192.168.2.1:java-base/java-cloud.git hint: Updates were rejected because the tip of your current branch is behind! refs/heads/master:refs/heads/master [rejected] (…...

Vue的数据驱动原理

文章目录 什么是数据驱动那么vuejs是如何实现这种数据驱动的呢?对getter/setter的理解?一个简单的演示例子vue数据驱动原理是:采用数据劫持结合发布者和订阅者模式,通过“object.defineproperty()”来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应…...

【Db First】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

数据分析-52-时间序列分解之变分模态分解VMD

文章目录 1 时间序列模态分解1.1 模态分解的概念1.2 模态分解的作用1.3 常用的模态分解方法1.4 模态分解的常用库2 变分模态分解VMD2.1 VMD的流程2.2 加载数据集2.2.1 数据重采样2.2.2 原始数据可视化2.3 VMD变分模态分解3 参考附录1 时间序列模态分解 1.1 模态分解的概念 时…...

做异端中的异端 -- Emacs裸奔之路4: 你不需要IDE

确切地说,你不需要在IDE里面编写或者阅读代码。 IDE用于Render资源文件比较合适,但处理文本,并不划算。 这的文本文件,包括源代码,配置文件,文档等非二进制文件。 先说说IDE带的便利: 函数或者变量的自动…...

redhat 7.9配置阿里云yum源

1、mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2、添加dns vim/etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 114.114.114.114 #配置完先检查下通不通 3、vi /etc/yum/pluginconf.d/subscription-manager.conf # 将 “enabled1” 改为 “ena…...

简单快速的上手python

前言 python是一门可以快速上手的语言,原因是它语法简单,api容易使用自由灵活 当我们需要安装任何的三方库时,只需要执行 pip install XX 之后在代码里面import xxx就可以使用python啦。 并且python的代码自由灵活,使用缩进区…...

PHP和GD如何给图片添加模糊边缘效果

在PHP中,使用GD库给图片添加模糊边缘效果通常涉及几个步骤,包括加载图片、创建模糊效果、应用边缘处理以及保存结果图片。然而,GD库本身并不直接提供边缘模糊的函数,但你可以通过一些技巧来实现类似的效果。 以下是一个简化的步骤…...

PowerShell:查找并关闭打开的文件

Get-SmbOpenFile 打开 Windows PowerShell 并运行 Get-SmbOpenFile | Format-List 若要仅显示特定文件共享的连接,请使用 Where-Object 运行 Get-SmbOpenFile。 Get-SmbOpenFile | Where-Object Path -eq "C:\Data\" | Format-List Get-SmbSession 显…...

SQL进阶技巧:非等值连接--单向近距离匹配

目录 0 场景描述 1 数据准备 2 问题分析 ​编辑 ​编辑 3 小结 数字化建设通关指南 0 场景描述 表 t_1 和表 t_2 通过 a 和 b 关联时,有相等的取相等的值匹配,不相等时每一 个 a 的值在 b 中找差值最小的来匹。 表 t_1:a 中无重复值 表 t_1:a 中无重复值 a 1 2 4 …...

【golang】单元测试,以及出现undefined时的解决方案

单元测试 要对某一方法进行测试时,例如如下这一简单减法函数,选中函数名后右键->转到->测试 1)Empty test file 就是一个空文件,我们可以自己写测试的逻辑 但是直接点绿色箭头运行会出问题: 找不到包。我们要在…...

代理IP地址的含义与设置指南‌

在数字化时代,互联网已经成为我们日常生活不可或缺的一部分。然而,在享受互联网带来的便利的同时,我们也面临着隐私泄露、访问限制等问题。代理IP地址作为一种有效的网络工具,能够帮助我们解决这些问题。本文将详细介绍代理IP地址…...

Qt 2D绘图之三:绘制文字、路径、图像、复合模式

参考文章链接: Qt 2D绘图之三:绘制文字、路径、图像、复合模式 绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象…...

el-table 纵向 横向 多级表头

<el-table :data"tableData" class"diaTable":span-method"handleSpanMethod"border:header-cell-style"{background:#292929,color:#fff}"><!-- 纵向表头 --><el-table-column label"纵向表头" width"…...

linux perf安装问题解决

WARNING: perf not found for kernel 4.15.0-39 perf安装问题 perf是一个功能强大的linux性能分析工具&#xff0c;其功能依赖于内核&#xff0c;安装perf工具的版本必须与内核版本保持一致。 perf安装问题 使用apt 安装 perf包&#xff0c;运行时提示要安装与内核版本相一致…...

嵌入式Linux无窗口系统下搭建 Qt 开发环境

嵌入式Linux无窗口系统下搭建 Qt 开发环境 本文将介绍如何在树莓派的嵌入式 Linux 环境下&#xff0c;搭建 Qt 开发环境&#xff0c;实现无窗口系统模式&#xff08;framebuffer&#xff09;下的图形程序开发。 1. 安装 Qt 环境 接下来&#xff0c;安装核心 Qt 开发库以及与 …...

JSON vs 表单格式:两种常见请求格式的区别与应用

搞iOS UI 自动化的同时涉及到了给后端发送请求&#xff0c;请求数据的格式常用的有json格式和表单格式&#xff0c;这两种格式如何区分&#xff0c;如何使用&#xff0c;特此总结了一下。 表单格式&#xff08;Form Data&#xff09; 传统的 HTML 表单使用的请求体格式&#…...

通过torch.utils.data.DataLoader可提高深度学习的10倍运行的速度?

引言 在深度学习的训练过程中&#xff0c;数据加载是一个关键步骤&#xff0c;它直接影响到模型训练的效率。为了提高运行速度&#xff0c;我们通常会采用多种方法&#xff0c;比如数据预处理、多线程加载、缓存策略等。然而&#xff0c;有一个经常被忽视的优化点——调整torc…...

【QT】背景,安装和介绍

TOC 目录 背景 GUI技术 QT的安装 使用流程 QT程序介绍 main.cpp​编辑 Wiget.h Widget.cpp form file .pro文件 临时文件 C作为一门比较古老的语言&#xff0c;在人们的认知里始终是以底层&#xff0c;复杂和高性能著称&#xff0c;所以在很多高性能需求的场景之下…...

计算机网络:IP协议详细讲解

目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前&#xff0c;我们学习了传输层中的TCP和UDP&#xff0c;重点是TCP协议&#xff0c;他帮我们解决具体到主机的哪个应用&#xff08;端口&#xff09;、传输的可靠&#xff08;序列号、校验和…...

Python中使用pip换源的详细指南

在Python开发过程中&#xff0c;我们经常需要安装各种第三方库。pip是Python的包管理工具&#xff0c;用于安装和管理Python库。然而&#xff0c;由于网络原因&#xff0c;有时访问默认的Python包索引&#xff08;PyPI&#xff09;可能会比较慢。这时&#xff0c;我们可以通过更…...

【Unity】WebGL全屏问题

1 前言 WebGL项目打包时不可避免的需要面对全屏化问题&#xff0c;或者说是占满网页的问题。这里讨论一下此问题。 2 全屏化 2.1 打包模板 WebGL在打包时可以选择不同的打包模板&#xff0c;其会影响最终打包好的项目在网页中的展现形式。可以在“Project Setting/Player/Set…...