数据库管理软件选择是否合理、表结构设计是否规范、索引创建是否恰当都是影响数据库性能的重要因素。所以,对数据库进行优化,是实现海量数据高效处理的有效方法之一。常见的数据库优化方法有以下几种:
(1)优秀的数据库管理工具选择一款优秀的数据库管理工具非常重要。
现在的数据库工具厂家比较多,对海量数据的处理对所使用的数据库工具要求比较高,一般使用Oracle、DB2、MySQL等。
(2)数据分区进行海量数据的查询优化,一种重要方式就是如何有效地存储并降低需要处理的数据规模,所以可以对海量数据进行分区操作提高效率。
例如,针对按年份存取的数据,可以按年进行分区,不同的数据库有不同的分区方式,不过处理机制却大体相同。例如,SQL Server的数据库分区是将不同的数据存于不同的文件组下,而不同的文件组存于不同的磁盘分区下,这样将数据分散开,减小磁盘I/O,减小了系统负荷,而且还可以将日志、索引等放于不同的分区下。
3)索引索引一般可以加速数据的检索速度,加速表与表之间的链接,提高性能,所以在对海量数据进行处理时,考虑到信息量比较大,应该对表建立索引,包括在主键上建立聚簇索引,将聚合索引建立在日期列上等。索引优点很多,但是对于索引的建立,还需要考虑到实际情况,而不是对每一个列建立一个索引。例如,针对大表的分组、排序等字段,都要建立相应的索引,同时还应该考虑建立复合索引。增加索引同时也有很多不利的方面:首先,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;其次,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。如果要建立聚簇索引,那么需要的空间就会更大。最后,当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。所以索引要用到好的时机,索引的填充因子和聚集、非聚集索引都要考虑。(4)缓存机制当数据量增加时,一般的处理工具都要考虑到缓存问题。缓存大小设置的好坏也关系到数据处理的成败。例如,在处理2亿条数据聚合操作时,缓存设置为100000条/Buffer可行。(5)加大虚存由于系统资源有限,而需要处理的数据量非常大,所以当内存不足时,可以通过增加虚拟内存来解决。(6)分批处理由于需要处理的信息量巨大,可以对海量数据进行分批处理(类似于云计算中的MapReduce思想),然后再对处理后的数据进行合并操作,分而治之,有利于小数据量的处理,不至于面对大数据量带来的问题。(7)使用临时表和中间表数据量增加时,处理中要考虑提前汇总。这样做的目的是化整为零,大表变小表,分块处理完成后,再利用一定的规则进行合并,处理过程中的临时表的使用和中间结果的保存都非常重要。如果对于超海量的数据,大表处理不了,只能拆分为多个小表。如果处理过程中需要多步汇总操作,可按汇总步骤一步步来。(8)优化查询语句查询语句的性能对查询效率的影响是非常大的。编写高效优良的SQL脚本和存储过程是数据库工作人员的职责,也是检验数据库工作人员水平的一个标准。(9)使用视图视图中的数据来源于基本表,对海量数据的处理,可以将数据按一定的规则分散到各个基本表中,查询或处理过程中可以基于视图进行。(10)使用存储过程在存储过程中尽量使用SQL自带的返回参数,而非自定义的返回参数,减少不必要的参数,避免数据冗余。(11)用排序来取代非顺序存取磁盘存取臂的来回移动使得非顺序磁盘存取变成了最慢的操作,但是在SQL语句中这个现象被隐藏了,这样就使得查询中进行了大量的非顺序页查询,降低了查询速度。(12)使用采样数据进行数据挖掘基于海量数据的数据挖掘正在逐步兴起,面对着超海量的数据,一般的挖掘软件或算法往往采用数据抽样的方式进行处理,这样的误差不会很高,大大提高了处理效率和处理的成功率。一般采样时要注意数据的完整性,防止过大的偏差。5.倒排索引法倒排索引是目前搜索引擎公司对搜索引擎最常用的存储方式,也是搜索引擎的核心内容。在搜索引擎实际的引用之中,有时需要按照关键字的某些值查找记录,所以是按照关键字建立索引,这个索引就被称为倒排索引。倒排索引也常被称为反向索引、置入档案或反向档案,它本质上是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构,有两种不同的反向索引形式:第一种形式是一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表;第二种形式是一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。第二种形式提供了更多的兼容性(如短语搜索),但是需要更多的时间和空间来创建。