返回顶部
首页 > 资讯 > 数据库 >MySQL分库分表总结讲解
  • 244
分享到

MySQL分库分表总结讲解

2024-04-02 19:04:59 244人浏览 薄情痞子
摘要

项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询变慢,而且由于表的锁机制导致应用操作也受到严重影响,出现了数据库性能瓶颈。 当出现这种情况时,我们可以考虑分库分表,即将单个数据

项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询变慢,而且由于表的机制导致应用操作也受到严重影响,出现了数据库性能瓶颈。

当出现这种情况时,我们可以考虑分库分表,即将单个数据库或表进行拆分,拆分成多个库和多个数据表,然后用户访问的时候,根据一定的算法与逻辑,让用户访问不同的库、不同的表,这样数据分散到多个数据表中,减少了单个数据表的访问压力。提升了数据库访问性能。

下面是对项目中分库分表的一些总结

单库单表

单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。

单库多表

随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从而影响整个DB的性能。如果使用Mysql, 还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有的读写操作只能等待。

可以通过某种方式将user进行水平的切分,产生两个表结构完全一样的user_0000,user_0001等表,user_0000 + user_0001 + …的数据刚好是一份完整的数据。

多库多表

随着数据量增加也许单台DB的存储空间不够,随着查询量的增加单台数据库服务器已经没办法支撑。这个时候可以再对数据库进行水平区分。

分库分表规则

设计表的时候需要确定此表按照什么样的规则进行分库分表。例如,当有新用户时,程序得确定将此用户信息添加到哪个表中;同理,当登录的时候我们得通过用户的账号找到数据库中对应的记录,所有的这些都需要按照某一规则进行。

路由

通过分库分表规则查找到对应的表和库的过程。如分库分表的规则是user_id mod 4的方式,当用户新注册了一个账号,账号id的123,我们可以通过id mod 4的方式确定此账号应该保存到User_0003表中。当用户123登录的时候,我们通过123 mod 4后确定记录在User_0003中。

分库分表产生的问题,及注意事项

1.分库分表维度的问题

假如用户购买了商品,需要将交易记录保存取来,如果按照用户的纬度分表,则每个用户的交易记录都保存在同一表中,所以很快很方便的查找到某用户的购买情况,但是某商品被购买的情况则很有可能分布在多张表中,查找起来比较麻烦。反之,按照商品维度分表,可以很方便的查找到此商品的购买情况,但要查找到买人的交易记录比较麻烦。

所以常见的解决方式有:

a.通过扫表的方式解决,此方法基本不可能,效率太低了。

b.记录两份数据,一份按照用户纬度分表,一份按照商品维度分表。

c.通过搜索引擎解决,但如果实时性要求很高,又得关系到实时搜索。

2.联合查询的问题

联合查询基本不可能,因为关联的表有可能不在同一数据库中。

3.避免跨库事务

避免在一个事务中修改db0中的表的时候同时修改db1中的表,一个是操作起来更复杂,效率也会有一定影响。

4.尽量把同一组数据放到同一DB服务器上

例如将卖家a的商品和交易信息都放到db0中,当db1挂了的时候,卖家a相关的东西可以正常使用。也就是说避免数据库中的数据依赖另一数据库中的数据。

一主多备

在实际的应用中,绝大部分情况都是读远大于写。Mysql提供了读写分离的机制,所有的写操作都必须对应到Master,读操作可以在Master和Slave机器上进行,Slave与Master的结构完全一样,一个Master可以有多个Slave,甚至Slave下还可以挂Slave,通过此方式可以有效的提高DB集群的QPS.                                                      

所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

此外,可以看出Master是集群的瓶颈,当写操作过多,会严重影响到Master的稳定性,如果Master挂掉,整个集群都将不能正常工作。

所以

1.当读压力很大的时候,可以考虑添加Slave机器的分式解决,但是当Slave机器达到一定的数量就得考虑分库了。

2.当写压力很大的时候,就必须得进行分库操作。

MySQL使用为什么要分库分表

可以用说用到MySQL的地方,只要数据量一大, 马上就会遇到一个问题,要分库分表.

这里引用一个问题为什么要分库分表呢?MySQL处理不了大的表吗?

其实是可以处理的大表的.我所经历的项目中单表物理上文件大小在80G多,单表记录数在5亿以上,而且这个表属于一个非常核用的表:朋友关系表.

但这种方式可以说不是一个最佳方式. 因为面临文件系统如Ext3文件系统对大于大文件处理上也有许多问题. 这个层面可以用xfs文件系统进行替换.但MySQL单表太大后有一个问题是不好解决: 表结构调整相关的操作基本不在可能.所以大项在使用中都会面监着分库分表的应用.

从Innodb本身来讲数据文件的Btree上只有两个锁, 叶子节点锁和子节点锁,可以想而知道,当发生页拆分或是添加新叶时都会造成表里不能写入数据. 所以分库分表还就是一个比较好的选择了.

那么分库分表多少合适呢?

测试在单表1000万条记录以下,写入读取性能是比较好的. 这样在留点buffer,那么单表全是数据字型的保持在800万条记录以下, 有字符型的单表保持在500万以下.

如果按 100库100表来规划,如用户业务:

500万*100*100 = 50000000万 = 5000亿记录.

心里有一个数了,按业务做规划还是比较容易的.

真题

设定网站用户数量在千万级,但是活跃用户数量只有1%,如何通过优化数据库提高活跃用户访问速度?

答:

可以使用MySQL的分区,把活跃用户分在一个区,不活跃用户分在另外一个区,本身活跃用户区数据量比较少,因此可以提高活跃用户访问速度。

还可以水平分表,把活跃用户分在一张表,不活跃用户分在另一张表,可以提高活跃用户访问速度。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对编程网的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文档:

--结束END--

本文标题: MySQL分库分表总结讲解

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

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

猜你喜欢
  • MySQL分库分表总结讲解
    项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询变慢,而且由于表的锁机制导致应用操作也受到严重影响,出现了数据库性能瓶颈。 当出现这种情况时,我们可以考虑分库分表,即将单个数据...
    99+
    2024-04-02
  • 大表分库分表总结
    本篇内容介绍了“大表分库分表总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.前言为什么需要做分库分表...
    99+
    2024-04-02
  • 转:Mysql 分区 分表相关总结
    拆分策略选择 其实拆分很灵活,有的是垂直切分,将一个库拆成两个或多个,将有相关联的表放在一个库里。有的是水平切分将数据量大的表按照一定逻辑进行拆分。个人感觉垂直切分的相对来说缓解了IO的瓶颈,而水...
    99+
    2024-04-02
  • mysql表分区实验总结
    草稿丢失,发表得不完整,稍后重新整理mysql表分区技术能有效解决水平拆分和垂直拆分的不足,可操作性和效率都更优。以下是一些实验总结。InnoDB引擎需先在配置文件中设置: innodb_file...
    99+
    2024-04-02
  • MySQL常用分库分表方案汇总
    目录一、数据库瓶颈二、分库分表2、水平分表3、垂直分库4、垂直分表三、分库分表工具四、分库分表步骤五、分库分表问题 1、非partition key的查询问题2、非partition...
    99+
    2024-04-02
  • MySQL-分库分表详解(七)
    ♥️作者:小刘在C站 ♥️个人主页: 小刘主页  ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术 ♥️小刘私信可以随便问,只要会...
    99+
    2023-09-02
    mysql 数据库
  • mysql表的四种分区方式总结
    目录1、什么是表分区?2、表分区与分表的区别3、表分区有什么好处?4、分区表的限制因素5、如何判断当前MySQL是否支持分区? 6、MySQL支持的分区类型有哪些?6.1、...
    99+
    2024-04-02
  • mysql分库分表
    一、垂直拆分 1、垂直分库:在分布式系统开发中,基本都是按照模块划分,每个业务模块建立一个数据库  特点:业务区分度高,方便维护管理;各个模块独立维护,可以分摊系统的维护成本,提高可用性。  2、垂直分表:单张宽表,根据实际业务场景,...
    99+
    2015-03-08
    mysql分库分表
  • Mysql分库分表全面理解
    引言 微服务、分布式大行其道的当下,中、高级Java工程师面试题中高并发、大数据量、分库分表等已经成 了面试的高频词汇,这些知识不了解面试通过率不会太高。你可以不会用,但你不能不知道,就是这么 一种现状。技术名词大多晦涩难懂,不要死...
    99+
    2019-05-21
    Mysql分库分表全面理解
  • Mysql数据库分库分表全面瓦解
    目录1 为什么要分库分表2 垂直拆分(Scale Up 纵向扩展)2.1 垂直分库2.2 垂直分表 3 水平拆分(Scale Out 横向扩展) 3.1 库内分表...
    99+
    2024-04-02
  • mysql分库分表备份
    一、单独备份数据库mysqldump -uroot -poldboy oldboy >/opt/oldboy.sql         最简单的备份        1)  mysql基于myisam引擎...
    99+
    2024-04-02
  • MySQL分库分表详情
    一、业务场景介绍 假设目前有一个电商系统使用的是MySQL,要设计大数据量存储、高并发、高性能可扩展的方案,数据库中有用户表。用户会非常多,并且要实现高扩展性,你会怎么去设计? OK...
    99+
    2024-04-02
  • MySQL如何分库分表
    1. 我们为什么需要分库分表 在分库分表之前,就需要考虑为什么需要拆分。我们做一件事,肯定是有充分理由的。所以得想好分库分表的理由是什么。我们现在就从两个维度去思考它,为什么要分库?为什么要分表? 1.1 为什么要分库 如果业务量剧增,数...
    99+
    2023-08-17
    mysql 数据库
  • Mysql常用函数大全(分类汇总讲解)
    一、数学函数 ABS(x)   返回x的绝对值 BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x)&...
    99+
    2024-04-02
  • MySQL流程控制函数汇总分析讲解
    目录1.IF函数2.IFNULL函数3.CASE函数4.多重IF在 mysql 中,流程控制函数是指可以控制存储过程(stored procedure)或函数(function)中执行流程的语句。以下是几个常用的流程控制...
    99+
    2023-04-24
    MySQL流程控制 MySQL流程控制函数
  • MySQL分库分表实例分析
    这篇“MySQL分库分表实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL分库分表实例分析”文章吧。一、为什么...
    99+
    2023-06-30
  • 分库分表(了解)
    站在架构师的角度来看分库分表  单体应用架构 一个归档包(可以是JAR、WAR、EAR或其它归档格式)包含所有功能的应用程序,通常称为单体应用。 优点 便于共享:单个归档文件包含所有功能,便于在团队之间以及不同的部署阶段之间...
    99+
    2021-02-06
    分库分表(了解)
  • MySQL:互联网公司常用分库分表方案汇总!
    一、数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以...
    99+
    2024-04-02
  • MySQL总结(七)数据库表的约束-详解
    数据库表的约束 1. 数据库约束的概述 1.1 约束的作用: 对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。 1.2 约束种类: 约束...
    99+
    2017-04-03
    MySQL总结(七)数据库表的约束-详解
  • MySQL 数据库分表分区
    博主QQ:819594300博客地址:http://zpf666.blog.51cto.com/有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!一、分表为什么要分表?我们的数据库数据越来越大,随之...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作