【DataBase】数据库的水平(分库)分表和垂直(分库)分表到底是什么?

目录

详细说一哈两者的区别

水平分表的方法:范围法和hash算法和雪花算法进行分表。

为什么要垂直分表呢?

如何进行垂直分表


话不多说,直接上图。

 简单来说就是水平分表(分库)根据数据的条数进行分表(分库),垂直分表(分库)是按照字段进行分表(分库)。

详细说一哈两者的区别

水平分表以行为单位对数据进行拆分,一般意义上的分库分表就是水平分表。

分表之后,所有表的结构都是一样的。

作用:解决表中数据量大的问题,如果一张表的数据太多,查询和操作起来都很麻烦,效率也很低。

水平分表的方法范围法和hash算法和雪花算法进行分表。

范围法:1-1000行数据放在表1,1000-2000放在表2......

hash算法就是选择一个合适的hash函数,比如使用取模操作(%),把%5结果为0的放在表1

结果为1的放在表2....

雪花算法:就是为需要进行水平分表的每条数据生成一个全局唯一的id。【雪花算法的原理就是生成一个的 64 位比特位的 long 类型的唯一 id。包括1位固定值,41位时间戳,5位机器id和5位服务id,12位存储序列号组成

Java面试题(6)-雪花算法_二王一个今的博客-CSDN博客_java 雪花算法

垂直分表:以列(字段)为单位将数据进行拆分成多张表,多张表通过主键进行关联,从而组成完整的数据。

分表之后,每张表的结构都不相同。

作用:将经常查询的字段单独存放一张表,减少了不必要的字段(例如字段类型为text,blob的)的查询,从而提高查询效率。

为什么要垂直分表呢?

        这主要跟某些数据库的存储引擎有关,比如Mysql的InnoDB引擎。

        在Mysql中,数据的基本单位,称为行 (Row),管理数据的基本单位,称为页 (Page)
保存页的单位,称为区 (Extent)。

        一个区由连续的页组成,一个页由连续的行组成,默认每一个区的大小为1M,默认每一页的大小为16K,所以一个区有1024 / 16 = 64个页,而每个页中,根据每行数据的大小,又可以存储多个行,然而,在InnoDB 1.0版本之后,引入了一个新特性:压缩页
被压缩之后的页在实际占用空间上,比逻辑上的要小,但是在压缩和解压缩时会花费额外的时间
这时如果出现了跨页检索数据,效率就会比较低。因此,在表设计时,尽可能的在页内多存储数据行,这样可以减少跨页检索,提高效率。而多存储数据行就意味着,每一行的列数要尽可能少。

如何进行垂直分表

垂直分表的规则:

拆分规则:
把不常用的字段单独放在一张表
把text,blob等大字段拆分出来单独放在一张表
经常组合查询的字段单独放在一张表中

总结

        垂直分表,可以理解为按列分表,如果一个表的字段太多了,可以按照使用频率分成不同的表优化查询性能(就不用一次查询出所有的字段)。比如商品表可以分为商品类型表,商品详情表,商品促销表等等

        垂直分库为了减轻单个数据库压力,我们可以按照业务类型拆分成多个数据库,比如分布式架构,不同的模块可以有不同的数据库

        水平分表,可以理解为按行分表,如果一个表的数据有千万行,查询性能太低,可以拆分成10张小表,每张表保存一百万行数据【范围法,hash算法,雪花算法进行水平分表】

        水平分库,我们做了水平分表后,表数量太多了也会影响数据库查询效率,我们可以将这些表分到多个数据库中。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
数据库设计经验中进行分表分库的主要原因是为了解决性能瓶颈和高并发的问题。当业务发展迅速,单个数据库成为了性能瓶颈时,分库分表可以有效地提高数据库的处理能力和性能。 分表是将一个大表按照一定的规则拆分成多个小表,每个小表只包含部分数据。这样可以减少单个表的数据量,提高查询效率,降低锁竞争,减轻数据库的负载压力。常见的分表规则有按照时间范围、按照哈希值等。 分库是将一个数据库分成多个独立的子数据库,每个子数据库可以运行在不同的机器上。这样可以将不同的业务数据分开存储,避免了单个数据库的性能瓶颈,提高了数据库的并发处理能力。 进行分表分库也会带来一些问题。比如,跨表查询和跨库查询可能会变得复杂,需要额外的处理。同时,数据一致性的维护也会变得更加复杂,需要考虑分布式事务的处理。此外,对于分表分库的中间件选择也需要谨慎考虑,以满足业务需求并保证系统的稳定性。 综上所述,在数据库设计中进行分表分库可以提高数据库的性能和并发处理能力,但也会引入一些额外的问题和挑战。因此,在设计和实施分表分库时,需要综合考虑业务需求、系统架构和数据库性能等因素,做出合理的决策。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [分布式 微服务 项目 我们为什么要分库分表?](https://blog.csdn.net/qq_44866828/article/details/124098306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mxin5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值