数据库优化方式——分库,分表,分区

为了解决的问题:因为数据量过大而导致的数据库性能的下降问题

分库的好处:降低单台机器的负载压力

分表的好处:提高数据操作的效率:降低写入、更新、删除(一般项目中不会对数据库中的数据物理删除,只会做逻辑删除)时候建立索引的开销。提高运行时候的效率,提高并发量。

分库:

  • 垂直拆分:指的是根据业务场景进行进行归类,根据类型进行分库。例如:保险系统中长险,短险会拆分到两个库中。将保单相关的总单,险种,投被缴受各个实体分到不同表中。
  • 水平拆分:指的是不改表数据库的表结构,将表中的数据进行拆分从而达到分片的目的,通过指定字段作为分库建从而进行路由。订单系统拆分了十个库就是进行的水平拆分

分表:

  • 垂直拆分:解决表的宽度,将原来一个拥有很多字段的表拆分成过个表, 将查询多的字段放在一个表中,查询不多的表放在另一个表中,例如:pa系统中投被缴受人员的透出信息和基础信息的分表。
  • 水平拆分:指的是不改表数据库的表结构,将表中的数据进行拆分从而达到分片的目的,通过指定字段作为分表建从而进行路由。通过降低单表的数据量,提高读写的速度。

分区:

分区就是把一张表的数据根据表结构中的字段分成更多个区块,这些区块可以在一个磁盘上,也可以在多个磁盘上。分区后,表面上是一张表,但是数据散列在多个位置,这样就可以达到多块硬盘同时处理不同请求,从而提高磁盘的I/O读写性能。

分库分表带来的挑战

分布式id的创建:确保id的唯一性,并且保证库表中的均匀分布。

订单系统 使用自己的序列号生成器。核心算法 雪花算法, 通过19位数据的生成逻辑,来保证每秒一千万的并发。

分布式事务(用于确保一条报文的数据写入不同库不同表的时候,能够保证 各个库表 可以同时成功 或者 失败):该服务的实现有阿里金融云提供。

订单系统未使用分布式事务,只是用了DBP提供的单库的事务。不支持一笔数据库操作,同时对多个物理库进行操作。订单系统多库间,不要求强一致性,只要求保证最终一致性。通过补偿的job来保证数据的完整性。

动态扩容的开销:

分库分表 通常有两种方式:采用hashCode和直接采用数值 进行 分库分表

                                            差异在于: 直接使用数值取余,在扩容的时候,可以直接增加库表

                                                               通过hashCode值计算,在扩容的时候,所有的数据需要重新计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值