一种基于ADO Recordset技术的Web数据分页方法的改进

来源 :计算机时代 | 被引量 : 0次 | 上传用户:fawudai111111
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:数据分页是基于数据库的动态Web系统所必需的技术。Microsoft公司的ADO(Active Data objecc)数据存取技术提供了一种基于Recordset的数据分页方法,该方法简单易用,却由于效率原因,不适用大数据量的快速定位分页。文章对该方法从根本上进行了改进,获得了非常明显的效果,完全适用于企业级应用的海量数据分页定位。
  关键词:Web分页技术;ADO;Recordset;改进
  
  0引言
  
  随着信息技术的发展,人们越来越多地借助于计算机和网络获取信息,但是面对浩如烟海的信息资源,查询结果往往会有成千上万条数据。数据分页技术提供了一种有效的途径,使我们可以像看书一样,一页一页地浏览查询结果。本文对广泛应用在动态Web系统中的ADO Recordset数据分页技术,进行了必要的改进。
  
  1数据分页方法
  
  所谓数据分页方法,是将查询结果分页显示的方法,是基于数据库的动态Web系统所必需的技术。因为数据库中需要显示的数据可能有成千上万条,大量的数据从数据库服务器经过网络传输到客户端浏览器,必须组织成便于浏览的方式显示给用户。如图l所示Google搜索系统就应用了数据分页技术。
  


  
  2 ADO Recordset分页方法
  
  ADO(Active Data Object)技术是Microsoft公司支持的一种主要的数据存取技术,是Microsoft提出的各种数据存取技术的演化结果,目前是Windows平台存取数据的标准。
  ADO使用了集合对象的概念,其中Recordset对象是ADO的灵魂对象,它封装了完善的数据处理功能。ADO提供了一种数据分页技术,是通过Recordset对象来实现的。Recordset对象有很多属性和方法,其中与分页有关的有以下属性:
  AbsolutePage:当Recordset设置有分页时,返回当前页码;
  PageCount:当Recordset设置有分页时,返回分页总数;
  PageSize:当Recordset设置有分页时,为每页的记录个数;
  RecordCount:返回当前Recordset对象内的记录数。
  使用Recordset对象来实现分页显示十分简单:先建立一个Recordset对象,将查询到的记录封装进Recordset对象之中;然后引用RecordCount属性值可以获得记录总数,根据需要设置PageSize属性,则可以得到分页总数PageCount,其中PageCount取大于或者等于rRecordCount/PageSize]的最小整数。然后设置AbsolutePage属性后,就可以返回某一分页的记录内容。以下代码实现了A_Table表中的第6页(第5l一60条目录)的数据显示。
  (1)Set rs=Server.CreateObiectCADODB.Recordset")
  (2)rs.ActiveConnection=Connection_String
  (3)rs.Source="Select*From A_Table"
  (4)rs.CursorType=0
  (5)rs.CursorLocation=2
  (6)rs.LockType=l
  (7)rs.Open()
  (8)Recordset.PageSize=10
  (9)Recordset.AbsolutePage=6
  (10)ShowData
  这种技术被广泛应用在基于Windows平台的动态Web数据库系统中,尤其是基于ASP(Active Server Pages)的中小型Web系统中。
  
  3 ADO Recordset分页方法的弊端
  
  利用ADO的Recordset对象可以简单方便地实现数据分页,可是必须将所有数据全部封装进Recordset对象后才能进行分页,如果数据量很大,比如超过上万条,那么封装数据就是一个相当耗时、耗资源的过程,因此该技术只能适合小数据量的分页显示,对于设计企业级应用系统没有多大实用价值。
  


  
  4 ADO Recordset分页方法的改进
  
  为了提高ADO Recordset分页方法的效率,就必须从减小Recordset封装的记录个数着手。分析上述代码中第3行的SQL查询语句Select*From A_Table可知,如果直接在SQL语句中限制返回的记录数,则可以限制Recordset的大小。最理想的情况是只返回所需要的记录数,做到精确存取,从根本上改变了Recordset分页封装所有记录的“粗放式”存取。
  以下是改良后的代码,仍然生成Recordset,但是摒弃了Recordset的AbsolutePage等相关分页属性,Recordset封装记录时限制记录个数,直接取第51-60条记录作为Recordset的数据集合。其中Rownum代表记录在表中存储所在行的序号,是数据库中的关键字,是被Oracle等数据库支持的伪列。
  (1)Set rs=Server.CreateObjectCADODB.Recordset")
  (2)rs.ActiveConnection=Connection_String
  (3)rs.Souree="Select。From A_Table where Rownum<60and Rownum>50"’
  (4)rs.CursorType=0
  (5)rs.CursorLocation=2
  (6)rs.LockType=l
  (7)rs.Open0
  (8)ShowData
  某些早期Oracle版本(如Oracle5)仅支持Rownum的“<”和“<=”操作,而不支持“>”和“>=”等操作。可以通过l临时视图将伪列转化为可以实际比较的列进行操作:Create V_Temp AsSelect Rownum RN,A_Table.From A_Table,然后将上面代码中的第3行改为:rs.Source=”Select}From V_TempWhere RN<60 and RN>50"。运行完第8行显示完数据再删去临时视图:Drop View V_Temp。虽然改良后的方法引入了临时视图,增加了创建和删除临时视图的开销,但该方法却控制了生成Recordset的数据集合的大小,在大数据量的情况下,就会显示出明显的效率优势。
  
  5两种分页方法效率的对比测试
  
  表1是A_Table中的记录个数分别为100、200、1000、2000、10000、20000、100000和200000的情况下,浏览第51-60条记录时,采用两种分页方法完成分页的时间T、运行所耗资源(包括CPU时间u和内存使用M)的对比情况。测试平台是PIIl500,256M RAM,Windows 2000 Professional,某型Oracle数据库,测试用表每记录有33个字段,约500字节。其中第二种方法的实现引入了临时视图,效果数据中包括建立和删除临时视图的开销。图2是两种分页方法执行时间对比,图3是两种分页方法运行所需CPU时间对比,图4是两种分页方法运行所需内存对比。
  
  6结束语
  
  从表l和图2、3、4可以看出,直接使用Microsoft的ADORecordset分页定位技术,其所需的时间,所花的CPU时间和内存空间的开销,是随着表的规模成线性增长的,当表中记录达到10000规模以后,定位到某页就需要数分钟时间,基本上已经失去了在Web上的使用价值。而改良后的定位分页方法,由于从根本上减少了大量封装记录的过程,因而其开销非常小,其CPU时间和内存不随表的规模而变化,访问时间也很快。在20万条记录的表中,改良后的方法即使包含了创建和删除临时视图的开销,其定位1页的时间也仅为6秒,是改良前方法的0.16%,所耗CPU时间是改良前的0.12%,所耗内存是改良前的11.3%,效率分别是改良前的625倍、830倍和8.84倍。
  (注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。)
其他文献
摘要:在编写Java程序时,数组是常用的一种数据类型,然而在实际使用时有许多不便之处。为此,文章讨论了代替Java传统数组的动态数组的设计及实现过程,并举例说明了动态数组类的使用方法。  关键词:Java;动态数组;类;方法    O引言    熟悉Java编程的人员都知道,在创建Java数组时,必须用表达式指定其大小(如:int a[]=new int[3])或通过初始化(如:int a[]={
期刊
摘要:在ERP采购管理系统中采用DM与DB/DW紧耦合方式设计了一个开放集成的数据挖掘系统DMSPM。使用基于约束的交互式数据挖掘技术,以提高挖掘效率和灵活性;将计算模型和工具分离,形成一个模型求解的工具箱,便于使用和维护;通过人机界面和知识推理接受用户决策需求并输出决策结果,提供良好的交互性,从而形成一个拥有强大决策功能的ERP采购系统。  关键词:数据挖掘;ERP;决策支持;采购管理    O
期刊
摘要:介绍了Java ME的Web服务规范,比较了该规范定义的可选包与kXML和kSOAP之间的不同,指出了JavaME的JAX-RPC与Java SE/EE平台上的JAX-RPC 1.1之间的差异,并给出了这些差异给Java ME程序设计者带来的影响,为开发者提供了一些有价值的参考。  关键词:Java ME;Web服务;JSR 172;JAX-RPC    O引言    在有线网络环境中,We
期刊
摘要:根据Web日志中的浏览时间、服务器发送字节数信息和统计所得的页面浏览频度计算页面兴趣度,并结合模糊理论,生成模糊关联规则,提出了一个预测用户浏览兴趣的方法。实验表明,该方法是可行的并且具有较好的效果。  关键词:Web日志挖掘;模糊集;关联规则;页面兴趣度    0引言    自20世纪90年代互联网开始迅速发展以来,Web已成为人们获取信息的一个重要途径,搜索引擎在人们的日常生活和学习中发
期刊
摘要:利用Authorware外部扩展函数,对Authorware中的菜单进行改进,在Authorware中实现了多级菜单和右键弹出菜单。  关键词:Authorware;外部扩展函数;多级菜单;弹出菜单    0引言    Authorware提供了"Pull-Down Menu”这种交互方式,利用它可以制作出菜单。不过,与常见的多级Windows标准菜单相比,它的菜单大为逊色,而右键弹出菜单就
期刊
摘要:分布式拒绝服务(DDoS)攻击是目前黑客经常采用而难以防范的攻击手段。文章从DDoS的概念、攻击原理、攻击过程、攻击方法四个方面对DDoS加以说明。最后,介绍了一个局域网内的攻击实例。  关键词:DDoS;TCP/IP;TCP连接洪水;TCP SYN洪水;Smurf攻击    0引言    DDoS(分布式拒绝服务),其全称为Distributed Denial ofService,它是一种
期刊
摘要:SIP协议是应用层会话控制协议,具有简单、可扩展和分布式的特点。LDAP目录作为一种非关系型数据库,可以简化查询的步骤,PAM就是在应用程序和下层的认证模块之间加入一个抽象层,使得上层应用和底层认证相互独立。文章提出了通过LDAP目录与PAM结合来实现SIP服务器的认证方案,并利用pam_ldap模块实现了SIP服务器的LDAP认证。  关键词:SIP;PAM;LINUX;LDAP    0
期刊
摘要:介绍了基于Vega平台的虚拟现实系统;GL Studio平台的工作流程;针对GL Studio制作的仪表仿真模型不能在Vega场景中直接应用的问题,分析了Vega和GL Studio的底层软件开发原理;对GL Studio模型向Vega场景移植的几项关键技术进行了研究,解决了坐标系差异、坐标系基本单位转换、模型载入以及场景中的模型操作等问题。  关键词:Vega;GL Studio;视景仿真
期刊
摘要:采用基于增量复制来解决分布式系统的数据同步是一个简单易实现的方法。文章利用Oracle的高级复制技术实现了分布式数据库系统间的数据同步,并给出了PL/SQL命令方式的实现过程。  关键词:复制;分布式;数据库;同步;应用    0引言    基于WAN的分布式管理信息系统是当前跨多地域企事业单位信息处理的首选。福建省运政管理信息系统是覆盖全省14个市运管处、84个县运管所的WAN分布式网络管
期刊
摘要:密写(Steganography)是信息隐藏(Information Hiding)的一个重要分支。鉴于密写比信息加密更安全以及网络与信息安全问题变得越来越重要,密写已经成为当前国际上的研究热点。JPEG是一种常见的图像格式,在JPEG图像中进行密写有着重要的实际意义。文章主要研究了以JPEG图像为载体进行数据密写的基本模型,以及目前国内外以JPEG图像为载体的密写算法。  关键词:信息隐藏
期刊