周端鋒,李科峰
(湖南第一師范學院現代教育技術中心,湖南長沙 410205)
?
ASP.NET大數據分頁效率研究
周端鋒,李科峰
(湖南第一師范學院現代教育技術中心,湖南長沙 410205)
大數據分頁顯示是常用的ASP.NET數據顯示方式,不同的多頁數據加載顯示方法的效率有很大的區別。本文分析了數據源、存儲過程、外層查詢指定頁、內層查詢指定頁四種方法的大數據分頁效率,并對翻頁時間、安全性進行初步的比對研究,指出了大數據分頁的最優效率方法。
ASP.NET;大數據;分頁;效率
隨著云計算、物聯網等快速的發展,數據呈現爆炸式的增長,人們正被數據洪流所包圍,大數據的時代已經到來[1]。WEB應用從數據庫中讀取數據,再把這些數據以合適的多頁的方式呈現給用戶。很顯然,不同的多頁數據加載顯示方法需要加載的時間大不相同,且對服務器、網絡及用戶終端的性能要求有很大的區別,因此有必要研究不同的數據分頁技術之間的效率性能差別。
在測試中采用Oracle 10g數據庫,計算機硬件為RAM 3.42G/CPU Intel i5-4590,Windows732位,7200轉硬盤。
建立五張測試表,測試表中有兩個字段及并建立索引,數據量從1000條到1000萬條呈數量級增加。使用PL/SQL語句插入多條數據[2],例如一次插入1000條數據:
Declare i int:=1;Begin loop
insert into zdftest3(id,msg) values(i,’中華...!’);
exit when i=1000;i:=i+1;end loop;end;
ASP.NET是微軟的一種網站開發技術,具有性能好、可擴展性強及易學易用等特點,現有大量基于ASP.NET技術構架的網站。在顯示大量數據的數據表時一般使用多頁的方式,這種多頁的顯示方式就是分頁技術。在ASP.NET中分頁技術有多種,可以分為:使用SQL語句選出所有記錄再使用內置GridView控件分頁;使用SQL語句選擇當前頁記錄再使用Repeater手工分頁;使用存儲過程分頁由于存儲過程讀取數據算法非常靈活,因此使用存儲過程分頁算法效率也有區別。
2.1 使用控件分頁
在ASP.NET中,最簡單、最常用的數據分頁方法是使用DataSource控件與GridView控件結合進行分頁。使用DataSource可以連接多種數據庫,將讀取數據的PL/SQL語句寫在ASP.NET的窗體頁面之中,支持數據分頁顯示、排序、修改和刪除,普遍適用于初學者。使用Oracle 10g數據庫,控件分頁測試1000條到1000萬條數據,每頁顯示50條數據進行分頁的響應時間,讀取三次取平均值取三位小數,測試結果在表1的方法1中。

表1 數據分頁響應時間 秒
2.2 使用PL/SQL游標存儲過程分頁
使用存儲過程讀取數據,是將查詢語句放到數據庫存儲過程中結合顯式或隱式游標讀取數據,然后使用ASP.NET的內置控件進行分頁顯示。這種方式讀取數據在使用參數查詢時安全性較高,但是讀取速度與直接使用PL/SQL語句沒有本質的區別,在數據量較大時讀取速度低于直接使用SQL語句。
此兩種讀取數據方式在數據量達到1000萬條時報內存溢出錯誤,也就是說,這兩種方法的思路在于一次讀取全部數據再進行分頁顯示,計算機無法處理全部數據并分頁顯示導致錯誤出現。測試結果在表1的方法2中。
2.3 使用Repeater和PL/SQL的rownum讀到指定頁數據(外層查詢)
Oracle數據庫的PL/SQL中使用rownum可以讀取指定的數據,其功能與SQLServer等數據庫中的select top相似。要讀取1萬條數據在某分頁表中以每頁50條數據進行顯示,使用PL/SQL讀取要顯示當前頁的50條數據,結合Repeater進行顯示,使用帶參數的URL指定翻頁參數,根據總頁數及當前頁計算并顯示頁碼。
例如,使用PL/SQL語句讀取第5頁的典型寫法為:select id,msg from (select rownum as rn,id,msg from zdftest4order by id ) where rn>50*4and rn<=50*5,在這里需要按指定的字段進行排序必須使用子句,不使用子句排序會出現結果排序錯誤。
此種方法克服了前兩種方法中的一次讀取全部數據的處理和分頁顯示慢的問題,其核心是使用PL/SQL語句在所有記錄中選取當前頁的數據。使用分頁讀取方式大大節省了讀取數據時間,1000萬條也可以進行數據分頁顯示。測試結果在表1的方法3中。
2.4 使用Repeater和PL/SQL的rownum讀到指定頁數據(內層查詢)
在Oracle優化模式CBO下,可以將外層的查詢推到內層查詢中,大幅提高大數據模式下的查詢效率。與方法3中的外層查詢比較,可以看出內層查詢是從當前頁及當前頁之前頁的數據記錄中讀取當前頁的數據,查詢上限被推送到內層查詢中大大減少查詢結果。
這種內層查詢的典型方法為:Select * from (select id,msg,rownum as rn from(select * from zdftest3order by id )where rownum<=50*5) where rn>50*4。
測試結果在表1的方法4中,表1中的時間為靠近首頁的讀取顯示時間,從1000萬條數據讀取分頁顯示時間來看,較前三種方法響應時間大幅度地減少。
使用內層查詢靠前頁的數據時,內層查詢上限數據小所以查詢速度快,查詢靠尾頁的數據時內層查詢上限數據大導致查詢速度大幅下降。例如每頁顯示50條數據在顯示第1000頁的數據時查詢上限為:rownum<=50*1000,而在顯示第20萬頁的數據時查詢上限為:rownum<=50*200000,因此內層查詢的數據分頁方法有必要測試讀取靠近首頁與靠近尾頁的速度變化值。測試107條/20萬頁數據查詢讀取不同頁的時間取三位小數見表2。
從測試結果可以看出,內層查詢顯示近首頁的分頁數據時比外層查詢快很多,但是顯示近尾頁的數據時響應時間與外層查詢接近,也就是說,內層查詢的最快頁顯示時間是外層查詢的1/40,最慢頁顯示速度與外層查詢相同。很顯然,在顯示20萬頁的數據時,作為用戶來說查看前100頁的數據機會比查看最后100頁數據的機率要大得多,用戶體驗也更優。

表2 內層查詢讀取不同頁的響應時間 秒
經過測試四種基本分頁方法可以看出,在數據量達到100萬條或更多時,不同的讀取分頁方式的速度區別非常大。方法1和方法2有相似的響應時間,其實這兩種方法都是用SQL一次讀出所有數據再分頁顯示出來;方法3只是在所有記錄中讀出當前頁的50條數據,較前兩種方法響應時間大幅度減少;方法4的思路是在當前頁及前頁的所有記錄中讀出當前頁50條數據,因此讀取靠近首頁的數據速度幾乎與記錄條數無關,但是靠近尾頁讀取數據速度與方法3相近。
3.1 分頁時間
分頁時間是指用戶第一次加載分頁數據并顯示頁碼所用的時間。可以明顯看出,在大數據分頁時,一次讀取所有數據再進行分頁的時間較長,甚至不能讀出數據;而使用Repeater和PL/SQL的rownum讀到指定頁數據(內層查詢)是最優方案,讀取數據的速度是其它方案的幾倍到幾十倍。
3.2 翻頁時間
翻頁時間是指用戶通過多頁數據顯示的頁碼,從當前頁切換到其它要顯示頁所用的時間。方法1、方法2和方法3所使用的翻頁時間與分頁時間是一樣的,但是第4種方法翻頁時間會隨頁碼的增加而增加,除最后一頁翻頁時間與方法3相近,其它翻頁所用的時間最少,但是用戶加載數據、查看數據大多在前數十頁,無疑方法3的用戶體驗遠遠優于其它方法。因此,從翻頁時間來看,方法3是這四種方案中最好的一種。
3.3 安全性
數據安全是WEB安全的重要要求之一,使用SQL語句讀取數據時可能存在安全漏洞。統計表明,在互聯網的WEB服務器遭受的各類應用層攻擊中,SQL注入占有極大的比例[3]。因此,在使用SQL語句查詢時一定要使用參數查詢而不能使用組裝的SQL語句。如果使用方法2中存儲過程的參數查詢,再結合方法4內層指定頁查詢,才是最快和最安全的查詢方式。
[1]孟小峰,慈祥.大數據管理:概念、技術與挑戰[J].計算機研究與發展,2013(1):146-169.
[2]王海亮.精通Oracle 10g SQL和PL/SQL[M].北京:中國水利水電出版社,2007.
[3]周敬利,王曉鋒,余勝生,等.一種新的反SQL注入策略的研究與實現[J].計算機科學,2006(11):64-68.
Research on the Big Data Paging Efficiency of ASP.NET
ZHOU Duan-feng,LI Ke-feng
(Hunan First Normal University,Changsha Hunan 410205,China)
Paging display is commonly used in ASP.NET,there is a big difference between the different paging display method. In this research,a comparative analysis of paging efficiency with data source,stored procedure,outer query to specified page and inner query to specified page.And also comparative analysis of paging time and paging security,pointed out a best method for big data paging in ASP.NET.
ASP.NET;big data;paging;efficiency
2016-04-25
湖南第一師范學院科研課題資助項目“校園網站數據訪問性能與安全研究”(XYS14N11);湖南第一師范學院科研課題資助項目“基于新媒體環境的移動學習模式研究”(XYS15N07)。
周端鋒(1978- ),男,講師,從事WEB程序研究。
TP311
A
2095-7602(2016)10-0059-03