国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

ASP.NET大數(shù)據(jù)分頁效率研究

2016-12-13 07:23:02周端鋒李科峰
關(guān)鍵詞:翻頁內(nèi)層控件

周端鋒,李科峰

(湖南第一師范學(xué)院現(xiàn)代教育技術(shù)中心,湖南長沙 410205)

?

ASP.NET大數(shù)據(jù)分頁效率研究

周端鋒,李科峰

(湖南第一師范學(xué)院現(xiàn)代教育技術(shù)中心,湖南長沙 410205)

大數(shù)據(jù)分頁顯示是常用的ASP.NET數(shù)據(jù)顯示方式,不同的多頁數(shù)據(jù)加載顯示方法的效率有很大的區(qū)別。本文分析了數(shù)據(jù)源、存儲(chǔ)過程、外層查詢指定頁、內(nèi)層查詢指定頁四種方法的大數(shù)據(jù)分頁效率,并對(duì)翻頁時(shí)間、安全性進(jìn)行初步的比對(duì)研究,指出了大數(shù)據(jù)分頁的最優(yōu)效率方法。

ASP.NET;大數(shù)據(jù);分頁;效率

隨著云計(jì)算、物聯(lián)網(wǎng)等快速的發(fā)展,數(shù)據(jù)呈現(xiàn)爆炸式的增長,人們正被數(shù)據(jù)洪流所包圍,大數(shù)據(jù)的時(shí)代已經(jīng)到來[1]。WEB應(yīng)用從數(shù)據(jù)庫中讀取數(shù)據(jù),再把這些數(shù)據(jù)以合適的多頁的方式呈現(xiàn)給用戶。很顯然,不同的多頁數(shù)據(jù)加載顯示方法需要加載的時(shí)間大不相同,且對(duì)服務(wù)器、網(wǎng)絡(luò)及用戶終端的性能要求有很大的區(qū)別,因此有必要研究不同的數(shù)據(jù)分頁技術(shù)之間的效率性能差別。

1 運(yùn)行環(huán)境與測試準(zhǔn)備

在測試中采用Oracle 10g數(shù)據(jù)庫,計(jì)算機(jī)硬件為RAM 3.42G/CPU Intel i5-4590,Windows732位,7200轉(zhuǎn)硬盤。

建立五張測試表,測試表中有兩個(gè)字段及并建立索引,數(shù)據(jù)量從1000條到1000萬條呈數(shù)量級(jí)增加。使用PL/SQL語句插入多條數(shù)據(jù)[2],例如一次插入1000條數(shù)據(jù):

Declare i int:=1;Begin loop

insert into zdftest3(id,msg) values(i,’中華...!’);

exit when i=1000;i:=i+1;end loop;end;

2 ASP.NET常用的數(shù)據(jù)分頁技術(shù)

ASP.NET是微軟的一種網(wǎng)站開發(fā)技術(shù),具有性能好、可擴(kuò)展性強(qiáng)及易學(xué)易用等特點(diǎn),現(xiàn)有大量基于ASP.NET技術(shù)構(gòu)架的網(wǎng)站。在顯示大量數(shù)據(jù)的數(shù)據(jù)表時(shí)一般使用多頁的方式,這種多頁的顯示方式就是分頁技術(shù)。在ASP.NET中分頁技術(shù)有多種,可以分為:使用SQL語句選出所有記錄再使用內(nèi)置GridView控件分頁;使用SQL語句選擇當(dāng)前頁記錄再使用Repeater手工分頁;使用存儲(chǔ)過程分頁由于存儲(chǔ)過程讀取數(shù)據(jù)算法非常靈活,因此使用存儲(chǔ)過程分頁算法效率也有區(qū)別。

2.1 使用控件分頁

在ASP.NET中,最簡單、最常用的數(shù)據(jù)分頁方法是使用DataSource控件與GridView控件結(jié)合進(jìn)行分頁。使用DataSource可以連接多種數(shù)據(jù)庫,將讀取數(shù)據(jù)的PL/SQL語句寫在ASP.NET的窗體頁面之中,支持?jǐn)?shù)據(jù)分頁顯示、排序、修改和刪除,普遍適用于初學(xué)者。使用Oracle 10g數(shù)據(jù)庫,控件分頁測試1000條到1000萬條數(shù)據(jù),每頁顯示50條數(shù)據(jù)進(jìn)行分頁的響應(yīng)時(shí)間,讀取三次取平均值取三位小數(shù),測試結(jié)果在表1的方法1中。

表1 數(shù)據(jù)分頁響應(yīng)時(shí)間 秒

2.2 使用PL/SQL游標(biāo)存儲(chǔ)過程分頁

使用存儲(chǔ)過程讀取數(shù)據(jù),是將查詢語句放到數(shù)據(jù)庫存儲(chǔ)過程中結(jié)合顯式或隱式游標(biāo)讀取數(shù)據(jù),然后使用ASP.NET的內(nèi)置控件進(jìn)行分頁顯示。這種方式讀取數(shù)據(jù)在使用參數(shù)查詢時(shí)安全性較高,但是讀取速度與直接使用PL/SQL語句沒有本質(zhì)的區(qū)別,在數(shù)據(jù)量較大時(shí)讀取速度低于直接使用SQL語句。

此兩種讀取數(shù)據(jù)方式在數(shù)據(jù)量達(dá)到1000萬條時(shí)報(bào)內(nèi)存溢出錯(cuò)誤,也就是說,這兩種方法的思路在于一次讀取全部數(shù)據(jù)再進(jìn)行分頁顯示,計(jì)算機(jī)無法處理全部數(shù)據(jù)并分頁顯示導(dǎo)致錯(cuò)誤出現(xiàn)。測試結(jié)果在表1的方法2中。

2.3 使用Repeater和PL/SQL的rownum讀到指定頁數(shù)據(jù)(外層查詢)

Oracle數(shù)據(jù)庫的PL/SQL中使用rownum可以讀取指定的數(shù)據(jù),其功能與SQLServer等數(shù)據(jù)庫中的select top相似。要讀取1萬條數(shù)據(jù)在某分頁表中以每頁50條數(shù)據(jù)進(jìn)行顯示,使用PL/SQL讀取要顯示當(dāng)前頁的50條數(shù)據(jù),結(jié)合Repeater進(jìn)行顯示,使用帶參數(shù)的URL指定翻頁參數(shù),根據(jù)總頁數(shù)及當(dāng)前頁計(jì)算并顯示頁碼。

例如,使用PL/SQL語句讀取第5頁的典型寫法為:select id,msg from (select rownum as rn,id,msg from zdftest4order by id ) where rn>50*4and rn<=50*5,在這里需要按指定的字段進(jìn)行排序必須使用子句,不使用子句排序會(huì)出現(xiàn)結(jié)果排序錯(cuò)誤。

此種方法克服了前兩種方法中的一次讀取全部數(shù)據(jù)的處理和分頁顯示慢的問題,其核心是使用PL/SQL語句在所有記錄中選取當(dāng)前頁的數(shù)據(jù)。使用分頁讀取方式大大節(jié)省了讀取數(shù)據(jù)時(shí)間,1000萬條也可以進(jìn)行數(shù)據(jù)分頁顯示。測試結(jié)果在表1的方法3中。

2.4 使用Repeater和PL/SQL的rownum讀到指定頁數(shù)據(jù)(內(nèi)層查詢)

在Oracle優(yōu)化模式CBO下,可以將外層的查詢推到內(nèi)層查詢中,大幅提高大數(shù)據(jù)模式下的查詢效率。與方法3中的外層查詢比較,可以看出內(nèi)層查詢是從當(dāng)前頁及當(dāng)前頁之前頁的數(shù)據(jù)記錄中讀取當(dāng)前頁的數(shù)據(jù),查詢上限被推送到內(nèi)層查詢中大大減少查詢結(jié)果。

這種內(nèi)層查詢的典型方法為:Select * from (select id,msg,rownum as rn from(select * from zdftest3order by id )where rownum<=50*5) where rn>50*4。

測試結(jié)果在表1的方法4中,表1中的時(shí)間為靠近首頁的讀取顯示時(shí)間,從1000萬條數(shù)據(jù)讀取分頁顯示時(shí)間來看,較前三種方法響應(yīng)時(shí)間大幅度地減少。

使用內(nèi)層查詢靠前頁的數(shù)據(jù)時(shí),內(nèi)層查詢上限數(shù)據(jù)小所以查詢速度快,查詢靠尾頁的數(shù)據(jù)時(shí)內(nèi)層查詢上限數(shù)據(jù)大導(dǎo)致查詢速度大幅下降。例如每頁顯示50條數(shù)據(jù)在顯示第1000頁的數(shù)據(jù)時(shí)查詢上限為:rownum<=50*1000,而在顯示第20萬頁的數(shù)據(jù)時(shí)查詢上限為:rownum<=50*200000,因此內(nèi)層查詢的數(shù)據(jù)分頁方法有必要測試讀取靠近首頁與靠近尾頁的速度變化值。測試107條/20萬頁數(shù)據(jù)查詢讀取不同頁的時(shí)間取三位小數(shù)見表2。

從測試結(jié)果可以看出,內(nèi)層查詢顯示近首頁的分頁數(shù)據(jù)時(shí)比外層查詢快很多,但是顯示近尾頁的數(shù)據(jù)時(shí)響應(yīng)時(shí)間與外層查詢接近,也就是說,內(nèi)層查詢的最快頁顯示時(shí)間是外層查詢的1/40,最慢頁顯示速度與外層查詢相同。很顯然,在顯示20萬頁的數(shù)據(jù)時(shí),作為用戶來說查看前100頁的數(shù)據(jù)機(jī)會(huì)比查看最后100頁數(shù)據(jù)的機(jī)率要大得多,用戶體驗(yàn)也更優(yōu)。

表2 內(nèi)層查詢讀取不同頁的響應(yīng)時(shí)間 秒

3 分頁對(duì)比

經(jīng)過測試四種基本分頁方法可以看出,在數(shù)據(jù)量達(dá)到100萬條或更多時(shí),不同的讀取分頁方式的速度區(qū)別非常大。方法1和方法2有相似的響應(yīng)時(shí)間,其實(shí)這兩種方法都是用SQL一次讀出所有數(shù)據(jù)再分頁顯示出來;方法3只是在所有記錄中讀出當(dāng)前頁的50條數(shù)據(jù),較前兩種方法響應(yīng)時(shí)間大幅度減少;方法4的思路是在當(dāng)前頁及前頁的所有記錄中讀出當(dāng)前頁50條數(shù)據(jù),因此讀取靠近首頁的數(shù)據(jù)速度幾乎與記錄條數(shù)無關(guān),但是靠近尾頁讀取數(shù)據(jù)速度與方法3相近。

3.1 分頁時(shí)間

分頁時(shí)間是指用戶第一次加載分頁數(shù)據(jù)并顯示頁碼所用的時(shí)間??梢悦黠@看出,在大數(shù)據(jù)分頁時(shí),一次讀取所有數(shù)據(jù)再進(jìn)行分頁的時(shí)間較長,甚至不能讀出數(shù)據(jù);而使用Repeater和PL/SQL的rownum讀到指定頁數(shù)據(jù)(內(nèi)層查詢)是最優(yōu)方案,讀取數(shù)據(jù)的速度是其它方案的幾倍到幾十倍。

3.2 翻頁時(shí)間

翻頁時(shí)間是指用戶通過多頁數(shù)據(jù)顯示的頁碼,從當(dāng)前頁切換到其它要顯示頁所用的時(shí)間。方法1、方法2和方法3所使用的翻頁時(shí)間與分頁時(shí)間是一樣的,但是第4種方法翻頁時(shí)間會(huì)隨頁碼的增加而增加,除最后一頁翻頁時(shí)間與方法3相近,其它翻頁所用的時(shí)間最少,但是用戶加載數(shù)據(jù)、查看數(shù)據(jù)大多在前數(shù)十頁,無疑方法3的用戶體驗(yàn)遠(yuǎn)遠(yuǎn)優(yōu)于其它方法。因此,從翻頁時(shí)間來看,方法3是這四種方案中最好的一種。

3.3 安全性

數(shù)據(jù)安全是WEB安全的重要要求之一,使用SQL語句讀取數(shù)據(jù)時(shí)可能存在安全漏洞。統(tǒng)計(jì)表明,在互聯(lián)網(wǎng)的WEB服務(wù)器遭受的各類應(yīng)用層攻擊中,SQL注入占有極大的比例[3]。因此,在使用SQL語句查詢時(shí)一定要使用參數(shù)查詢而不能使用組裝的SQL語句。如果使用方法2中存儲(chǔ)過程的參數(shù)查詢,再結(jié)合方法4內(nèi)層指定頁查詢,才是最快和最安全的查詢方式。

[1]孟小峰,慈祥.大數(shù)據(jù)管理:概念、技術(shù)與挑戰(zhàn)[J].計(jì)算機(jī)研究與發(fā)展,2013(1):146-169.

[2]王海亮.精通Oracle 10g SQL和PL/SQL[M].北京:中國水利水電出版社,2007.

[3]周敬利,王曉鋒,余勝生,等.一種新的反SQL注入策略的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),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

湖南第一師范學(xué)院科研課題資助項(xiàng)目“校園網(wǎng)站數(shù)據(jù)訪問性能與安全研究”(XYS14N11);湖南第一師范學(xué)院科研課題資助項(xiàng)目“基于新媒體環(huán)境的移動(dòng)學(xué)習(xí)模式研究”(XYS15N07)。

周端鋒(1978- ),男,講師,從事WEB程序研究。

TP311

A

2095-7602(2016)10-0059-03

猜你喜歡
翻頁內(nèi)層控件
◆ 裝飾板材
◆ 裝飾板材
裝飾板材
◆ 裝飾板材
打字機(jī)
關(guān)于.net控件數(shù)組的探討
軟件(2018年7期)2018-08-13 09:44:42
讓“翻頁”成為藝術(shù)
中華家教(2018年7期)2018-08-01 06:32:32
會(huì)翻頁的書
自動(dòng)翻頁樂譜架
就這樣玩會(huì)VBA中常見的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
贵南县| 会昌县| 凤凰县| 长沙县| 台南县| 临清市| 荔浦县| 鄂尔多斯市| 广河县| 霞浦县| 长寿区| 通江县| 宁陕县| 兴和县| 江阴市| 祁门县| 永安市| 温州市| 成安县| 子洲县| 甘孜县| 荆州市| 五华县| 湘潭市| 长垣县| 秦皇岛市| 新河县| 沅江市| 元氏县| 晋江市| 威信县| 科尔| 连南| 孙吴县| 曲阜市| 天峻县| 昂仁县| 卓尼县| 梓潼县| 庆云县| 新巴尔虎右旗|