返回顶部
首页 > 资讯 > 数据库 >mysql适合分表的情况有哪些
  • 911
分享到

mysql适合分表的情况有哪些

2024-04-02 19:04:59 911人浏览 泡泡鱼
摘要

今天小编给大家分享一下Mysql适合分表的情况有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解

今天小编给大家分享一下Mysql适合分表的情况有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

mysql中适合分表的情况:1、数据量过大,正常运维影响业务访问时,例如对数据库进行备份需要大量的磁盘io网络IO、对一个表进行DDL修改会住全表、对大表进行访问与更新出现锁等待;2、随着业务发展,需要对某些字段垂直拆分;3、单表中的数据量快速增长,当性能接近瓶颈时,就需要考虑水平切分。

教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

并不是所有表都需要进行切分,主要还是看数据的增长速度。切分后会在某种程度上提升业务的复杂度,数据库除了承载数据的存储和查询外,协助业务更好的实现需求也是其重要工作之一。

不到万不得已不用轻易使用分库分表这个大招,避免"过度设计"和"过早优化"。分库分表之前,不要为分而分,先尽力去做力所能及的事情,例如:升级硬件、升级网络、读写分离、索引优化等等。当数据量达到单表的瓶颈时候,再考虑分库分表。

那么mysql中什么时候考虑分表

1、数据量过大,正常运维影响业务访问

这里说的运维,指:

  • 对数据库备份,如果单表太大,备份时需要大量的磁盘IO和网络IO。例如1T的数据,网络传输占50MB时候,需要20000秒才能传输完毕,整个过程的风险都是比较高的

  • 对一个很大的表进行DDL修改时,MySQL会锁住全表,这个时间会很长,这段时间业务不能访问此表,影响很大。如果使用pt-online-schema-change,使用过程中会创建触发器和影子表,也需要很长的时间。在此操作过程中,都算为风险时间。将数据表拆分,总量减少,有助于降低这个风险。

  • 大表会经常访问与更新,就更有可能出现锁等待。将数据切分,用空间换时间,变相降低访问压力

2、随着业务发展,需要对某些字段垂直拆分

举个例子,假如项目一开始设计的用户表如下:

mysql适合分表的情况有哪些

在项目初始阶段,这种设计是满足简单的业务需求的,也方便快速迭代开发。而当业务快速发展时,用户量从10w激增到10亿,用户非常的活跃,每次登录会更新 last_login_name 字段,使得 user 表被不断update,压力很大。而其他字段:id, name, personal_info 是不变的或很少更新的,此时在业务角度,就要将 last_login_time 拆分出去,新建一个 user_time 表。

personal_info 属性是更新和查询频率较低的,并且text字段占据了太多的空间。这时候,就要对此垂直拆分出 user_ext 表了。

3、数据量快速增长

随着业务的快速发展,单表中的数据量会持续增长,当性能接近瓶颈时,就需要考虑水平切分,做分库分表了。此时一定要选择合适的切分规则,提前预估好数据容量

业务案例分析

1、用户中心业务场景

用户中心是一个非常常见的业务,主要提供用户注册、登录、查询/修改等功能,其核心表为:

mysql适合分表的情况有哪些

任何脱离业务的架构设计都是耍流氓,在进行分库分表前,需要对业务场景需求进行梳理:

  • 用户侧:前台访问,访问量较大,需要保证高可用和高一致性。主要有两类需求:


    • 用户登录:通过login_name/phone/email查询用户信息,1%请求属于这种类型

    • 用户信息查询:登录之后,通过uid来查询用户信息,99%请求属这种类型

  • 运营侧:后台访问,支持运营需求,按照年龄、性别、登陆时间、注册时间等进行分页的查询。是内部系统,访问量较低,对可用性、一致性的要求不高。

2、水平切分方法

当数据量越来越大时,需要对数据库进行水平切分,上文描述的切分方法有"根据数值范围"和"根据数值取模"。

"根据数值范围":以主键uid为划分依据,按uid的范围将数据水平切分到多个数据库上。例如:user-db1存储uid范围为0~1000w的数据,user-db2存储uid范围为1000w~2000wuid数据。

  • 优点是:扩容简单,如果容量不够,只要增加新db即可。

  • 不足是:请求量不均匀,一般新注册的用户活跃度会比较高,所以新的user-db2会比user-db1负载高,导致服务器利用率不平衡

"根据数值取模":也是以主键uid为划分依据,按uid取模的值将数据水平切分到多个数据库上。例如:user-db1存储uid取模得1的数据,user-db2存储uid取模得0的uid数据。

  • 优点是:数据量和请求量分布均均匀

  • 不足是:扩容麻烦,当容量不够时,新增加db,需要rehash。需要考虑对数据进行平滑的迁移。

非uid的查询方法

水平切分后,对于按uid查询的需求能很好的满足,可以直接路由到具体数据库。而按非uid的查询,例如login_name,就不知道具体该访问哪个库了,此时需要遍历所有库,性能会降低很多。

对于用户侧,可以采用"建立非uid属性到uid的映射关系"的方案;对于运营侧,可以采用"前台与后台分离"的方案。

1、建立非uid属性到uid的映射关系

  • 映射关系

例如:login_name不能直接定位到数据库,可以建立login_name→uid的映射关系,用索引表或缓存来存储。当访问login_name时,先通过映射表查询出login_name对应的uid,再通过uid定位到具体的库。

映射表只有两列,可以承载很多数据,当数据量过大时,也可以对映射表再做水平切分。这类kv格式的索引结构,可以很好的使用cache来优化查询性能,而且映射关系不会频繁变更,缓存命中率会很高。

  • 基因法

分库基因:假如通过uid分库,分为8个库,采用uid%8的方式进行路由,此时是由uid的最后3bit来决定这行User数据具体落到哪个库上,那么这3bit可以看为分库基因。

2、前台与后台分离

对于用户侧,主要需求是以单行查询为主,需要建立login_name/phone/email到uid的映射关系,可以解决这些字段的查询问题。

而对于运营侧,很多批量分页且条件多样的查询,这类查询计算量大,返回数据量大,对数据库的性能消耗较高。此时,如果和用户侧公用同一批服务或数据库,可能因为后台的少量请求,占用大量数据库资源,而导致用户侧访问性能降低或超时。

这类业务最好采用"前台与后台分离"的方案,运营侧后台业务抽取独立的service和db,解决和前台业务系统的耦合。由于运营侧对可用性、一致性的要求不高,可以不访问实时库,而是通过binlog异步同步数据到运营库进行访问。在数据量很大的情况下,还可以使用ES搜索引擎或Hive来满足后台复杂的查询方式。

以上就是“mysql适合分表的情况有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: mysql适合分表的情况有哪些

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

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

猜你喜欢
  • mysql适合分表的情况有哪些
    今天小编给大家分享一下mysql适合分表的情况有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2024-04-02
  • 适合租用美国服务器情况有哪些
    适合租用美国服务器情况有:1、没有时间和条件进行IT项目调整和维护的情况下租用美国服务器,能长期保持服务器稳定可靠的运行;2、需要更高的技术支持业务发展的情况下租用美国服务器,能有效保持稳定增长企业的业务;3、新的资源需求量情况下租用美国服...
    99+
    2024-04-02
  • mysql查询缓存不适用的情况有哪些
    查询中包含了非确定性函数,如NOW()、RAND()等,在每次查询时会返回不同的结果,因此无法使用查询缓存。 查询中包含了用...
    99+
    2024-05-21
    mysql
  • mysql组合索引失效的情况有哪些
    MySQL组合索引失效的情况有以下几种:1. 索引列的顺序不符合查询条件:组合索引的顺序非常重要,如果查询条件中的列不按照组合索引的顺序进行查询,那么组合索引将失效。2. 索引列被使用了函数或表达式:如果查询条件中的索引列被使用了函数或...
    99+
    2023-08-09
    mysql
  • 哪些情况下适合使用云主机
    以下是一些适合使用云主机的情况:1. 网站托管:云主机可以轻松托管网站,提供高可靠性和灵活的资源扩展功能。2. 应用程序托管:如果您...
    99+
    2023-09-08
    云主机
  • mysql锁失效的情况有哪些
    MySQL锁失效的情况主要有以下几种: 死锁:当多个事务互相等待对方持有的锁资源时,可能会产生死锁。MySQL会自动检测到死锁,...
    99+
    2023-10-24
    mysql
  • mysql不走索引的情况有哪些
    以下是一些可能导致MySQL不走索引的情况:1. 数据量太小:当数据量太小时,MySQL可能会选择全表扫描而不是使用索引。这是因为索...
    99+
    2023-09-20
    mysql
  • MySQL索引失效的情况有哪些
    这篇文章主要讲解了“MySQL索引失效的情况有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL索引失效的情况有哪些”吧!1.最左前缀原则在MySQL数据库中,联合索引遵守最左前缀...
    99+
    2023-07-05
  • MySQL中Index失效的情况有哪些
    数据分布不均匀:如果数据在索引列上的分布不均匀,会导致索引失效,因为MySQL会在索引树上不断地进行查找,当数据分布不均匀时,可...
    99+
    2024-04-23
    mysql
  • MySQL DDL锁表情况分析
    这篇文章主要介绍“MySQL DDL锁表情况分析”,在日常操作中,相信很多人在MySQL DDL锁表情况分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL DDL锁...
    99+
    2024-04-02
  • oracle联合索引失效的情况有哪些
    以下是一些导致Oracle联合索引失效的情况: 数据分布不均匀:如果联合索引的列中的值分布不均匀,查询可能会导致索引失效。例如,...
    99+
    2023-10-25
    oracle
  • session失效的情况有哪些
    会话失效的情况有以下几种:1. 超时:如果用户在一段时间内没有与服务器进行通信,会话可能会超时并失效。超时时间可以根据系统的需求进行...
    99+
    2023-09-21
    session
  • Redis阻塞的情况有哪些
    这篇文章主要介绍“Redis阻塞的情况有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis阻塞的情况有哪些”文章能帮助大家解决问题。命令阻塞使用不当的命令造成客户端阻塞:keys * :获...
    99+
    2023-07-05
  • mysql引发索引失效的情况有哪些
    这篇文章主要讲解了“mysql引发索引失效的情况有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql引发索引失效的情况有哪些”吧!1、在查询条件中计算索引列的使用函数或操作。若已建...
    99+
    2023-06-20
  • MySQL导致索引失效的情况有哪些
    本篇内容主要讲解“MySQL导致索引失效的情况有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL导致索引失效的情况有哪些”吧!一、准备工作首先准备两张表用于演示:CREATE&nbs...
    99+
    2023-07-02
  • javascript深拷贝的情况有哪些
    这篇“javascript深拷贝的情况有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“javascript深拷贝的情况有...
    99+
    2023-06-26
  • 日本服务器免实名认证适合哪些情况租用
    适合租用日本服务器免实名认证的情况有:1、无备案需求,租用日本服务器不要备案;2、经常停机,租用日本服务器能保证站点的稳定性和访问速...
    99+
    2023-02-16
    日本服务器免实名认证 日本服务器 服务器
  • Oracle undo表空间文件丢失的情况有哪些
    这篇文章主要讲解了“Oracle undo表空间文件丢失的情况有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle undo表空间文件丢失的情况...
    99+
    2024-04-02
  • MySQL主从复制不一致的情况有哪些
    这篇文章给大家分享的是有关MySQL主从复制不一致的情况有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1.网络的延迟由于mysql主从复制是...
    99+
    2024-04-02
  • mysql中出现索引失效的情况有哪些
    本篇文章给大家分享的是有关mysql中出现索引失效的情况有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最佳左前缀原则——如果索引了多列,要遵守最左前缀原则。指的是查询要从...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作