分库分表分区

分库分表分区

数据库分库、分表和分区是水平切分数据库的策略,有助于提高数据库性能、可伸缩性和负载均衡。

概念

  • **分库:**将一个库的数据拆分到多个相同的库中,访问的时候访问一个库。
  • **分表:**把一个表的数据放到多个表中,操作对应的某个表就行。
  • **分区:**是指将同一表中不同行的记录分配到不同的物理文件中。

目的就是减少数据库的负担,提高数据库的效率。

应用场景

  1. 多租户系统:分库可确保不同租户的数据隔离,提高安全性和性能。
  2. 时间序列数据:分表和分区用于处理大量时间序列数据,提高时间范围内的查询性能。
  3. 大规模电子商务平台:分库和分表可确保商品、订单等数据均匀分布,提高负载均衡和性能。
  4. 数据保留政策:分区可用于实现数据保留策略,将数据分为热数据和冷数据。

拆分方式

垂直拆分

数据库垂直拆分

垂直拆分:是指数据表列的拆分,把一张列比较多的表拆分为多张表。

例如,根据业务拆分,例如电商系统,拆分成用户表,订单表,商品表。

分库分表分区_第1张图片

表垂直拆分

根据业务去拆分表,如图,把user表拆分成user_base表和user_info表,use_base负责存储登录,user_info负责存储基本用户信息

优缺点

优点:

  • 拆分后业务清晰(专库专用按业务拆分)
  • 数据维护简单,按业务不同,业务放到不同机器上

缺点:

  • 如果单表的数据量,写读压力大。
  • 受某种业务决定,或者被限制,也就是说一个业务往往会影响到数据库的瓶颈(性能问题,如双十一抢购)。
  • 部分业务无法关联join,只能通过java程序接口去调用,提高了开发复杂度。

水平拆分

数据水平拆分

水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。

例如,按会员库拆分,拆分成会员1库,会员2库,以userId拆分,userId尾号0-5为1库 6-9为2库,还有其他方式,进行取模,偶数放到1库,奇数放到2库

表的水平拆分

如图把users表拆分成users1表和users2表,以userId拆分,进行取模,偶数放到users1表,奇数放到users2表

优点:

  • 单库/单表的数据保持在一定量(减少),有助于性能提高
  • 提高了系统的稳定性和负载能力
  • 拆分表的结构相同,程序改造较少。

缺点:

  • 数据的扩容很有难度维护量大
  • 拆分规则很难抽象出来
  • 分片事务的一致性问题部分业务无法关联join,只能通过java程序接口去调用

你可能感兴趣的:(数据库,数据库)