在java应用研发中可能会遇到数据库瓶颈突发问题,现对其问题分析粗略记录一下。后续有更深理解应用会更新。

数据库服务受所安装在机器的硬件配置影响,影响数据库服务访问性能有两种情况,一种是IO瓶颈,一种是CPU瓶颈,这两种情况均会产生数据库瓶颈。

java应用中出现数据库瓶颈时可通过分库分表方式减轻数据库服务的访问压力。(连接请求数)分库分表还可能涉及到读写分离,数据库分库分表可采用客户端shareding-jdbc或服务端Mycat中间件。

数据库分库分表分为:水平分库、垂直分库、水平分表、垂直分表

当数据库数据量大时采用分库(水平、垂直)来减轻IO瓶颈问题;

当单表数据量大时采用水平分表来减轻IO瓶颈问题;

当单表字段多时采用垂直分表来减轻CPU瓶颈问题;

  • 水平分库--依据字段进行分库

   

什么是java 分词库 java 分库分表_什么是java 分词库

  • 垂直分库--依据表进行分库--微服务化

什么是java 分词库 java 分库分表_分库分表_02

  • 水平分表--依据字段进行分表

什么是java 分词库 java 分库分表_分库分表_03

  • 垂直分表--依据字段进行分表

什么是java 分词库 java 分库分表_分表_04

小结:

分库解决IO瓶颈--分表解决CPU瓶颈--若QPS还是高,且都大于写,则考虑读写分离。

分库分表和读写分离适用于海量数据或并发场景。

分库分表遇到关联查询的问题时可通过如下方式解决:切分之前,系统中很多列表和详情表的数据可以通过join来完成,但是切分之后,数据可能分布在不同的节点上,此时join带来的问题就比较麻烦了,考虑到性能,尽量避免使用Join查询。

  • 全局表:将全局表每个库中都保存一份
  • 字段冗余:冗余userId、userName
  • 数据组装:业务层查询多次,对数据进行组装

所以,分库分表之前,先进行力所能及的优化:升级硬件、升级网络、读写分离、索引优化等。当数据量达到单表瓶颈后,在考虑分库分表。