应用优化

在实际生产环境中,由于数据库本身性能的局限,就必须要对前台的应用进行一些优化,来降低数据库的访问压力。

使用连接池

对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的。
我们有必要建立数据库连接池,以提高访问性能。

从名字上理解,“连接池”是一个存放“连接”的“池子”,再具体一些,我们可以把连接当作对象或者设备,统一放在一个“池子”里面,以前需要直接访问数据库的地方,现在都改为从这个“池子”里面获取连接来使用。因为“池子”中的连接都已经预先创建好,可以直接分配给应用使用,因此大大减少了创建新连接所耗费的资源。连接返回后,本次访问将连接交还给“连接池”,以供新的访问使用。

减少对 MySQL 的访问

  1. 避免对数据进行重复检索
    在编写应用代码时,需要能够理清对数据库的访问逻辑。能够一次连接就获取到结果的,就不用两次连接,这样可以大大减少对数据库无用的重复请求。
    select id, name , status from tb_book;
  2. 增加 cache 层
    在应用中,我们可以在应用中增加 缓存 层来达到减轻数据库负担的目的。缓存层有很多种,也有很多实现方式,只要能达到降低数据库的负担又能满足应用需求就可以。
    因此可以部分数据从数据库中抽取出来放到应用端以文本方式存储, 或者使用框架(Mybatis, Hibernate)提供的一级缓存/二级缓存,或者使用redis数据库来缓存数据 。
    MySQL 的查询缓存(MySQL Query Cache)是在4.1 版本以后新增的功能,它的作用是存储SELECT 查询的文本以及相应结果。如果随后收到一个相同的查询,服务器会从查询缓存中重新得到查询结果,而不再需要解析和执行查询。
    查询缓存的适用对象是更新不频繁的表,当表更改(包括表结构和表数据)后,查询缓存值的相关条目被清空。
    在应用中,我们可以在应用端加CACHE 层来达到减轻数据库的负担的目的。CACHE 层有很多种,也有很多种实现的方式,只要能达到降低数据库的负担,又能满足应用就可以,这就需要根据应用的实际情况进行特殊处理。
    比如,可以把部分数据从数据库中抽取出来放到应用端以文本方式存储,然后有查询需求的话,可以直接从这个“CACHE”中检索,由于这里的数据量小所以能够达到很高的查询效率,而且也减轻了数据库的负担。当然这种方案还涉及很多其他问题,比如如果有数据更新怎么办、多长时间刷新一次“CACHE”等,都需要根据具体应用环境进行相应的处理。
    再比如用户可以在应用端建立一个二级数据库,把访问频度非常大的数据放到二级库上,然后设定一个机制与主数据库进行同步,这样用户的主要操作都在二级数据库上进行,大大地降低了主数据库的压力。

    负载均衡

    负载均衡是应用中使用非常普遍的一种优化方法,它的机制就是利用某种均衡算法,将固定的负载量分布到不同的服务器上, 以此来降低单台服务器的负载,达到优化的效果。

    利用MySQL复制分流查询

    通过MySQL的主从复制,实现读写分离,使增删改操作走主节点,查询操作走从节点,从而可以降低单台服务器的读写压力。

    采用分布式数据库架构``