摘 要:在Oracle數據庫中,如果遇到容量特別大的表(如GB級、TB級),可以使用分區(qū)的表來改變其應用程序的性能,而移動話費清單的數據量至少可以用GB級來計量了,存儲類似于這種海量數據的用Oracle分區(qū)技術處理是最為合適的。本文簡述了Oracle數據庫中分區(qū)表技術的作用及該技術在移動話費清單中的應用,讓大家對Oracle數據庫分區(qū)技術有了更進一步的了解。
關鍵詞:Oracle;分區(qū)表;移動話費
中圖分類號:TP311.13
據工信部統(tǒng)計,截止2013年12月底,中國移動電話用戶總數突破12.6億戶。處理這類巨大型的數據,對于數據庫管理員來說,工作量是非常大的。
Oracle數據庫提供了一種可以處理海量數據的分區(qū)技術,在實際工作中,如果遇到的數據量是GB級或TB級的,可以使用Oracle中的分區(qū)表來改變其應用程序的性能。
基于上述情況,如果需要查詢某個地區(qū)或時間段的移動話費清單,采用Oracle數據庫系統(tǒng)提供的分區(qū)工表來存儲這些海量數據是非常合適的。
1 分區(qū)表簡介
分區(qū)表是指將巨型的表或索引分割成相對較小、可獨立管理的部分。Oracle的表分區(qū)功能通過改善可管理性、性能和可用性,從而為各式應用程序帶來了極大的好處。通常,分區(qū)可以使某些查詢以及維護操作的性能大大提高。此外,分區(qū)還可以極大簡化常見的管理任務,分區(qū)是構建千兆字節(jié)數據系統(tǒng)或超高可用性系統(tǒng)的關鍵工具。
分區(qū)功能能夠將表、索引或索引組織表進一步細分為段,這些數據庫對象的段叫做分區(qū)。每個分區(qū)有自己的名稱,還可以選擇自己的存儲特性。
從數據庫管理員的角度來看,一個分區(qū)后的對象具有多個段,這些段既可進行集體管理,也可單獨管理,這就使數據庫管理員在管理分區(qū)后的對象時有相當大的靈活性。但是,從應用程序的角度來看,分區(qū)后的表與非分區(qū)表完全相同,使用SQL DML命令訪問分區(qū)后的表時,無需任何修改。
1.1 分區(qū)表的優(yōu)勢
(1)增強可用性。如果表的某個分區(qū)損害,表在其他分區(qū)的數據仍然可用;
(2)維護方便。如果表的每個分區(qū)損害,只需修復該分區(qū)即可;
(3)均衡I/O。可以把不同的分區(qū)映射到不同的磁盤以平衡I/O,改善整個系統(tǒng)性能;
(4)改善查詢性能。對分區(qū)表的查詢可以只搜索自己關心的分區(qū),以提高檢索速度。
1.2 分區(qū)表的類型
(1)范圍分區(qū)。對數據表中的某個值的范圍進行分區(qū),根據某個值的范圍,決定將該數據存儲在哪個分區(qū)上。如根據序號分區(qū),根據業(yè)務記錄的創(chuàng)建日期進行分區(qū)等;
(2)Hash分區(qū)(散列分區(qū))。通過指定分區(qū)編號來均勻分布數據的一種分區(qū)類型,因為通過在I/O設備上進行散列分區(qū),使得這些分區(qū)大小一致;
(3)List分區(qū)(列表分區(qū))。需要明確地控制如何將行映射到分區(qū)時,就使用列表分區(qū)方法;
(4)組合分區(qū)。有兩個數據分布辦法用于創(chuàng)建混合分區(qū),表首先通過第一個數據分布辦法進行初始化分區(qū),然后每個分區(qū)再通過第二個辦法分成子分區(qū)??捎玫慕M合分區(qū)如下:范圍-哈希,范圍-列表,范圍-范圍,列表-范圍,列表-列表,列表-哈希。
除此之外,Oracle 11g還新增四種分區(qū)技術。分別是間隔分區(qū)、引用分區(qū)、基于虛擬列分區(qū)、交換分區(qū)。
2 創(chuàng)建存儲移動話費清單數據表
基于移動話費清單數據表的復雜性,因此,在進行表分區(qū)時,主分區(qū)采用按月份進行分區(qū),子分區(qū)按地區(qū)進行分區(qū)。
(1)為了方便管理數據表,創(chuàng)建特定的表空間存放話費清單數據表,創(chuàng)建的表空間和數據表如下。
create tablespace nw datafile'e:\data\nw01.dbf' size 100m autoextend on;
create temporary tablespace nwtemp tempfile'e:\data\nwtemp.dbf' size 300m;
create table mobilephone
(name varchar2(10) not 1,phone_number varchar2(20) not 1,month date not 1 ,region_id varchar2(50) not 1 )
partition by range(month)
subpartition by list(region_id)
(partition p1 values less than (to_date('2013-01-01','yyyy-mm-dd')),
partition p2 values less than (to_date('2013-02-01','yyyy-mm-dd')),
partition p3 values less than (to_date('2013-03-01','yyyy-mm-dd')),
partition p4 values less than (to_date('2013-04-01','yyyy-mm-dd')),
partition p5 values less than (to_date('2013-05-01','yyyy-mm-dd')),
partition p6 values less than (to_date('2013-06-01','yyyy-mm-dd')),
partition p7 values less than (to_date('2013-07-01','yyyy-mm-dd')),
partition p8 values less than (to_date('2013-08-01','yyyy-mm-dd')),
partition p9 values less than (to_date('2013-09-01','yyyy-mm-dd')),
partition p10 values less than (to_date('2013-10-01','yyyy-mm-dd')),
partition p11 values less than (to_date('2013-11-01','yyyy-mm-dd')),
partition p12 values less than (to_date('2013-12-01','yyyy-mm-dd')),
partition p13 values less than (maxvalue))
(2)查詢速度對比。插入數據到mobilephone中進行驗證,如圖1所示。
圖1 查詢mobilephone表中的數據
從圖1中,可以看出查詢該清單數據表花的時間是8秒。
創(chuàng)建非分區(qū)表,表結構如下:
create table mobilephone1
(name varchar2(10) not 1,phone_number varchar2(20) not 1,month date not 1,region_id varchar2(50) not 1)
在數據表mobilephone1中插入測試數據(與插入mobilephone表的數據相同),在表mobilephone1中進行查詢,結果如圖2所示。
圖2 查詢mobilephone1表中的數據
從圖2中,可以看出查詢該清單數據表花的時間是12秒。從圖1和圖2結果顯示,在沒有創(chuàng)建分區(qū)表中查詢的時間要多4秒。本次測試的數據是14條記錄,如果數據越多,則效果更明顯。
3 結束語
隨著移動用戶的數量不斷增長,移動系統(tǒng)數據庫里的巨型表和索引會越來越多,利用Oracle的分區(qū)技術,將這些巨型的表或索引分割成相對較小可獨立管理的部分,無疑會使簡化數據庫的管理和維護工作,同時也使數據庫的性能得到改善。
參考文獻:
[1]趙振平.Oracle數據庫精講與疑難解析[M].北京:電子工業(yè)出版社,2008.
[2]Oracle Database 10g DBA手冊[M].北京:清華大學出版社,2006.
[3]王偉平.Oracle 11g網絡大講堂[M].北京:清華大學出版社,2013.
[4]張鑫.基于Oracle的電信級數據倉庫查詢優(yōu)化研究與實現[D].西安電子科技大學,2007.
[5]鐘明.基于Oracle成本的系統(tǒng)性能優(yōu)化方法研究與應用[D].中南大學,2011.
[6]徐輝良.基于ORACLE的數據庫性能調優(yōu)技術研究[D].西南交通大學,2009.
作者簡介:游琪,女,江西九江人,講師,碩士研究生,研究方向:計算機應用、數據庫應用。
作者單位:廣東科學技術職業(yè)學院,廣東珠海 519090