iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL-如何分库分表?一看就懂
  • 701
分享到

MySQL-如何分库分表?一看就懂

mysqljava 2023-09-04 15:09:33 701人浏览 独家记忆
摘要

一、为什么要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从),主库容量肯

一、为什么要分库分表

如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从),主库容量肯定无法满足这么高的Tps,业务越来越大,单表数据超出了数据库支持的容量,持久化磁盘io,传统的数据库性能瓶颈,产品经理业务·必须做,改变程序,数据库刀子切分优化。数据库连接数不够需要分库,表的数据量大,优化后查询性能还是很低,需要分。

二、什么是分库分表

分库分表方案是对关系型数据库数据存储和访问机制的一种补充。
分库:将一个库的数据拆分到多个相同的库中,访问的时候访问一个库
分表:把一个表的数据放到多个表中,操作对应的某个表就行

三、分库分表的几种方式

1

1.垂直拆分

(1) 数据库垂直拆分
2根据业务拆分,如图,电商系统,拆分成订单库,会员库,商品库

(2)表垂直拆分
3
根据业务去拆分表,如图,把user表拆分成user_base表和user_info表,use_base负责存储登录,user_info负责存储基本用户信息

垂直拆分特点
1.每个库(表)的结构都不一样
2.每个库(表)的数据至少一列一样
3.每个库(表)的并集是全量数据

垂直拆分优缺点

优点:
1.拆分后业务清晰(专库专用按业务拆分)
2.数据维护简单,按业务不同,业务放到不同机器上

缺点:
1.如果单表的数据量,写读压力大
2.受某种业务决定,或者被限制,也就是说一个业务往往会影响到数据库的瓶颈(性能问题,如双十一抢购)
3.部分业务无法关联join,只能通过java程序接口去调用,提高了开发复杂度

2. 水平拆分

(1) 数据库水平拆分
4
如图,按会员库拆分,拆分成会员1库,会员2库,以userId拆分,userId尾号0-5为1库
6-9为2库,还有其他方式,进行取模,偶数放到1库,奇数放到2库

(2) 表水平拆分
5
如图把users表拆分成users1表和users2表,以userId拆分,进行取模,偶数放到users1表,奇数放到users2表

水平拆分的其他方式

  1. range来分,每个库一段连续的数据,这个一般是按比如时间范围来的,但是这种一般较少用,因为很容易产生热点问题,大量的流量都打在最新的数据上了,优点:扩容的时候,就很容易,因为你只要预备好,给每个月都准备一个库就可以了,到了一个新的月份的时候,自然而然,就会写新的库了 缺点:大部分的 请求,都是访问最新的数据。实际生产用range,要看场景,你的用户不是仅仅访问最新的数据,而是均匀的访问现在的数据以及历史的数据
  2. hash分发,优点:可以平均分配每个库的数据量和请求压力 缺点:扩容起来比较麻烦,会有一个数据迁移的这么一个过程

水平拆分特点
1.每个库(表)的结构都一样
2.每个库(表)的数据都不一样
3.每个库(表)的并集是全量数据

水平拆分优缺点

优点:
1.单库/单表的数据保持在一定量(减少),有助于性能提高
2.提高了系统的稳定性和负载能力
3.拆分表的结构相同,程序改造较少。

缺点:
1.数据的扩容很有难度维护量大
2.拆分规则很难抽象出来
3.分片事务的一致性问题部分业务无法关联join,只能通过java程序接口去调用

四、分库分表带来的问题

  1. 分布式事务
  2. 跨库join查询
  3. 分布式全局唯一id
  4. 开发成本 对程序员要求高

五、分库分表技术如何选型

分库分表的开源框架
jdbc 直连层:shardingsphere、tddl
proxy 代理层:mycat,Mysql-proxy(360)

jdbc直连层
6
jdbc直连层又叫jdbc应用层,是因为所有分片规则,所有分片逻辑,包括处理分布式事务
所有这些问题它都是在应用层,所有项目都是由war包构成的,所有分片都写成了jar包,放到了war包里面,java需要虚拟机去运行的,虚拟机运行的时候就会把war包里面的字节文件进行classLoder加载到JVM内存中,所有分片逻辑都是基于内存方进行操作的

proxy代理层
7
如图,proxy代理层,所有分片规则,所有分片逻辑,包括处理分布式事务都在mycat写好了,所有分片逻辑都是基于mycat方进行操作

jdbc直连层和proxy代理层优缺点

  • jdbc直连层性能高,只支持java语言,支持跨数据库
  • proxy代理层开发成本低,支持跨语言,不支持跨数据库

来源地址:https://blog.csdn.net/ahuangqingfeng/article/details/124161107

您可能感兴趣的文档:

--结束END--

本文标题: MySQL-如何分库分表?一看就懂

本文链接: https://www.lsjlt.com/news/393807.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL-如何分库分表?一看就懂
    一、为什么要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从),主库容量肯...
    99+
    2023-09-04
    mysql java
  • MySQL 分库分表原理和详细实现过程,看完就懂了
    1. 什么是分库分表 MySQL 分库分表是指将一张表的数据分散到多个库或多个表中,从而减轻单个数据库或表的压力,达到水平扩展的目的。 2. 分库分表的优缺点 优点 提高系统的可用性和稳定性提高系统的性能和吞吐量扩展能力强,可根据业务需求随...
    99+
    2023-09-01
    mysql 数据库 java
  • Python正则表达式(一看就懂)
    目录 哈喽O(∩_∩)O😄 什么是正则表达式(⊙_⊙) 简单说,正则表达式是… 正则表达式怎么用❓ sreach的用法🍊 匹配连续的多个数值🍉  字符"+"重复前面一个匹配字符一次或者多次&...
    99+
    2023-08-31
    python 正则表达式
  • 一文读懂MySQL 表分区
    目录1. 什么是表分区2. 分区的两种方式2.1 水平切分2.2 垂直切分3. 为什么需要表分区4. 分区实践4.1 RANGE 分区4.2 LIST 分区4.3 HASH 分区4....
    99+
    2024-04-02
  • MySQL如何分库分表
    1. 我们为什么需要分库分表 在分库分表之前,就需要考虑为什么需要拆分。我们做一件事,肯定是有充分理由的。所以得想好分库分表的理由是什么。我们现在就从两个维度去思考它,为什么要分库?为什么要分表? 1.1 为什么要分库 如果业务量剧增,数...
    99+
    2023-08-17
    mysql 数据库
  • 一看就懂的正则表达式教程
    目录案例引入正则表达式命名规范结构组成用途场景Java中的正则校验正则元字符正则:普通字符正则:\d 正则:\D正则:\w正则:\W 正则:\s正则:[^abc]...
    99+
    2024-04-02
  • mysql分库分表如何实现
    MySQL分库分表可以通过以下几个步骤实现: 水平分库:将原始的单个数据库分成多个独立的数据库。每个数据库可以独立运行在不同的服务...
    99+
    2023-10-27
    mysql
  • 如何在mysql中切分分库分表
    本篇文章为大家展示了如何在mysql中切分分库分表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、水平切分水平切分又称Sharding,是将同一表中的记录分割成多个结构相同的表中。Sharding...
    99+
    2023-06-15
  • MySQL中如何实现分库分表
    本篇文章为大家展示了MySQL中如何实现分库分表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、    背景介绍1.大数据...
    99+
    2024-04-02
  • MySQL分表分库如何进行数据切分
    这篇文章主要讲解了“MySQL分表分库如何进行数据切分”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL分表分库如何进行数据切分”吧!数据库分布式核心...
    99+
    2024-04-02
  • MySQL分库分表详情
    一、业务场景介绍 假设目前有一个电商系统使用的是MySQL,要设计大数据量存储、高并发、高性能可扩展的方案,数据库中有用户表。用户会非常多,并且要实现高扩展性,你会怎么去设计? OK...
    99+
    2024-04-02
  • MySQL分库分表实例分析
    这篇“MySQL分库分表实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL分库分表实例分析”文章吧。一、为什么...
    99+
    2023-06-30
  • mysql如何分表
    这篇文章主要介绍mysql如何分表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!分表1,做mysql集群。例如:利用mysql cluster ,mysql proxy,mysql ...
    99+
    2024-04-02
  • 一篇文章看懂MySQL主从复制与读写分离
    目录引言一、MySQL主从复制1、MySQL的复制类型2、MySQL主从复制的原理3、MySQL主从复制延迟二、MySQL读写分离1、常见的 MySQL 读写分离分2、MySQL 读...
    99+
    2024-04-02
  • MySQL-分库分表详解(七)
    ♥️作者:小刘在C站 ♥️个人主页: 小刘主页  ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术 ♥️小刘私信可以随便问,只要会...
    99+
    2023-09-02
    mysql 数据库
  • 一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
    这一篇笔记我们简述一下 MySQL的B+Tree索引到底是咋回事? 聚簇索引索引到底是如何长高的。 一点一点看,其实蛮好理解的。 如果你看过了我之前的笔记,你肯定...
    99+
    2024-04-02
  • Java如何实现分库分表
    一、为啥要分库分表 在大型互联网系统中,大部分都会选择mysql作为业务数据存储。一般来说,mysql单表行数超过500万行或者单表容量超过2GB,查询效率就会随着数据量的增长而下降。这个时候,就需要对表进行拆分。 那么应该怎么拆分呢? 通...
    99+
    2023-08-31
    java 开发语言
  • 一文搞懂MySQL XA如何实现分布式事务
    目录前言XA 协议如何通过MySQL XA实现分布式事务前言 MySQL支持单机事务的良好表现毋庸置疑,那么在分布式系统中,涉及多个节点,MySQL又是如何实现分布式事务的呢?比如开...
    99+
    2024-04-02
  • PHP如何实现MySQL数据库分表
    本篇内容介绍了“PHP如何实现MySQL数据库分表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、MySQL分表的概念MySQL分表是将一...
    99+
    2023-07-06
  • 搞懂Java分布式锁实现看这篇文章就对了
     前言:随着微处理机技术的发展,人们只需花几百美元就能买到一个CPU芯片,这个芯片每秒钟执行的指令比80年代最大的大型机的处理机每秒钟所执行的指令还多。如果你愿意付出两倍的价钱,将得到同样的CPU,但它却以更高的时钟速率运行。因此...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作