zoukankan      html  css  js  c++  java
  • 数据越来越多,数据库越来越慢该怎么办

    参考:

    数据越来越多,数据库越来越慢该怎么办

    方案一:读写分离,主从复制

    方案二:归档历史数据

    当单表的数据太多,多到影响性能的时候,首选的方案是,归档历史数据。就是把大量的历史数据移到另外一张历史数据表中,因为像订单这类具有时间属性的数据,都存在热尾效应。大多数情况下访问的都是最近的数据。因为新数据只占数据总量中很少的一部分,所以把旧数据和新数据分开存放,可以提高新数据的查询效率。这种方法能起到的效果好,且对系统的改动小,升级成本低

    方案三:分库分表

    分库主要是为了减少每个数据库服务器的访问量,分表主要是为了提高对单个表的数据的查询速度。
    并发大就分库:可以拆分业务就垂直分库,否则水平分库
    查询慢就分表:有冗余字段就垂直分表,否则就水平分表

    水平分表

    字段的值为依据,按照一定策略(hash、range等),将一个中的数据拆分到多个中。把记录分别存到不同的表中
    场景:
    系统绝对并发量并没有上来,只是单表的数据量太多,影响了SQL效率,加重了CPU负担,以至于成为瓶颈。例如表中分表记录各个地区的数据或者不同时期的数据,特别是有些数据常用,有些不常用。
    缺点:
    1、给应用增加复杂度,通常查询时需要多个表名,查询所有数据都需UNION操作
    2、在许多数据库应用中,这种复杂度会超过它带来的优点,查询时会增加读一个索引层的磁盘次数

    垂直分表

    字段为依据,按照字段的活跃性,将中字段拆到不同的(主表和扩展表)中。将同一条记录前半段存到一个表中,后半段存到一个表中
    场景:
    系统绝对并发量并没有上来,表中某些列常用,另外一些列不常用,可以使数据行变小,可以把常用的列和不常用的列放在不同的表中,这样一个数据页能存储更多数据,查询时减少I/O次数
    缺点:
    管理冗余列,查询所有数据需要join操作

    水平分库

    字段为依据,按照一定策略(hash、range等),将一个中的数据拆分到多个
    场景:系统绝对并发量上来了,分表难以根本上解决问题,并且还没有明显的业务归属来垂直分库。

    垂直分库

    为依据,按照业务归属不同,将不同的拆分到不同的
    场景:系统绝对并发量上来了,并且可以抽象出单独的业务模块。
  • 相关阅读:
    centos7安装kafka
    Qt——透明无边框Widget的bug
    Qt——浅谈样式表
    Qt——QLineEdit使用总结
    Qt——信号槽连接:基于字符串与基于函数的连接之间的不同
    Qt——树的搜索实现源码
    Qt——树结点的搜索
    Qt——鼠标拖动调整窗口大小
    Qt——右键菜单
    Qt——正则表达式
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/14154614.html
Copyright © 2011-2022 走看看