• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      周端鋒,李科峰

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

      ?

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

      周端鋒,李科峰

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

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

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

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

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

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

      建立五張測(cè)試表,測(cè)試表中有兩個(gè)字段及并建立索引,數(shù)據(jù)量從1000條到1000萬(wàn)條呈數(shù)量級(jí)增加。使用PL/SQL語(yǔ)句插入多條數(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ù)分頁(yè)技術(shù)

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

      2.1 使用控件分頁(yè)

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

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

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

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

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

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

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

      例如,使用PL/SQL語(yǔ)句讀取第5頁(yè)的典型寫(xiě)法為: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ù)的處理和分頁(yè)顯示慢的問(wèn)題,其核心是使用PL/SQL語(yǔ)句在所有記錄中選取當(dāng)前頁(yè)的數(shù)據(jù)。使用分頁(yè)讀取方式大大節(jié)省了讀取數(shù)據(jù)時(shí)間,1000萬(wàn)條也可以進(jìn)行數(shù)據(jù)分頁(yè)顯示。測(cè)試結(jié)果在表1的方法3中。

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

      在Oracle優(yōu)化模式CBO下,可以將外層的查詢推到內(nèi)層查詢中,大幅提高大數(shù)據(jù)模式下的查詢效率。與方法3中的外層查詢比較,可以看出內(nèi)層查詢是從當(dāng)前頁(yè)及當(dāng)前頁(yè)之前頁(yè)的數(shù)據(jù)記錄中讀取當(dāng)前頁(yè)的數(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。

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

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

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

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

      3 分頁(yè)對(duì)比

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

      3.1 分頁(yè)時(shí)間

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

      3.2 翻頁(yè)時(shí)間

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

      3.3 安全性

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

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

      [2]王海亮.精通Oracle 10g SQL和PL/SQL[M].北京:中國(guó)水利水電出版社,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ù)訪問(wèn)性能與安全研究”(XYS14N11);湖南第一師范學(xué)院科研課題資助項(xiàng)目“基于新媒體環(huán)境的移動(dòng)學(xué)習(xí)模式研究”(XYS15N07)。

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

      TP311

      A

      2095-7602(2016)10-0059-03

      猜你喜歡
      翻頁(yè)內(nèi)層控件
      ◆ 裝飾板材
      ◆ 裝飾板材
      裝飾板材
      ◆ 裝飾板材
      打字機(jī)
      關(guān)于.net控件數(shù)組的探討
      軟件(2018年7期)2018-08-13 09:44:42
      讓“翻頁(yè)”成為藝術(shù)
      中華家教(2018年7期)2018-08-01 06:32:32
      會(huì)翻頁(yè)的書(shū)
      自動(dòng)翻頁(yè)樂(lè)譜架
      就這樣玩會(huì)VBA中常見(jiàn)的自定義控件
      電腦迷(2012年24期)2012-04-29 00:44:03
      吴江市| 阿瓦提县| 乌拉特前旗| 哈尔滨市| 东台市| 玉田县| 马关县| 外汇| 蓝田县| 兴化市| 辰溪县| 横山县| 本溪市| 博罗县| 昂仁县| 东光县| 正蓝旗| 永新县| 长泰县| 商丘市| 漳浦县| 旺苍县| 宾阳县| 丹巴县| 玛沁县| 建昌县| 叶城县| 秀山| 宜城市| 金山区| 凤凰县| 双流县| 醴陵市| 玛曲县| 札达县| 云南省| 丰顺县| 东港市| 神农架林区| 彰武县| 互助|