大型数据库分区表研究

2016-08-09 07:23史斌
中国新通信 2016年11期
关键词:清华大学出版社分区列表

【摘要】 分区表在大型数据库特别是分布式数据库中占有重要地位,分区是一种“分而治之”的技术,为大量数据提供了可伸缩的性能,提高了对巨型数据库的读写和查询速度。本文主要研究了分布式数据库Oralce 中的List分区表和Range分区表的创建与应用,探讨了其切割和分区表的修改技术。从而可以类推分区表在其它数据库关系系统如大数据中Hive中的应用。

【关键字】 大型数据库Oracle list分区表 range 分区表 分区表的切割

一、引言

分区表应用在大型的分布数据库中,分区是一种“分而治之”的技术,通过将大表引分成可以管理的小块,从而避免了对每个表作为一个大的、单独的对象进行管理,为大量数据提供了可伸缩的性能,提高了巨型数据库的读写和查询速度。

分区表是将一个大的表分割成较小的片段(分区),在实际应用中,分区表的操作是在独立的分区上,但是对用户而言是透明的 [1][2] 。Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指定分区的方法来进行查询。

分区表的主要优点为:

(1)由于将数据分散到各个分区中,减少了数据损坏的可能性;(2)可以对单独的分区进行备份和恢复;(3)可以将分区映射到不同的物理磁盘上,来分散IO;(4)提高可管理性、可用性和性能。

什么时候需要分区表,官网给出了2个建议:

(1)Tables greater than 2GB should always be considered for partitioning.

(2)Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current months data is updatable and the other 11 months are read only.

二、分区表的创建和应用

Oracle 10g以上版本提供了以下几种分区类型:

(1)范围分区(range);(2)哈希分区(hash);(3)列表分区(list);(4)范围-哈希复合分区(range-hash);(5)范围-列表复合分区(range-list)。

这里以应用广泛的list分区和range分区为例说明分区表的应用。

2.1 list 分区表

List分区(列表分区): 通过列表方法(指定字符串值方法)进行分区。 List分区表需要考虑分区的依据,分区的名字,分区值(或者值的区域)每个分区所在的表空间。在分区时必须确定分区列可能存在的值,一旦插入的列值不在分区范围内,则插入/更新就会失败,因此通常建议使用list分区时,要创建一个default分区存储那些不在指定范围内的记录,类似range分区中的maxvalue分区。

create table part_book1

( bid number(4),

bookname VARCHAR2(20),

bookpress VARCHAR2(30),

booktime date)

partition by list(bookpress)

(partition part1 values(‘清华大学出版社) tablespace system,

partition part2 values(‘教育出版社) tablespace users); list分区表的插入同普通表,如下:

SQL> insert into part_book1 values(1,oralce,清华大学出版社,to_date(‘20110102,yyyymmdd));

SQL> insert into part_book1 values(2,音乐基础欣赏,教育出版社,to_date(‘20120102,yyyymmdd));

list分区表可以分区查询,如下:

SQL> select * from part_book1 partition(part1);

创建或修改分区时,可以指定default,把非分区规则的数据,全部放到这个default分区,如除了清华大学出版社, ‘教育出版社之外的出版社,放到分区表part_book1的part3分区中。

SQL> alter table part_book1 add partition part3 values(default) tablespace system;

与分区表相关的数据字典:dba_part_tables,dba_tab_ partitions等等。

2.2 range 分区表

Range 分区表是应用范围比较广的表分区方式[3][4],范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。它是以列的值的范围来做为分区的划分条件,将记录存放到列值所在的range分区中。

比如按照时间划分,某大型企业的数据2015 年1 季度的数据放到a 分区,2015年2 季度的数据放到b分区,因此在创建的时候,需要指定基于的列,以及分区的范围值。若某些记录暂无法预测范围,可创建maxvalue 分区,所有不在指定范围内的记录会存储maxvalue 区。

建立range分区表分区表需要考虑分区的依据,分区的名字,分区值(或者值的区域)每个分区所在的表空间。values less than:后跟分区范围值(如果依赖列有多个,范围对应值也应是多个,中间以逗号分隔);

create table part_book

( bid number(4),

bookname VARCHAR2(20),

bookpress VARCHAR2(30),

booktime date)

partition by range(booktime)

(partition part1 values less than(to_ date(‘20100101,yyyymmdd)) tablespace system,

partition part2 values less than (to_ date(‘20120101,yyyymmdd)) tablespace users,

partition part3 values less than (MAXVALUE) tablespace users

);

insert into part_book values(1,oracle,清华大学出版社,to_date(‘20110102,yyyymmdd));

insert into part_book values(2,oracle,清华大学出版社,to_date(‘20090101,yyyymmdd));

Range 分区表用过一段时间之后,若需要增加新的分区,可以对range分区表进行切割[5]。Range 分区切割的位置为在分区表中间或者开始处或者带有maxvalue值的尾处增加分区。其语法格式如下:

ALTER TABLE 表名 SPLIT PARTITION 分区的名字 AT(值) INTO (PARTITION 新分区的名字1 ,PARTITION 新分区的名字2)

分区表的切割举例:将part3分区切割为两个新的分区,名字为part3、part4,分区的的依据值为20140101.

alter table part_book4

s p l i t p a r t i t i o n p a r t 3 a t ( t o _ date(‘20140101,yyyymmdd))

into(partition part3,partition part4);

Range 分区表的插入和查询操作同 list分区表,在这里不再赘述。 另外对于组合分区:如果某表按照某列分区之后,仍然较大,或者是一些其它的需求,还可以通过分区内再建子分区的方式将分区再分区,即组合分区的方式。

三、总结

分区表提高了大型、巨型数据库的读写和查询速度,为大量数据的存储、读取提供了可伸缩性能,本文主要研究了分布式数据库Oracle 中的List分区表和Range分区表的创建与应用,探讨了其切割和分区表的修改技术。

参 考 文 献

[1] 王立君.并行多媒体数据库中基于内容的高效检索的数据分配方法的研究. [J]科学技术与工程,2013.13(9),2544-2548

[2] 郭晋秦, 韩 焱. 大型数据库聚类中伪装危险数据识别方法研究. 计算机仿真 2015.433-436 32(11)

[3] 徐洪丽,王志军.认知策略与知识结构化的研究与应用-以大型数据库学习为例. 高教学刊. 2016.3 73-74.

[4] 李亚龙, 朱岩. 表分区在分界开关监控系统数据库的应用.2016(25)2: P235-237

[5] 史斌.大型数据库管理系统 Oracle 体系结构. 电脑编程技巧与维护. 2010.18:p72-74

猜你喜欢
清华大学出版社分区列表
上海实施“分区封控”
另辟蹊径使用Linux备份和还原Windows系统
扩列吧
Desperate Love towards the Dark Lady in Shakespeare’s Sonnets
安装Windows 10时创建分区错误该怎么办
Appreciation of “August” by Charles Dickens from the Angle of Deviation
《秘书工作手记》
列表法解分式方程问题探索
列表画树状图各有所长
2011年《小说月刊》转载列表