数据库优化

1、读写分离

  先来看主从复制。MySQL复制:为保证主服务器和从服务器的数据一致性,在向主服务器插入数据后,从服务器会自动将主服务器中修改的数据同步过来。

主从复制主要有三个线程:binlog线程、I/O线程、SQL线程。

  • binlog线程:负责将主服务器数据更改写入到二进制日志(Binary log)中。
  • I/O线程:负责从主服务器上读取Binary log,并写入从服务器的中继日志(Relay log)。
  • SQL线程:负责读取Relay log,解析出主服务器已经执行的数据更改并在从服务器中重放。

读写分离主要依赖主从复制,主从复制为读写分离服务。
读写分离优势:

  • 主服务器负责写,从服务器负责读,缓解了锁的竞争。
  • 从服务器可以使用MyISAM,提升查询性能及节约系统开销
  • 增加冗余,提高可用性。

2、垂直分表

垂直分表:将一个表按照字段分成多个表,每个表存储其中一部分字段。一般会将常用的字段放到一个表中。
垂直分表的优势:

  • 提升常用数据的查询效率
  • 避免I/O竞争,减少锁表的概率。因为大的字段效率更低,一:数据量大,需要的读取时间长;二:大字段占用的空间更大,单页内存储的行数变少,会使得I/O操作增多。

3、垂直分库

垂直分库:按照业务对表进行分类,部署到不同的数据库上面,不同的数据库可以放到不同的服务器上。

垂直分库的优势:

  • 降低业务中的耦合,方便对不同的业务进行分级管理。
  • 可以提升I/O、数据库连接数、解决单机硬件资源的瓶颈问题。

垂直拆分(分表、分库)的缺点:

  • 主键出现冗余,需要管理冗余列。
  • 事务处理变得更复杂。
  • 仍然存在单表数据量过大的问题。

4、水平分表

水平分表:在同一个数据库内,把同一个表的数据按照一定规则拆分到多个表中。
水平分表的优势:

  • 解决了单表数据量过大的问题。
  • 避免I/O竞争并减少锁表的概率。

5、水平分库

水平分库:把同一个表的数据按照一定规则拆分到不同的数据库中,不同的数据库可以放到不同的服务器上。
水平分库的优势:

  • 解决了单库大数据量的瓶颈问题。
  • I/O冲突减少,锁的竞争减少,某数据库出现问题不影响其他数据库,提高了系统的稳定性和可用性。
    水平拆分(分表、分库)的缺点:
  • 分片事务一致性难以解决。
  • 跨节点JOIN性能差,逻辑会变得复杂。
  • 数据扩展难度大,不易维护。

6、添加缓存

Mybatis中有一级缓存(Sqlsession)和二级缓存(Mapper)等等。

补充:分库、分表后,ID键如何处理?

设置全局ID,主要有以下几种方法:

  • UUID:优点:本地生成ID,不需要远程调用;全局唯一不重复。缺点:占用空间大,不适合作为索引。
  • 数据库自增ID:维护一个专门用于生成主键的库,让它来产生全局ID。
  • Redis生成ID:优点:不依赖数据库,性能比较好;缺点:引入新的组件会使得系统复杂度增加。
  • Twitter的snowflake算法:时一个64位的long型ID。其中1bit是不用的,41bit作为毫秒数,10bit作为工作机器ID,12bit作为序列号。
  • 美团的Leaf分布式ID生成系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值