数据库优化方案

概述

在一个系统中,服务层往往被设计成无状态的模式,可以自由水平扩容来提升 QPS,但是再提升的同时数据库的要求也会升高,此时往往数据库才会变成制约性能的瓶颈。

另外的对于查询来说,单表的查询效率会随着表中数据量的增加而降低。

数据库优化的方案有如下几种:

  1. 分表分库
  2. 读写分离

分表分库

何时需要分表?

在数据量过大已经造成接口和事务执行缓慢的时候就应该考虑分表。(MySQL InnoDB 的配置下推荐 1500w 以上数据就开始考虑。

垂直拆分

垂直拆分是根据数据的业务相关性进行拆分。

在分库逻辑中,可以将多个表分到不同的库,而在分表逻辑中可以将不同的字段拆到不同的表。


垂直拆分可以使数据按照业务各类,让数据更加清楚纯粹,但是垂直拆分无法处理单个业务领域的数据暴增问题。

水平拆分

水平拆分就是将同样的表结构或者库结构创建多份,而将请求分散到这些库或者表中。

水平拆分涉及的分片方式通常有如下几种:

  1. Hash 分片
  2. 范围分片

分表分库的方式

分表分库的方式可以分为以下三种:

  1. 客户端分片
  2. 代理服务器分片
  3. 分布式数据库

ShardingSphere 就是属于客户端分片的实现,使用该类实现需要额外在项目中配置分片规则。

例如 ShardingSphere 中就需要选择分片键然后根据分片键进行 Hash,需要实现 In / Equel / Between 三种形式的 SQL 分片。

框架本身在分析了 SQL 的执行目标之后,将 SQL 中的虚拟表名替换为真实表名,从而进行分表。

results matching ""

    No results matching ""