分库分表学习

分久必合合久必分

1. 垂直分表 (Vertical Partitioning)

定义

  • 垂直分表 是将一个表中的列分成多个子表,每个子表包含不同的列。每个表中的记录(行)会保持一致,但每个表存储的列不同,通常是根据功能模块或使用频率来进行划分。

应用场景

  • 当某些列的数据访问频繁,而某些列的数据不常用,或者某些列需要特别的处理时,可以采用垂直分表。

示例
假设有一个用户表:

user_id

username

email

phone_number

address

profile_pic

1

John

john@mail.com

123456789

USA

img1.jpg

2

Alice

alice@mail.com

987654321

Canada

img2.jpg

在垂直分表中,可能会根据访问模式将其分为以下两张表:

  • 用户基本信息表

user_id

username

email

1

John

john@mail.com

2

Alice

alice@mail.com

  • 用户联系信息表

user_id

phone_number

address

profile_pic

1

123456789

USA

img1.jpg

2

987654321

Canada

img2.jpg

这样,频繁访问用户基本信息的操作不需要扫描较大的数据集,避免了冗余数据的存储。

2. 垂直分库 (Vertical Sharding or Vertical Database Partitioning)

定义

  • 垂直分库 是指将数据库中的不同模块(表或功能区域)分配到不同的数据库中。每个数据库可能包含不同的业务模块,每个模块的数据存储独立,通常是根据模块的功能划分。

应用场景

  • 当数据库内不同模块之间的业务访问不相同,且某些模块需要单独进行优化时,可以使用垂直分库。

示例
假设有一个电商系统,数据库包含 用户信息订单信息 两个功能模块。你可以将这两个模块的数据存储在不同的数据库中:

  • 用户数据库:存储用户信息,如用户名、邮箱等。
  • 订单数据库:存储订单信息、订单详情等。

这样,用户模块和订单模块的数据分开存储,可以针对性地优化不同模块的查询性能,并减少数据库负载。

3. 水平分库 (Horizontal Sharding or Horizontal Database Partitioning)

定义

  • 水平分库 是将一张大表的记录(行)根据某种规则进行拆分,分布到多个不同的数据库中。每个数据库包含的是相同结构的表,但每个数据库中存储的数据是不同的子集。通常是根据某个字段(如用户ID、时间戳等)进行拆分。

应用场景

  • 当表中的数据量过大时,单一数据库无法承载所有数据,或者数据库的查询性能下降时,水平分库可以帮助将数据分散到多个数据库中,从而提升系统的性能和可伸缩性。

示例
假设有一个用户表,通过 用户ID 来进行水平分库,将用户表拆分成多个数据库:

  • 数据库1:存储ID为1-1000的用户数据
  • 数据库2:存储ID为1001-2000的用户数据
  • 数据库3:存储ID为2001-3000的用户数据

这样,当查询某个ID范围的用户时,只需查询对应的数据库,减少了查询的时间和数据库的负载。

4. 水平分表 (Horizontal Partitioning or Horizontal Table Sharding)

定义

  • 水平分表 是将一张大表的数据根据某种规则(如时间、ID范围等)拆分成多张表。每个表包含相同结构的记录,但存储的数据不同。通常,水平分表会把数据拆分到多个物理表中,每个表的数据存储一部分,所有表的结构一致。

应用场景

  • 当一张表的数据量过大时,通过水平分表可以将数据分散到不同的表中,提升查询效率,并避免表数据过多导致的性能问题。

示例
假设有一个电商系统的 订单表,每个订单包含订单ID、用户ID、商品ID等字段。通过 按年份进行分表,可以将订单表分成多个小表:

  • 订单表_2021:存储2021年的所有订单数据
  • 订单表_2022:存储2022年的所有订单数据
  • 订单表_2023:存储2023年的所有订单数据

当查询某一年份的订单时,可以直接查询对应的表,而不需要扫描整个订单表,提升查询效率。


总结:

  • 垂直分表:将表的列根据功能或使用频率分开存储,优化查询。
  • 垂直分库:将不同业务模块的数据存储到不同的数据库中,优化性能。
  • 水平分库:将一张大表的数据按某种规则分布到多个数据库中,提升系统性能和可伸缩性。
  • 水平分表:将一张大表的数据按某种规则分布到多个物理表中,优化查询和性能。

这四种分库分表方式在大规模系统中都有广泛应用,能够有效地提升系统的扩展性和性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值