APP下载

ASP.NET大数据分页效率研究

2016-12-13周端锋李科峰

长春师范大学学报 2016年10期
关键词:翻页内层控件

周端锋,李科峰

(湖南第一师范学院现代教育技术中心,湖南长沙 410205)



ASP.NET大数据分页效率研究

周端锋,李科峰

(湖南第一师范学院现代教育技术中心,湖南长沙 410205)

大数据分页显示是常用的ASP.NET数据显示方式,不同的多页数据加载显示方法的效率有很大的区别。本文分析了数据源、存储过程、外层查询指定页、内层查询指定页四种方法的大数据分页效率,并对翻页时间、安全性进行初步的比对研究,指出了大数据分页的最优效率方法。

ASP.NET;大数据;分页;效率

随着云计算、物联网等快速的发展,数据呈现爆炸式的增长,人们正被数据洪流所包围,大数据的时代已经到来[1]。WEB应用从数据库中读取数据,再把这些数据以合适的多页的方式呈现给用户。很显然,不同的多页数据加载显示方法需要加载的时间大不相同,且对服务器、网络及用户终端的性能要求有很大的区别,因此有必要研究不同的数据分页技术之间的效率性能差别。

1 运行环境与测试准备

在测试中采用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;

2 ASP.NET常用的数据分页技术

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 内层查询读取不同页的响应时间 秒

3 分页对比

经过测试四种基本分页方法可以看出,在数据量达到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

猜你喜欢

翻页内层控件
一款语音控制翻页机的设计研究
基于.net的用户定义验证控件的应用分析
打字机
悬浮花盆
关于.net控件数组的探讨
让“翻页”成为艺术
复合函数求单调区间的数形结合方法
自动翻页乐谱架
真实写作:作为核心素养的学科价值
基于嵌入式MINIGUI控件子类化技术的深入研究与应用