数据库的分库分表是什么?

阿粉相信,现在很多的做开发的都喜欢研究一些新的技术,但是能不能把数据都实际应用到公司的环境中,这个就不好说了,毕竟有些东西用上了,一旦出现问题了,那么就会导致一连串的生产事故的发生。今天阿粉就来学习一下这个Sharding,也就是分库分表实战,接下来我们来学习一下什么是分库分表,什么是Sharding。

什么是分库分表

分库,显而易见,就是一个数据库分成多个数据库,部署到不同机器。

分表,就是一个数据库表分成多个表。

那么为什么需要分库分表呢?

为什么需要分库分表?

首先我们要明确一个问题,单一的数据库是否能够满足公司目前的线上业务需求,比如,我们的用户表,可能有几千万,甚至上亿的数据,阿粉只是说可能,如果有这么多用户,那必然是大公司了,那么这个时候,如果你不分表也不分库的话,那么数据了上来的时候,稍微一个不注意,MySQL单机磁盘容量会撑爆,但是如果拆成多个数据库,磁盘使用率大大降低。

这样就把磁盘使用率降低,这是通过硬件的形式解决问题,就像阿粉所有,如果你的数据量是巨大的,这时候,SQL 如果没有命中索引,那么就会导致一个情况,查这个表的SQL语句直接把数据库给干崩了。

即使SQL命中了索引,如果表的数据量 超过一千万的话, 查询也是会明显变慢的。这是因为索引一般是B+树结构,数据千万级别的话,B+树的高度会增高,查询自然就变慢了,当然,这是题外话了。

那么我们接下来就得说说如何进行分库和分表的操作了,今天阿粉就讲一下这个如何进行进行分库分表。

分库分表方案

分库分表方案,不外乎就两种,一种是垂直切分,一种是水平切分。

但是总有做开发的小伙伴不知道这垂直切分和水平切分到底是什么样的,为什么垂直切分,为什么水平切分,什么时候应该选择垂直切分,什么时候应该选择水平切分。

有人是这么说的,垂直切分是根据业务来拆分数据库,同一类业务的数据表拆分到一个独立的数据库,另一类的数据表拆分到其他数据库。

有些人不理解这个,实际上垂直切分也是有划分的,上面描述的是垂直切分数据库,可能容易让很多人不太理解,但是如果是垂直切分表,那么肯定百分之90的人都能理解。

我们又一张Order表,表中有诸多记录,比如我们设计这么一张简单的表。

字段有如下。

id

order_id

order_date

order_type

order_state

1

cd96cff0356e483caae6b2ff4e878fd6

2022-06-11 13:57:11

支付宝

1

2

e2496f9e22ce4391806b18480440526a

2022-06-12 14:22:33

微信

2

3

9e7ab5a1915c4570a9eaaaa3c01f79c1

2022-06-12 15:21:44

现金

2

以上是我们的简化版Order表,如果我们想要垂直切分,那么应该怎么处理?

直接拆分成2个表,这时候就直接就一份为2 ,咔的一下拆分成两个表?

Order1

id

order_id

order_date

1

cd96cff0356e483caae6b2ff4e878fd6

2022-06-11 13:57:11

2

e2496f9e22ce4391806b18480440526a

2022-06-12 14:22:33

3

9e7ab5a1915c4570a9eaaaa3c01f79c1

2022-06-12 15:21:44

Order2

id

order_type

order_state

1

支付宝

1

2

微信

2

3

现金

2

这时候我们的主键ID保持的时一致的,而这个操作,就是垂直拆分,分表的操作。

既然我们说了垂直拆分,那么必然就有水平拆分。

什么是水平拆分呢?

实际上水平拆分的话,那真的是只有一句话。

按照数据来拆分

水平拆分数据库:将一张表的数据 ( 按照数据行) 分到多个不同的数据库.每个库的表结构相同. 每个 库都只有这张表的部分数据,当单表的数据量过大,如果继续使用水平分库, 那么数据库的实例 就会不断增加,不利于系统的运维. 这时候就要采用水平分表。

水平拆分分表: 将一张表的数据 ( 按照数据行) , 分配到同一个数据库的多张表中,每个表都只有一部 分数据。

我们来看看Order表进行水平拆分的话,是什么样子的。

Order1

id

order_id

order_date

order_type

order_state

1

cd96cff0356e483caae6b2ff4e878fd6

2022-06-11 13:57:11

支付宝

1

2

e2496f9e22ce4391806b18480440526a

2022-06-12 14:22:33

微信

2

Order2

id

order_id

order_date

order_type

order_state

3

9e7ab5a1915c4570a9eaaaa3c01f79c1

2022-06-12 15:21:44

现金

2

实际上就是水平的把表数据给分成了2份,这么看起来是不是就很好理解了。

分库分表带来的问题

事务问题首先,分库分表最大的隐患就是,事务的一致性, 当我们需要更新的内容同时分布在不同的库时,不可避免的会产生跨库的事务问题。原来在一个数据库操作,本地事务就可以进行控制,分库之后 一个请求可能要访问多个数据库,如何保证事务的一致性,目前还没有简单的解决方案。

无法连表的问题

还有一个就是,没有办法进行连表查询了,因为,, 原来在一个库中的一些表,被分散到多个库,并且这些数据库可能还不在一台服务器,无法关联查询。所以相对应的业务代码可能就比较多了。

分页问题

分库并行查询时,如果用到了分页 每个库返回的结果集本身是无序的, 只有将多个库中的数据先查出来,然后再根据排序字段在内存中进行排序,如果查询结果过大也是十分消耗资源的。

阿粉之前用过一次分页,直接能把线上CPU瞬间会有一个顶峰值。所以,慎重呀。

分库分表的技术

目前比较流行的就两种,一种是MyCat,另外一种则是Sharding-jdbc,都是可以进行分库的。

MyCat是一个数据库中间件,Sharding-jdbc是以 jar 包提供服务的jdbc框架。

如果要是让阿粉选择,那么阿粉绝对会选择最方便快捷的,也就是jar包的形式来操作。

Mycat和Sharding-jdbc 实现原理也是不同。

Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分库分表分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

而Sharding-JDBC的原理是接受到一条SQL语句时,会陆续执行SQL解析 => 查询优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并 ,最终返回执行结果。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/269863.html<

(0)
运维的头像运维
上一篇2025-05-07 13:27
下一篇 2025-05-07 13:28

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注