百万级数据量,千万级数据量是多少?
这里的百万级,千万级,针对数据库,指的是表的数据条数。有时也指并发事务量。
海量数据的优化方案
Note: 具体优化要结合自身的业务特性
百万级:
这个数据量基本上大家都经历过,也能感知一些性能问题显露出来了,这个阶段的优化几乎是最重要的,因为到后期千万级,甚至亿级别的阶段,数据库几乎无法动弹,可调整性很低。下面主要以字段,索引,sql 编写三方面优化:
- 字段选择优化
- 索引设计优化: 空间换时间的优化策略,基本上根据业务需求设计好索引,足以应付百万级的数据量
- 查询语句优化
千万级:
到了这个阶段的数据量,数据本身已经有很大的价值了,数据除了满足常规业务需求外,还会有一些数据分析的需求。而这个时候数据可变动性不高,基本上不会考虑修改原有结构,一般会考虑从分区,分表,分库三方面做优化:
- 分区: 根据一定的规则,数据库把一个表分解成多个更小的、更容易管理的部分,是一种水平划分
- 分表:
分表分水平分表和垂直分表。
水平分表即拆分成数据结构相同的各个小表,如拆分成 table1, table2...,从而缓解数据库读写压力。
垂直分表即将一些字段分出去形成一个新表,各个表数据结构不相同,可以优化高并发下锁表的情况。
可想而知,分表的话,程序的逻辑是需要做修改的,所以,一般是在项目初期时,预见到大数据量的情况,才会考虑分表。后期阶段不建议分表,成本很大。
- 分库:
分库一般是主从模式,一个数据库服务器主节点复制到一个或多个从节点多个数据库,主库负责写操作,从库负责读操作,从而达到主从分离,高可用,数据备份等优化目的。
当然,主从模式也会有一些缺陷,主从同步延迟,binlog 文件太大导致的问题等等