利用表分区的大数据库优化方法
2018-12-18高丽娟
高丽娟
摘要:与常规数据库相比,大数据库不仅仅是数据存储量巨大,每一个表结构记录的条数也更大,其对于系统管理、系统性能等提出了许多新的要求。为了对大数据表在查询过程中农工存在的延迟问题以及管理问题进行解决,可以将表分区方法引入其中。该文从表分区的原理出发,以SQL Server 2012为例,对大数据库优化中表分区的实现方法进行了研究和讨论,希望能够借此提升大数据库数据管理与查询的效率。
关键词:表分区;大数据库;优化
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)26-0018-02
Abstract: Compared with the conventional database, the large database is not only a huge amount of data storage, but also a larger number of records per table structure. It puts forward many new requirements for system management and system performance. In order to solve the delay problem and management problem of the agricultural workers in the query process of the big data table, the table partitioning method can be introduced. Based on the principle of table partitioning, this paper takes SQL Server 2012 as an example to study and discuss the implementation method of table partitioning in large database optimization, hoping to improve the efficiency of large database data management and query.
Key words: table partitioning; large database; optimization
大数据背景下,海量数据的存储与管理成为了人们关注的核心问题,一些大型数据库的存储量达到了TB甚至PB的级别,单个表格记录的数据可以达到数千万甚至上亿,这个数据还会随着数据库的更新而不断增加。在这样的背景下,数据库运行效率受到了很大影响,维护管理的难度也大大增加,想要对大数据库进行有效管理,可以将表分区的方法引入其中,针对大数据库进行优化。
1 表分区的原理
表分区的基本原理,是将存在于数据库中的达标的数据分割开来,形成被称为分区的若干较小的子集,类型有很多,如NTFS、FAT32等,这些子集如果从逻辑关系分析,依然属于一张表。对于程序人员而言,表分区高度透明,因此在进行程序开发设计的过程中,并不需要考虑表分区的物理存储问题。结合SQL Server 数据库进行分析,表分区表现为垂直分区和水平分区两种不同形式,前者指將表分成行数相同,列数较少的表,后者则是将表分为列数相同,行数较少的表。通过大表分区的方式,能够显著提升数据查询效率,如果需要对某个分区中的对象进行查询,则只需要针对其所在的分区进行扫描即可。举例说明,某数据表记录的数据条数达到了千万级别,如果依照月份对数据表进行分区,则特定月份的查询可能只需要在百万级或者十万级的基础上进行扫描,能够极大地压缩查询范围。在进行表分区的过程中,如果系统本身设置有复数的CPU或者磁盘,可以在不同磁盘上,设置不同分区表,结合并行操作,能够促进系统响应性能的强化,提升其对于数据的吞吐量和吞吐效率。如果条件允许,可以以表分区为基本单位,针对数据进行必要的操作,如移动、备份等,确保在系统遭遇故障或者风险时,不会出现大规模数据损坏或者丢失的情况,技术人员只需要对故障分区进行隔离和恢复即可,故障影响范围更小,处理速度更快,数据的维护和管理也更加便捷[1]。
2 表分区的实现
这里以SQL Server 2012数据库为例,对利用表分区实现大数据优化的方法进行简单分析。
2.1 数据文件结构
在SQL Server 2012数据库中,数据文件的常见类型有三种:一是主数据文件(.mdf),这是每一个数据库中必然存在的数据文件,系统相关的各种信息都存储在其中,而且配合相应的系统功能,主数据文件还能够实现对数据库中其他文件的跟踪;二是辅助数据文件(.ndf),与主数据文件的单一性不同,辅助数据文件在数据库中可能没有,也可能有多个,其主要功能是对用户数据进行存储;三是日志文件(.idf),任何数据库都至少有一个日志文件,其中包含了数据库故障恢复所需的各种信息,日志文件并不属于任何文件组[2]。
为了方便进行分配和管理,很多时候技术人员都会对数据库文件进行分组,如果分组中包含主数据文件,则可以将其称为主文件组,其余的文件组属于用户定义文件组,在每个数据库中并不具备唯一性,可以有一个,也可以很多个。
2.2 表分区实现步骤
在SQL Server 2012数据库中,表分区的创建需要依照基本步骤进行:一是开展整体规划,具体来讲,就是结合数据库的实际情况,针对分区字段和分区个数等参数信息进行明确;二是做好分区函数创建,结合分区函数,确定不同分区表的边界。分区函数可以对表分区逻辑框架进行确定,通常可以利用T-SQL语句完成[3]:
CREATE FUNCTION Partition_Function Name(Parameter Type) AS RANGE[LEFT/RIGHT] FOR VALUES ([boundary_value[,…,n]])。
分区函数与常规意义上的用户自定义函数存在很大区别,仅仅被用于分区表的创建;三是创建分区方案,分区方案或者说分区架构可以将每一个分区映射到相应的文件组中,在方案中应该确定好分区方案,然后运用相应的计算机语言,生成分区方案语句:
CREATE PARTITION SCHEME partition_scheme_name AS PARTITION partition_name TO(file_group_name,…)。
从具体情况分析,所有分区表的映射都能够集中在一个文件组内,当然也可以选择部分分区表在一个文件组内完成映射,从保证数据库运行效果的角度,在条件允许的情况下,应该尽量在不同文件组映射不同分区表,以此来实现I/O均衡。在分区表创建过程中,分区函数和分区方案非常关键,两者只被用于分区表及分区索引中;四是分区表或索引创建,对象创建环节,必须指定要使用的分区方案,然后就可以运用T-SQL语句进行分区表或者分区索引的创建[4]。
3 表分区的管理
表分区的应用,能够对大数据库进行优化,提升数据维护管理的便利性。而结合表分区实现方法分析,分区函数的改变是实现分区操作的基础和前提,如果其在運行过程中产生变化,则在经过分区架构的传递后,这种变化会在分区表中体现出来。结合实践分析,对应的变化包括了分区拆分、分区添加、分区删除、分区合并等,在没有特殊要求的情况下,无论是分区拆分还是分区合并,只需修改分区函数就能实现,但是如果想要确定分区表映射的文件组,必须利用分区架构,经NRXT USED指定T-SQL语句。分区拆分与合并的主要作用是实现数据备份转移,SQL Server 2012中,可以结合基于元数据的操作,实现数据在不同分区的转移,数据本身并不需要进行移动,而且整个过程耗时极短,基本不会对系统产生影响。从用户的角度,可以针对分区数据开展如下操作:一是对某个分区进行重新指派,形成单表;二是将一张表看做是一个分区,转移到另外一个已经存在的分区表中[5]。
4 结束语
总而言之,面对大数据库中存储的海量数据,可以引入分区表的方法来进行优化,提升大数据库数据处理的效率和管理维护效果。本文结合表分区的基本原理,以SQL Server 2012数据库为例,对表分区的实现方法及管理进行了分析,对比以往的大数据库数据处理模式,在引入表分区方法后,能够极大地压缩数据查找范围,提升数据查询效率,也可以实现I/O均衡,促进系统数据即时吞吐量的提高。
参考文献:
[1] 周涛,杨丽红,张军,等.SQL Server 2005大型数据库优化之表分区详解[J].云南大学学报:自然科学版,2013,35(s2):59-62.
[2] 周奇才,甘凯,王磊,等.大型设备远程监控与管理系统数据库优化方法研究与应用[J].机电一体化,2015,21(9):39-43.
[3] 杨莹.基于Oracle数据库大数据的检索优化分析与设计[J].数码世界,2017(4):31-32.
[4] 王三蕊.ORACLE数据库优化之分区技术[J].电子技术与软件工程,2016(12):182-183.
[5] 郭玲.弱匹配模型下的数据库分区查询方法研究[J].科技通报,2015(1):199-201.
[通联编辑:光文玲]