数据库优化解决海量数据

介绍

本篇内容主要讲解“数据库优化解决海量数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习”数据库优化解决海量数据”吧!

(一)分离活跃数据

,,,,,,有些数据总数据量很大,但是活跃数据并不多。比如用户,注册用户很多,但是活跃用户数很少。这时可以将活跃数据与不活跃数据分离。活跃数据单独存放在活跃表中,并通过离线任务,定时地将活跃表中的变为不活跃的数据迁移出去。查询时先从活跃表中查询数据,如果查询不到,再从非活跃表中查询数据。这样可以提高查找效率。

(二)读写分离

,,,,,,读写分离的本质是对数据库进行集群,将对数据库的操作从单台数据库服务器分散到多个数据库服务器去处理,从而降低单台服务器的压力。考虑到集群中所有服务器存储的数据必须保持一致,一般采用一主多从的设计架构,主服务器用于数据写入,多个从服务器用于数据读取,从而在高并发请求的场景下分散了读压力。主服务器向从服务器同步数据时,如果从服务器数量较多,可以让主服务器先向其中一部分从服务器同步数据,第一部分从服务器接收到数据后再向另外一部分同步。

(三)批量读取和延迟修改

,,,,,,,,批量读取和延迟修改是通过减少操作的次数来提高效率。单个上游请求中的多条数据查询可以合并为一条批量查询,或者对于一段时间内的多个请求的数据查询合并为一次数据查询。延迟修改主要针对高并发且频繁修改的数据,可以现将修改的结果暂时保存在缓存中,然后定时将缓存中的数据保存到数据库中。程序在读取数据时可以同时读取数据库和缓存中的数据。但这会带来短暂的数据不一致的问题,而且当缓存发生故障时,未写入数据库中的数据可能会丢失。

(四)分布式数据库

,,,,,,,,分布式数据库是将多个表存放到不同的数据库中,然后再存放到不同的服务器中。这样在处理请求时,如果需要调用多个表,可以让多台服务器同时处理,从而提高处理速度。分布式数据库是用来解决单个请求本身就非常复杂的问题,将单个复杂的请求分配到多个服务器处理。使用分布式后的每个节点还可以同时使用读写分离,组成多个节点群。还可以将不同业务的数据表保存到不同的节点,让不同的业务调用不同的数据库。使用分布式数据库会面临数据一致性的问题和多表查询的问题。

(五)数据库优化,

,,,,,,数据库优化主要包括:表结构优化,索引优化,SQL语句优化,分区分表,使用存储过程。

,,,,,, <强>表结构优化:大表拆分为多个子表,查询相关度高的字段存放在一个表中,冗余部分业务数据;

,,,,,<>强索引优化:强索引的本质就是在数据发生变化时,按照预先指定的字段排列顺序,保存到一个类似于表的结构中,按索引字段查询时,即可通过该结构获取数据记录的指针并从数据表中获取记录。使用索引进行扫描,其效率高于全表扫描。但是要注意索引使用的是否合理,索引是否带来明显的效率提升,多个索引共存时,一次查询到底使用了哪个索引。索引太多会不会影响存储引擎优化查询的效率,索引太多会不会影响数据的更新效率,使用聚簇索引时,索引中包含的数据量是否会过大,导致缓存放不下而要访问磁盘。

,,,,,<强> SQL语句优化:包括语法层面和业务逻辑的优化,配合索引和缓存。不要返回所有列的数据,一次批量查询也不要返回太多条记录,因为查询结果是可以存放在数据库服务器的缓存中的。然后就是需要做好监控和慢查询日志,及时发现慢查询并分析原因。同一条查询语句对于不同的查询条件,其执行结果可能也不一样。

,,,<>强分区:将一张表中的数据按照一定的规则分到不同的区来保存。比如按时间划分。这样在查询时,如果数据的范围在同一个区内,就可以只对一个区的数据进行操作。

,,,<>强分表:强如果一张表中的数据可以分为多种不同的类型,并且对不同类型的数据同时操作的场景不多时,可以考虑把不同类型的数据保存在不同的表中,或者可以将一个大表拆分成多个小表,从而减小锁的粒度比。如某个表的访问频率很高,某个写操作只更改个别列的数据,而其他未被修改的列可能被别的查询请求访问,这时就可以通过分表来提高查询效率。分表的问题在于如何查找到对应的表,以及查询完整数据的时候就需要多表操作了。

,,,<强>使用存储过程:

数据库优化解决海量数据