MySQL分库分表方案及sharding-spher(1)

news2024/7/30 6:58:11

一、数据库瓶颈

不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。

1.1 IO瓶颈

第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表

第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 -> 分库

1.2 CPU瓶颈

第一种:SQL问题,如SQL中包含join,group by,order by,非索引字段条件查询等,增加CPU运算的操作 -> SQL优化,建立合适的索引,在业务Service层进行业务计算。

第二种:单表数据量太大,查询时扫描的行太多,SQL效率低,CPU率先出现瓶颈 -> 水平分表

二、分库分表

2.1 水平分库

  1. 概念:以字段为依据,按照一定策略(hash、range等),将一个中的数据拆分到多个中。
  2. 结果:
    • 每个结构都一样;
    • 每个数据都不一样,没有交集;
    • 所有并集是全量数据;
  3. 场景:系统绝对并发量上来了,分表难以根本上解决问题,并且还没有明显的业务归属来垂直分库。
  4. 分析:库多了,io和cpu的压力自然可以成倍缓解。

2.2 水平分表

  1. 概念:以字段为依据,按照一定策略(hash、range等),将一个中的数据拆分到多个中。
  2. 结果:
    • 每个结构都一样;
    • 每个数据都不一样,没有交集;
    • 所有并集是全量数据;
  3. 场景:系统绝对并发量并没有上来,只是单表的数据量太多,影响了SQL效率,加重了CPU负担,以至于成为瓶颈。
  4. 分析:表的数据量少了,单次SQL执行效率高,自然减轻了CPU的负担。

2.3 垂直分库

  1. 概念:以为依据,按照业务归属不同,将不同的拆分到不同的中。
  2. 结果:
    • 每个结构都不一样;
    • 每个数据也不一样,没有交集;
    • 所有并集是全量数据;
  3. 场景:系统绝对并发量上来了,并且可以抽象出单独的业务模块。
  4. 分析:到这一步,基本上就可以服务化了。例如,随着业务的发展一些公用的配置表、字典表等越来越多,这时可以将这些表拆到单独的库中,甚至可以服务化。再有,随着业务的发展孵化出了一套业务模式,这时可以将相关的表拆到单独的库中,甚至可以服务化。

2.4 垂直分表

  1. 概念:以字段为依据,按照字段的活跃性,将中字段拆到不同的(主表和扩展表)中。
  2. 结果:
    • 每个结构都不一样;
    • 每个数据也不一样,一般来说,每个表的字段至少有一列交集,一般是主键,用于关联数据;
    • 所有并集是全量数据;
  3. 场景:系统绝对并发量并没有上来,表的记录并不多,但是字段多,并且热点数据和非热点数据在一起,单行数据所需的存储空间较大。以至于数据库缓存的数据行减少,查询时会去读磁盘数据产生大量的随机读IO,产生IO瓶颈。
  4. 分析:可以用列表页和详情页来帮助理解。垂直分表的拆分原则是将热点数据(可能会冗余经常一起查询的数据)放在一起作为主表,非热点数据放在一起作为扩展表。这样更多的热点数据就能被缓存下来,进而减少了随机读IO。拆了之后,要想获得全部数据就需要关联两个表来取数据。但记住,千万别用join,因为join不仅会增加CPU负担并且会讲两个表耦合在一起(必须在一个数据库实例上)。关联数据,应该在业务Service层做文章,分别获取主表和扩展表数据然后用关联字段关联得到全部数据。

三、分库分表工具

  1. sharding-sphere:jar,前身是sharding-jdbc;
  2. TDDL:jar,Taobao Distribute Data Layer;
  3. Mycat:中间件。

注:工具的利弊,请自行调研,官网和社区优先。

四、分库分表步骤

根据容量(当前容量和增长量)评估分库或分表个数 -> 选key(均匀)-> 分表规则(hash或range等)-> 执行(一般双写)-> 扩容问题(尽量减少数据的移动)。

五、分库分表问题

5.1 非partition key的查询问题

基于水平分库分表,拆分策略为常用的hash法。

5.1.1 端上除了partition key只有一个非partition key作为条件查询

    • 映射法

    • 基因法

注:写入时,基因法生成user_id,如图。关于xbit基因,例如要分8张表,23=8,故x取3,即3bit基因。根据user_id查询时可直接取模路由到对应的分库或分表。根据user_name查询时,先通过user_name_code生成函数生成user_name_code再对其取模路由到对应的分库或分表。id生成常用snowflake算法

5.1.2端上除了partition key不止一个非partition key作为条件查询

    • 映射法

    • 冗余法

注:按照order_id或buyer_id查询时路由到db_o_buyer库中,按照seller_id查询时路由到db_o_seller库中。感觉有点本末倒置!有其他好的办法吗?改变技术栈呢?

  1. 后台除了partition key还有各种非partition key组合条件查询
    • NoSQL

    • 冗余法

5.1.2 非partition key跨库跨表分页查询问题

基于水平分库分表,拆分策略为常用的hash法。注:用NoSQL法解决(ES等)。

5.2 扩容问题

基于水平分库分表,拆分策略为常用的hash法

5.2.1 水平扩容库(升级从库法)

注:扩容是成倍的。

5.2.2 水平扩容表(双写迁移法)


第一步:(同步双写)修改应用配置和代码,加上双写,部署;
第二步:(同步双写)将老库中的老数据复制到新库中;
第三步:(同步双写)以老库为准校对新库中的老数据;
第四步:(同步双写)修改应用配置和代码,去掉双写,部署;

注:双写是通用方案。

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

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

相关文章

史上最完整的Spring Bean的生命周期

Bean的生命周期总 Spring Bean 的生命周期 Spring中的bean的生命周期主要包含四个阶段:实例化Bean–> Bean属性填充–>初始化Bean—>销毁Bean 加载Bean定义 通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中创建Bean对象…

超级厉害的复盘能力,让你2023年下半年扬帆起航

不知不觉2023年的上半年已经过去了,上半年你过得怎么样?树立得目标有没有完成呢? 复盘,这个概念现在可谓是无人不知,无人不晓。好得复盘可以让我们避免犯错,让我们更加快速得接近我们得目标。 今天就和大…

不是说00后已经躺平了吗,怎么还是这么卷.....

都说00后已经躺平了,但是有一说一,该卷的还是卷。 前段时间我们部门就来了个00后,工作都还没两年,跳到我们公司起薪20K,都快接近我了。 后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。最近和…

App上架流程(推荐)

准备 • 开发者账号 • 完工的项目 上架步骤 • 一、创建App ID • 二、创建证书请求文件 (CSR文件) • 三、创建发布证书 (CER) • 四、创建Provisioning Profiles配置文件 (PP文件) • 五、在App Stor…

ctfshow 每周大挑战 RCE极限挑战3

目录 题目源码1 跑一下正则2 分析解题用什么payload3 构造payload如何获取字母N构造出_POST及其他拼接内容POST传参 4 完整解题payload 题目源码 1 跑一下正则 <?php for($i32;$i<127;$i){if (!preg_match("/[a-zA-Z2-9!#%^&*:{}\-<\?>\"|~\\\\]/…

接口测试工具Postman接口测试图文教程

目录 一、前言 二、Postman安装和使用 三、请求方式 四、资金记录接口实例演示 一、前言 在前后端分离开发时&#xff0c;后端工作人员完成系统接口开发后&#xff0c;需要与前端人员对接&#xff0c;测试调试接口&#xff0c;验证接口的正确性可用性。而这要求前端开发进…

公网使用 SSH远程连接安卓手机 Termux -Android 手机服务器

文章目录 1.安装ssh2.安装cpolar内网穿透3.远程ssh连接配置4.公网远程连接5.固定远程连接地址 转载自cpolar极点云的文章&#xff1a;公网SSH远程连接Termux – 电脑使用安卓Termux 「无需公网IP」 使用安卓机跑东西的时候&#xff0c;屏幕太小&#xff0c;有时候操作不习惯。不…

增强型本地文件搜索工具:Find Any File

Find Any File是mac上一款增强型本地文件搜索工具&#xff0c;可以让你在本地磁盘上搜索、查找任何文件&#xff0c;包括本地磁盘的名称、 创建或修改日期、 大小或类型和创建者代码等。小编现为大家提供最新Find Any File Mac破解版&#xff0c;欢迎需要的朋友下载使用。 Find…

I/O 端口

概述 I/O 端口的主要功能特性&#xff1a; ⚫ GPIO 引脚最高耐5.5V 电压 ⚫ GPIO 数字输入具有施密特特性 ⚫ 部分GPIO 输入支持模拟滤波 ⚫ 部分GPIO 输入支持数字滤波 ⚫ GPIO 可配置为上拉、开漏输出 ⚫ 低功耗模式下保持状态 PAD 结构 GPIO&#xff0c;输入输出使能&#…

sqlserver获取每天最接近整点的一条数据

思路&#xff1a;要取到整点数据&#xff0c;首先想到了是利用数据里面的时间整点部分进行分组&#xff0c;通过时间正序&#xff0c;取到分钟第一条数据就行了 1&#xff0c;简单的group by 做法就比较复杂了&#xff0c;复杂的分组做法都采用了partition by 分区函数处理&a…

开源2.4g遥控小飞机控制板

原理图 主控 6轴IMU 2.4G通信 电机驱动 特性 主控采用STM32F103CBT6&#xff0c;外设资源比较丰富&#xff0c;国产替代也很容易。红绿双色LED&#xff0c;GPIO控制&#xff0c;可用来提示程序运行状态。1个复位按键&#xff0c;1个用户按键可以用作输入。SWD&UART调试接…

学校机房如何监控?手把手教你操作

随着现代科学技术的不断发展&#xff0c;特别是现代建筑技术、现代通讯技术、现代控制技术、现代仪器仪表技术和现代计算机技术的不断更新、发展、完善和整合&#xff0c;计算机机房智能化的趋势日益明显。 学校机房常见4大安全隐患 01.电气安全隐患 电源电流异常、市电环境不…

常见的DNS攻击类型与应对措施盘点(中科三方)

DNS解析是互联网中一项非常重要的功能&#xff0c;是用户访问网站的关键环节&#xff0c;我们日常工作生活使用网络都伴随着大量的DNS服务做支撑。DNS将用户容易记忆输入的域名指向可由计算机直接识别的IP地址&#xff0c;是确保用户通过域名访问网站&#xff0c;维持网络空间正…

电脑一直自检无法开机怎么办?

电脑一直自检无法开机是指电脑自检程序一直处于检查中无法进入系统&#xff0c;从而导致电脑无法开机。在了解电脑一直自检无法开机之前&#xff0c;我们需要明白电脑自检程序检测的是什么。 电脑自检也称加电自检(POST&#xff0c;Power On Self Test)&#xff0c;电脑在接通电…

DVWA靶场的安装-超详细

一、安装phpstudy环境 phpstudy下载地址&#xff1b;小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; 二、下载DVWA包 VWA官网 http://www.dvwa.co.uk/ 下载DWVA压缩包DVWA-master.zip&#xff0c;很小只有1M多 三、安装DVWA 1、解压DVWA压缩到phpstudy/www&…

国产IC芯片自动化测试系统ATECLOUD,助力芯片测试自动化

IC芯片测试成本是影响制造和加工成本的重要因素。在某些情况下&#xff0c;测试成本可能占到器件总成本的40%左右。为了降低测试成本&#xff0c;可以优化测试程序并研发多工位测试。同时&#xff0c;必须平衡良品率和测试时间&#xff0c;以实现最佳的成本控制。本篇文章纳米软…

【JavaSE】Java基础语法(三十):HashMap与TreeMap

文章目录 1. HashMap1.1 HashMap集合概述和特点1.2 HashMap集合应用案例 2. TreeMap2.1 TreeMap集合概述和特点2.2 TreeMap集合应用案例一2.3 TreeMap集合应用案例二 3. 总结 1. HashMap 1.1 HashMap集合概述和特点 HashMap底层是哈希表结构的依赖hashCode方法和equals方法保…

Xline 持久化存储设计与实现

01、引言 在 Xline 早期的原型阶段&#xff0c;我们采用了基于内存的存储来实现数据的持久化。这虽然简化了 Xline 原型设计的复杂度&#xff0c;提高了项目的开发和迭代速度&#xff0c;但带来的影响也是显著的&#xff1a;由于数据都存储在内存当中&#xff0c;因此一旦当进…

TOOM舆情监控黑科技:AI破解人心,预测社会未来!

近年来&#xff0c;随着人工智能技术的快速发展&#xff0c;舆情监控正逐渐进入一个全新的时代。利用人工智能技术&#xff0c;舆情监控能够洞察人心&#xff0c;预测社会未来的走向&#xff0c;这项黑科技引发了广泛的关注和探讨。 舆情监控是通过对社会舆论的搜集、分析和评…

盛元广通生物样本库管理系统

生物样本库管理系统&#xff0c;作为一种高效、智能化的信息管理工具&#xff0c;在现代生物研究中扮演着重要的角色。随着科学技术的不断进步&#xff0c;生物样本的采集、保存和管理变得越来越重要&#xff0c;而盛元广通生物样本库管理系统正是为了解决这一问题而应运而生的…