0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数据库优化最有效的方式是什么?

马哥Linux运维 来源:马哥Linux运维 2023-02-28 09:46 次阅读

记得,如果有人问你做数据库优化最有效的方式是什么?SQL优化、分布式集群、分库分表!干就完了~ 但上来就考虑分库分表真的合适么,你对分库分表又理解多少呢?什么时候分?有几种分法儿?别想了,快上车!哈哥带你捋一下分库分表的额各种玩儿法~记得收藏

首先我们要知道分库、分表都是干啥的,本文主角还是我们的MySQL为第一视角。首先从字面意思来看:

  • 分库:由单个数据库实例拆分成多个数据库实例,将数据分布到多个数据库实中。


  • 分表:由单张表拆分成多张表,将数据划分到多张表内。

要知道,对于大型互联网项目,数据量级可能不是我们能想到的,每日新增数据量过千万是常有的事儿,想靠单台MySQL服务器是不现实的。你项羽再牛B,也顶不住四个队友挂机啊!!项羽:???

随着业务数据量和网站QPS日益增高,对数据库压力也越来越大,单机版数据库很快会到达存储和并发瓶颈,就需要做数据库性能方面的优化,分库分表采取的是分而治之的策略,分库目的是减轻单台MySQL实例存储压力及可扩展性,而分表是解决单张表数据过大以后查询的瓶颈问题,坦白说,这些问题也是所有关系型数据库的“硬伤”。

今天我们就基于常见分库、分表的策略方式以及场景,来搞清楚我们到底啥时候用的到。常用策略包括:垂直分表、水平分表、垂直分库、水平分库。

一、朴实无华的 - 分表

1、垂直分表

垂直分表,或者叫竖着切表,是不是感受到该策略是以字段为依据的!主要按照字段的活跃性、字段长度,将表中字段拆分到不同的表(主表和扩展表)中。

特点:

  • 每个表的结构都不一样;
  • 每个表的数据也不一样,
  • 有一个关联字段,一般是主键或外键,用于关联兄弟表数据;
  • 所有兄弟表的并集是该表的全量数据;

场景:

  1. 有几个字段属于热点字段,更新频率很高,要把这些字段单独切到一张表里,不然innodb行锁很恶心的,锁死你呀~~如用户表里的余额字段?不,我的余额就很稳定,一直是0。。
  2. 有大字段,如text,存储压力很大,毕竟innodb数据和索引是同一个文件;同时,我又喜欢用SELECT *,你懂得,这磁盘IO消耗的,跟玩儿似的,谁都扛不住的。
  3. 有明显的业务区分,或表结构设计时字段冗余;有些小伙伴看到第一点时,就发现陈哈哈是个菜鸡,用户表怎么会有余额字段?明显有问题啊!赶紧先到评论区喷陈哈哈一波~~然后笑嘻嘻的发现原来是个小尾巴,真不要脸是吧。。是的,因此不同业务我们要把具体字段拆开,这样才有利于业务后续扩展哦。

2、水平分表

水平分表,也叫“横着切”。。以行数据为依据进行切分,一般按照某列的自容进行切分。

手机号表,我们可以通过前两位或前三位进行切分,如131、132、133 → phone_131、phone_132、phone_133,手机号有11位(100亿),量大是很正常的事儿,这年头谁家老头老太太每个手机呢是吧。这样切就把一张大表切成了好几十张小表,数据量不就下来了。有同学就问了那我怎么知道我这手机号查哪个表呢?一看你就没认真看前两行标红的点,为啥标红嘞?比如我查13100001111,那我截取前三位,动态拼接到查询的表名上,就行了。

特点:

  • 每个表的结构都一样;
  • 每个表的数据都不一样,没有交集;
  • 所有表的并集是该表的全量数据;

场景:单表的数据量过大或增长速度很快,已经影响或即将会影响SQL查询效率,加重了CPU负担,提前到达瓶颈。记得水平分表越早越好,别问我为什么。。

二、花里胡哨的 - 分库

需要你注意的是,传统的分库和我们熟悉的集群、主从复制可不是一个事儿;多节点集群是将一个库复制成N个库,从而通过读写分离实现多个MySQL服务的负载均衡,实际是围绕一个库来搞的,这个库称为Master主库。而分库就不同了,分库是将这个主库一分为N,比如一分为二,然后针对这两个主库,再配置2N个从库节点。

3、垂直分库

纵向切库,太经典的切分方式,基于表进行切分,通常是把新的业务模块或集成公共模块拆分出去,比如我们最熟悉的单点登录、鉴权模块。熟悉的味道,记得有一次我把一些没用的表切到一个性能很好的服务器中,这服务器我专门用来学习,后来也不知被哪个狗腿子告密了~ 我你个,有种站出来,你个**东西。

47557db0-b2fc-11ed-bfe3-dac502259ad0.png

特点:

  • 每个库的表都不一样;
  • 表不一样,数据就更不一样了~ 没有任何交集;
  • 每个库相对独立,模块化

场景:可以抽象出单独的业务模块时,可以抽象出公共区时(如字典、公共时间、公共配置等),或者想有一台属于自己的服务器时?

4、水平分库

以行数据为依据,将一个库中的数据拆分到多个库中。大型分表体验一下?坦白说这种策略并不实用,因为会对后台开发很不友好,有很多坑,不建议采用,理解即可。

特点:

  • 每个库的结构都一样;
  • 每个库的数据都不一样,没有交集;
  • 所有库的并集是全量数据;

场景:系统绝对并发量上来了,CPU内存压力大。分表难以根本上解决量的问题,并且还没有明显的业务归属来垂直分库,主库磁盘接近饱和。

总结

本文就到这里,希望你学废了!其实,在实际工作中,我们在选择分库分表策略前,想到的应该是从缓存、读写分离、SQL优化等方面,因为这些能够更直接、代价更小的解决问题。要记住动表就是动根本,你永远不知道这张表后面会连带多少历史遗留问题,如果是个很大型的项目,遇到些问题你就跟经理提议要分库分表,小心被呼死~

好了,多了就不说了,我劝你耗子尾汁,但推荐你关注我,因为我会让你在快乐中学会很多东西!

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 结构
    +关注

    关注

    1

    文章

    117

    浏览量

    21552
  • 数据库
    +关注

    关注

    7

    文章

    3750

    浏览量

    64207
  • MySQL
    +关注

    关注

    1

    文章

    795

    浏览量

    26379

原文标题:老大让我优化数据库,我上来就分库分表,他过来就是一jio

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数据库SQL的优化

    数据库执行SQL都会先进行语义解析,然后将SQL分成一步一步可执行的计划,然后逐步执行。通过分析执行计划,我们可以清晰的看到数据库执行的操作,这对于数据库SQL的优化具有重大意义。 1
    的头像 发表于 10-09 15:43 995次阅读
    <b class='flag-5'>数据库</b>SQL的<b class='flag-5'>优化</b>

    基于数据库查询过程优化设计

    在大型关系数据库管理与开发中,优化设计极大地提高数据库的性能。通过对一大型数据库查询语句执行过程的讨论,提出了对同一表格进行多个选择运算的优化
    发表于 02-27 16:05 18次下载

    数据库笔记

    可以有效的学习sql数据库,可以顺利编写一种sql数据库
    发表于 06-20 17:48 0次下载

    如何优化数据库负载

    摘要:一个前端开发者介绍了他和他的数据库朋友们是如何降低基于Ruby网站数据库负载的故事。以下为译文: 数据库负载可能是个沉默的性能杀手。我一直都在优化我的一个网站应用,用来吸引人们参
    发表于 09-28 16:32 0次下载

    提高Oracle的数据库性能

    问题。通过优化SQL语句效率、扩充高级缓冲区和配置重做日志缓冲区等几个方面介绍了Oracle数据库优化方法,探讨了OraCle如何提高性能优化的措施。通过测试Oracle查询结果表明,
    发表于 11-11 18:16 4次下载

    医院SQL数据库系统语句优化

    本文就如何优化大型数据库的性能进行了一些探索,提出了优化数据库访问性能的若干策略,特别是对SQL语句进行了有效的分析设计的问题,以使其加快执
    的头像 发表于 02-17 20:26 5275次阅读

    基于Greenplum数据库的查询优化

    针对分布式数据库查询效率随着数据规模的增大而降低的问题,以Greenplum分布式数据库为研究对象,从优化查询路径的角度提出一个基于代价的最优查询计划生成方法。首先,该方法设计一种
    发表于 03-29 17:46 0次下载

    专访阿里数据库备份专家 教你pick最有效的备份系统

    摘要: 数据库备份是个老生常谈的话题,看似很简单,但在实际操作过程中,运维人员往往会遇到这样或那样的坑。那么,如今的数据库备份有哪些挑战?如何构建有效备份系统?有什么解决办法?数据库
    发表于 08-20 14:43 228次阅读

    数据库的设计资料概述

    数据库设计是指对于一个给定的应用环境,构造(设计)优化数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理
    发表于 03-12 15:49 10次下载
    <b class='flag-5'>数据库</b>的设计资料概述

    数据库和自建数据库的区别及应用

    数据库是指优化和部署在云端的数据库,阿里云和腾讯云都提供云数据库,云数据库和自己搭建的数据库
    的头像 发表于 11-20 16:26 4535次阅读
    云<b class='flag-5'>数据库</b>和自建<b class='flag-5'>数据库</b>的区别及应用

    数据库索引使用策略及优化

    的内容完全基于上文的理论基础,实际上一旦理解了索引背后的机制,那么选择高性能的策略就变成了纯粹的推理,并且可以理解这些策略背后的逻辑。 示例数据库 为了讨论索引策略,需要一个数据量不算小的数据库作为示例。本文选用MySQL官方文
    的头像 发表于 11-02 15:13 1666次阅读
    <b class='flag-5'>数据库</b>索引使用策略及<b class='flag-5'>优化</b>

    MySQL数据库性能优化的意义及其措施

    数据库性能优化的常见手段有很多,比如添加索引、分库分表、优化连接池等
    的头像 发表于 02-03 14:12 1216次阅读

    什么是向量数据库?关系数据库和向量数据库之间的区别是什么?

    向量数据库是一种以向量嵌入(高维向量)方式存储和管理非结构化数据(如文本、图像或音频)的数据库,以便于快速查找和检索类似对象。
    的头像 发表于 08-16 10:13 2316次阅读
    什么是向量<b class='flag-5'>数据库</b>?关系<b class='flag-5'>数据库</b>和向量<b class='flag-5'>数据库</b>之间的区别是什么?

    数据库应用及其特点 数据库数据的基本特点

    和管理的一项重要应用,其优点不仅可以提高工作效率,还可以保证数据的安全性和可靠性。本文将详细介绍数据库应用及其特点,同时探讨数据库数据的基本特点。 一、
    的头像 发表于 08-28 17:22 2678次阅读

    数据库优化那些事

    我们出去面试经常会被问到数据库这一块,而涉及数据库这一块问的最多的就是数据库优化。那么我们怎么做才能做好优化问题呢?今天我们就来聊聊
    的头像 发表于 10-08 11:49 551次阅读
    <b class='flag-5'>数据库</b><b class='flag-5'>优化</b>那些事