数据库分库分表实战

2023-11-07

一 使用场景

当单个数据库实例达到瓶颈,例如连接数过多,处理能力受限、存储容量不足、磁盘IO达到瓶颈、内存不足,都需要对数据库进行分库分表。

二 垂直切分

数据库表按列拆分,拆分后,数据库从一个数据列多的表变成了多个数据列少的表。

数据垂直切分如下图所示。

在拆分过程中,由于可能存在冗余字段,所以按照以下原则进行切分

  • 将不常用的字段放到一个表中

  • 将 blog 等占用空间较多的字段拆分到一个表中

  • 将经常一起被访问的字段放到一个表中

三 水平切分

保持表的结构不变,把数据按照行拆分,每个表的数据量变少。

水平切分示意图。

切分方法:

  • 在规定的范围内,每一百万条数据分一个表,按照主键的值进行划分。

  • 按照 主键 % (表的个数)的结果进行划分,然后拆分到相应的数据表中。

通过将不同的表归属到不同的数据库中,存储在不同的物理节点上 ,达到消除性能瓶颈的目的。

四 影响

无论采用哪种方法进行分库分表,都会影响实际数据库的功能范围。因为原本存储在一个表中的数据库支持的操作,由于分库分表后,由于物理分割,从前一个数据库支持的操作就不适用了。

1 事务失效

解决方案:通过乐观锁或分布式事务来解决。跟不分库分表相比,实现的复杂度和难度增加了。

2 分页、排序、统计最值等函数失效

解决方案:在每个分库中统计结果,汇总结果后,再集中处理,得到最终结果。

3 主键冲突

解决方案:主键ID + 库表ID 来实现全局唯一。

五 切分优点

1 容易维护

服务变小后,每个模块的规模变小了,出问题只会影响某个模块,不会影响全局。

2 方便团队并行开发

切分后,每个模块规模变小了,每个人负责的模块小了,只会修改和自己相关的模块,而不是整个应用,编码时,代码冲突也会变少。

3 容易重构

如果整体都在一起,当修改一处代码,则要整体编译,整体发布。而且为了稳定,需要整体测试。

4 复用组装

细粒度模块像搭积木一起灵活搭配,从而实现新功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据库分库分表实战 的相关文章

  • 基于体系结构架构设计-架构真题(十五)

    基于体系结构开发设计 Architecture Base Software Design ABSD 是指构成体系结构的 组合驱动 ABSC方法是一个自项向下 递归细化的方法 软件系统的体系结构通过该方法细化 直到能产生 产品 功能需求和设计
  • IDEA导入MySQL的jdbc驱动出现“java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver”

    目录 一 一般的解决思路 1 JDBC下载链接 2 选择下载内容 并进行下载 3 将驱动导入java项目 二 依然导入驱动失败怎么办 当我们在idea中使用java操作mysql数据库时会出现 Exception in thread mai
  • 软件工程概述-架构师(三)

    软件工程概述 老版 软件开发生命周期 软件定义时期 包括 可行性研究和详细需求分析过程 任务是软件工程必需完成的目标 具有可行问题分析 可行性研究 需求分析等 软件开发时期 软件的 设计与实现 可分为概要设计 详细设计 编码 测试等 软件运
  • 新手小白学Java

    刚开始学习java的时候 可能是一头雾水 不知道从何学起 还有很多Java小白 在刚自学Java的时候玩命的学习 玩命的记住Java原理 天天早上五点起床背Java的一些英文词汇 然后遇见一些未知的困难 让自己打到癫狂状态 逐渐迷失自我放弃
  • SpringBoot 优雅停止服务的几种方法

    一 准备工作 1 1 准备一个项目 随便创建一个Spring Boot项目 这里使用的是截止到2020年5月 最新的版本 2 2 7 RELEASE 1 2 创建一个bean 我们创建一个Bean 有一个销毁的方法 Componentpub
  • [杂谈随感-4]:架构师应具备的技能以及架构师的价值等级

    目录 前言 第1章 什么是架构 第2章 架构师初识 2 1 什么是架构师 2 2 架构师的分类 2 3 架构师的关注点 第3章 架构师的能力要求 1 技术能力 业务相关 2 架构能力 计算机相关 3 沟通能力 第4章 架构师的价值与价值等级
  • 一文看懂Linux内核!Linux内核架构和工作原理详解

    linux内核相关视频解析 5个方面分析linux内核架构 让你对内核不再陌生 90分钟了解Linux内存架构 numa的优势 slab的实现 vmalloc的原理 手把手带你实现一个Linux内核文件系统 简介 作用是将应用层序的请求传递
  • 专访京东孙海波:大牛架构师养成记及电商供应链中区块链技术的应用

    编者按 每个人的成长曲线不同 有的人在研究生之时就已有相当知名的产品和框架 从而在接下来的工作中一路顺风顺水 有的人缺需要经历一个又一个的坑才能成长 不管是前者的聪明高效 还是后者的笨鸟先飞 他们都是在迈着脚步不断地向前 不妨 我们停下脚步
  • java架构师进阶之路

    Java架构师 应该算是一些Java程序员们的一个职业目标了吧 很多码农码了五六年的代码也没能成为架构师 那成为Java架构师要掌握哪些技术呢 总体来说呢 有两方面 一个是基础技术 另一个就是组织能力和提出解决方案能力了 如果你是想成为Ja
  • CNCF X ACE KubeMeet 云原生应用管理专场·上海站来啦!

    简介 10月16日上海站 KubeMeet 将以 云原生应用管理 为主题 围绕 KubeVela 和 OpenKruise 两个项目的技术分享和企业实践展开 帮助开发者更好的应对云原生应用管理痛点 伴随着 Kubernetes 生态逐步完善
  • 怎样才能从Java初级程序员成长为一名合格的架构师?

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师 或者说一名合格的架构师应该有怎样的技术知识体系 这不仅仅是一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题 下面 我来详细回答这些问题 希望这篇文章
  • 缓存案例-架构真题(二十二)

    试题一 某大型电商平台建立一个B2B商店系统 并在全国建设了仓储中心 但是在运营过程中 发现很多跨仓储中心调货 延误运送 为此建立全国仓储系统 通过对订单的分析和挖掘 并通过大数据分析预测各类配置 降低成本 当用户通过B2B商店下单 会通过
  • 字节一面:HTTPS 会加密 URL 吗?

    有朋友在面试字节 被问到这个问题 HTTPS 会加密 URL 吗 答案是 会加密的 因为 URL 的信息都是保存在 HTTP Header 中的 而 HTTPS 是会对 HTTP Header HTTP Body 整个加密的 所以 URL
  • 从事Java三年多,去应聘16k最后没被录用,细节如下……

    前言 今天小编和大家分享一位以前面试的一位应聘者 工作4年26岁 统招本科 以下就是他的简历和面试情况 基本情况 专业技能 1 熟悉Sping了解SpringMVC SpringBoot Mybatis等框架 了解SpringCloud微服
  • Java技术栈(跳槽,面试必备)

    Java技术栈 来到北京后 感觉氛围有点浮躁 人员流动性很大 很少有人能沉下心学习 所以最近打算把整理过的知识点拿出来给大家分享下 基础扎实了 无论是工作还是跳槽都很有用 跳槽前将知识点整理成word打印出来 然后背其中的知识点 保证你能面
  • 【架构】从零开始搭建创业公司后台技术栈

    说到后台技术栈 脑海中是不是浮现的是这样一幅图 有点眼晕 以下只是我们会用到的一些语言的合集 而且只是语言层面的一部分 就整个后台技术栈来说 这只是一个开始 从语言开始 还有很多很多的内容 今天要说的后台是大后台的概念 放在服务器上的东西都
  • 软件系统工具-架构师真题(六)

    不属于可修改性考虑的内容 2016 可维护性 可扩展性 结构重构 可变性 答案 D 解析 可修改性指快速较高的性能价格进行系统优化 包括可维护性 可扩展性 结构重组和可移植性四个方面 软件系统工具中 软件评价工具属于 逆向工程工具 开发信息
  • 解决redis缓存雪崩

    目录 一 什么是缓存雪崩 二 解决缓存雪崩 一 什么是缓存雪崩 1 同一时间大量的key同时失效或者redis宕机 大量请求直接访问数据库 二 解决缓存雪崩 1 如果是同一时间大量key失效 可以给不同的key的ttl添加随机值 2 如果是
  • [深入研究4G/5G/6G专题-59]: 以太网交换平台软件如何升级成基站平台软件

    前言 本文从全局的视角阐述把一个通用的Linux平台软件升级成基站平台软件 一 基站的硬件 1 1 设备硬件 1 2 SOC芯片
  • 架构师之道 秒杀系统优化思路

    本文曾在 架构师之路 上发布过 近期支援Qcon AS大会 在微信群里分享了该话题 故对原文进行重新整理与发布 一 秒杀业务为什么难做 1 im系统 例如qq或者微博 每个人都读自己的数据 好友列表 群列表 个人信息 2 微博系统 每个人读

随机推荐

  • An Introduction to GCC

    对于GCC特别的不熟练 只会google baidu来使用 最近想看看到底gcc如何使用 于是找到了这本书 写的很浅显易懂 而且框架写明白了 真的不错 1 gcc c 是编译的命令 编译与链接是不同的 gcc 不加任何选项时就是编译 链接了
  • VirtualBox安装Ubuntu教程(超详细)

    下载ubuntu系统镜像 准备虚拟机挂载镜像用 选择新建 创建虚拟机 选择系统版本 因为要安装ubuntu 所以选择ubuntu 设置虚拟机ubuntu的内存 创建虚拟机的磁盘 分配20G空间 动态分配是逐渐占用物理机硬盘空间
  • 软件外包公司到底干啥的?要不要去外包公司?

    一 什么是外包 软件外包分为 人力外包和项目外包两个方向 1 劳务派遣 指的是把员工外派到对应的用工企业打 短工 比如很多工程师虽然签约了中软国际 东软 文思海辉 软通动力 润和等软件公司 但实际工作地点是在华为 接受华为员相关负责人的工作
  • Spring系列之缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)

    本文主要详解spring中缓存的使用 背景 缓存大家都有了解过吧 主要用来提升系统查询速度 比如电商中商品详情信息 这些信息通常不会经常变动但是会高频访问 我们可以将这些信息从db中拿出来放在缓存中 比如redis中 本地内存中 当获取的时
  • Idea Maven项目打包工其他项目进行外部引用

    1 说明 我们在日常项目开发中经常会有许多公共的模块 如统一的父工程 工具类模块 中间实体类 DTO VO 如果我们针对每个子项目都单独的创建一套工具类 多个子项目会存在很多重复的工具类 中间实体类代码 因此 我们可以将这些公共模块统一打成
  • 关于STM32串口接收中断中只能接收一个字节()

    最近调试STM32的串口接收时发现例程中只能接收一个字节 例程如下 1 初始化串口1 2 void uart init u32 bound 3 GPIO端口设置 4 GPIO InitTypeDef GPIO InitStructure 5
  • BAPI_ACC_DOCUMENT_POST 简单理解过账BAPI使用,创建会计凭证

    业务场景 创建会计凭证BAPI 甲方是一家从事房屋租赁的公司 它的主营业务就是从各大租户手里收租子 月底了 小明发了工资美滋滋 钱到手没多久房东就催租子了 房租每月100 水电100 税费22 合计222 小明如约在手机APP上向房东支付了
  • Dynamics CRM 2015/2016/365 Web API:批处理任务

    Web API为我们提供的批量任务执行功能 我们可以在一个请求中混合多个不相干的创建查询请求 并且其还提供了事务功能 如果在事务中如果有脚本出现了错误 则其提供回滚功能 如下是批处理的请求报文 在报文里面我们需要设置批处理任务的编号 因为我
  • uniapp各种路由与页面跳转路径

    跳转有长度限制过长的时候用encodeURIComponent pages test test item encodeURIComponent JSON stringify item 1 保留当前B页面 跳转到应用内的某个页面 会计入栈中
  • 【毕业设计】深度学习行人重识别系统 - person reid

    文章目录 0 前言 1 技术背景 2 技术介绍 3 重识别技术实现 3 1 数据集 3 2 Person REID 3 2 1 算法原理 3 2 2 算法流程图 4 实现效果 5 部分代码 6 最后 0 前言 Hi 大家好 这里是丹成学长的
  • css强制换行和禁止换行

    强制换行 word break break all 只对英文起作用 以字母作为换行依据 word wrap break word 只对英文起作用 以单词作为换行依据 white space pre wrap 只对中文起作用 强制换行 禁止换
  • SpringBoot注解+AOP实现

    SpringBoot注解 AOP实现 Java Annotation注解的详解 Java注解是一种元数据 它可以用于在类 方法或其他代码结构中声明关于程序元素的信息和标记 在Java中 注解以 符号开头 在编译时或运行时由Java虚拟机 J
  • TEA、XTEA、XXTEA加密解密算法

    参考 TEA XTEA XXTEA加密解密算法 地址 https blog csdn net gsls200808 article details 48243019 其他相关博文链接 tea系列加密算法学习笔记 TEA和XxTEA跨平台加密
  • 【其他】资源整合

    偶然整理云盘 发现曾经收藏过一些比较不错的资源 正好分享一下 1 C语言教程 郝斌老师作为读书时候的启蒙老师 推荐一波 链接 https pan baidu com s 10NIZ3x4yPP4YP8bYmVENHg 密码 6jj1 2 U
  • Node的Buffer对象和fs模块

    一 Node的模块化管理 1 模块化 node应用程序由模块组成 遵循的是CommonJS模块规范 使用模块管理的好处是隔离模块的作用域 避免出现命名冲突 2 什么是CommonJS 是一套代码的规范 构建一个在浏览器之外的JavaScri
  • C/C++编程:仿函数

    概述 仿函数 也叫做函数对象 就实现意义而言 函数对象 比较贴切 一种具有函数特性的对象 就行为而言 仿函数 更贴切 这种东西可以像函数一样被调用 被调用者则以对象所定义的function call operator扮演函数的实质角色 仿函
  • &2 应用层 - 应用层协议原理

    应用层协议原理 一 网络应用程序体系结构 客户机 服务器 体系结构 纯P2P 体系结构 客户机 服务器与P2P的混合 二 进程通信 客户机和服务器进程 套接字 socket 进程与套接字关系 进程寻址 进程识别信息 两部分 用户代理 use
  • C++中的vector容器 模板类有两个参数

    std vector lt Eigen Matrix3d Eigen aligned allocatorEigen Matrix3d gt vector的声明如下 template
  • 记录用户上次看视频的进度,并且从记录的时间继续观看

    思路 因为视频多个 所以定义一个数组接收该用户已观看但是未观看完毕的字段 videoPlanArr 第一次进入获取本地储存的字段 videoPlanArr 如果没有获取到的话储存该视频id 有的话查询是否在数组中 未找到就把视频id添加进v
  • 数据库分库分表实战

    一 使用场景 当单个数据库实例达到瓶颈 例如连接数过多 处理能力受限 存储容量不足 磁盘IO达到瓶颈 内存不足 都需要对数据库进行分库分表 二 垂直切分 数据库表按列拆分 拆分后 数据库从一个数据列多的表变成了多个数据列少的表 数据垂直切分