`
javatoyou
  • 浏览: 1012391 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多
  网络检索无处不在!无论是显而易见的搜索引擎,还是论坛、网上购物目录等,都频繁地使用网络检索。因此,我们这里的“网络检索”定义为用户通过网络提交一定的检索条件(如关键词信息)到服务器上的检索应用中,并获取和呈现检索应用所返回的结果。

  检索方式

  一般来说,当检索的结果集过大时(经常出现非常大的情况),采取分页数据显示的策略,即每次返回结果集中的小部分数据,通过类似“上一页”、“下一页”的操作来查看更多的结果。用户的期望是提交的检索能够很快得到响应,而且进行“上一页”、“下一页”的操作时也能够很快得到响应。因此,问题的关键在于根据用户提供的记录起始位置和需要记录数量来获取每一次所需要使用的结果数据。目前存在一些使用较多的方式。

  1) 用户提交的检索条件每次都被重新执行,然后获取检索结果集的一个子集。用户的检索条件被保存在Cookie、Session或者HTML的表单隐藏元素(“<input type=hidden value=条件>”)中。由于检索操作需要对服务器和数据库资源的大量使用,因此,每次执行检索无疑会增加这种负担,降低检索应用的效率。

  2) 将全部的检索结果取出放到一个大的对象中,该对象实现了对记录的各种操作。同时如果将该对象缓存在服务器上,那么以后的翻页操作都不需要重新执行检索条件而直接从该对象中获取结果的子集。然而,将全部检索结果保存到对象中的操作本身就比较复杂,而且如果结果集很大,则意味着缓存该对象需要占用大量宝贵的服务器资源。同时,首次结果的显示速度可能不会令人满意。

  3) 一次获取“几页”的结果子集并保存到对象中并缓存起来,如果用户的“下一页”操作超出了当前对象提供的数据,则再次执行检索条件,获取满足条件的“又几页”并保存到同一个对象中。出现这种情况的考虑是,用户在使用检索时,可能只会查看最开始的一些记录,而很少进行到相对后面的记录。从这种意义上看,不失为一种比较好的方式。但如果移动到未缓存的记录时,又必须重新执行查询,同时降低结果显示的速度。

  4) 在首次执行检索时,先将全部能够唯一确定每条记录的编号(如主键)保存到对象中并缓存起来,以后对每一页的请求首先在缓存的主键对象中找出满足条件的主键集合,再重新建立查询语句(使用IN关键字)取得该页需要的记录,这样能够准确定义每次需要的检索范围,从而也只是取得所需要的数据。当然,如果某个表不存在这种唯一编号或者主键就无法进行。

  5) 在一些检索应用中,如论坛的帖子显示,可以用一个公共的缓存区来保存部分的帖子,当用户请求某一页时执行的查询仅仅取得帖子的主键,根据这些主键到公共缓存区中去取得记录。如果对应主键的记录不存在,则使用该主键查询出记录同时保存该记录到公共缓存区。这种方式适用于多个用户检索的结果大部分相同的情况,正如论坛帖子的显示。

  6) 如果是在J2EE体系结构中,使用EJB的Finder方法也可以返回对象的集合,而这样的一个对象封装了每条记录的数据。但是,大量对象的生成和存在于服务器内存中无疑也是对服务器资源的巨大消耗。因此,对于存在大量记录的结果集使用实体Bean来代表每条记录会耗尽系统资源而且实际上并不能够获得太多的好处。

  网络检索的关键在于检索的执行效率、网络传输速度和结果集的使用方式。综合来看,网络检索的模式都是通过提供的检索条件,来构建一个能够被数据库使用的、优化的SQL查询语句,由数据库执行并返回记录集,再根据这些记录集来生成显示页面。

  因此,在中间层及数据层,我们着重考虑如何高效地生成每次所需的结果数据;在表示层,即面向用户的层面则需要提供友好、方便的显示和操作界面。

  实现机制

  从各种检索方式使用的效率来说,结果集对象的缓存是可行的。在JDBC2.0中,支持可滚动的结果集,能够任意取得结果集的一个子集。同时,可以指定能够被缓存的返回记录数量,这样就不需要一次返回全部的记录(对分页操作来说,该项功能具有实际的意义),当需要新的记录时,再到数据库中取得并替换掉缓存中的旧记录。然而,各个数据库厂商对JDBC2.0中的结果集以各自不同的方式实现,因此,效率各不相同。Oracle在这方面是做得比较完善的。

  检索操作的具体流程为:用户通过检索页面(如search.jsp)构建检索的条件(包括输入关键词、选择范围等),提交后到检索处理程序(如SearchServlet),分析用户提交的数据并且构建一个合理的SQL查询语句;由检索执行程序(如LocalEngine)来执行该SQL查询语句,同时将执行返回的结果集进行缓存,并重新定向到检索结果页面(如searchresult.jsp);由检索结果页面提交请求到结果处理程序(如SearchResultServlet)来获取所需的数据,格式化并显示信息。

PIC
图1:检索序列图

  网络检索的关键在于两个方面:检索的执行和结果的显示。如果从用户的角度来考虑,比较关心的是检索的准确性、结果界面的友好性及检索响应速度。

  XML结合数据绑定的结果显示

  XML在数据表现和数据交换方面优势使其发展潜力巨大。但是直接呈现XML数据给用户并不是最好的模式,需要利用浏览器的功能来完善数据的显示。一种有效传输XML的方式是利用MSXML解释器中的XMLHTTP对象,它允许你打开一个到服务器上的HTTP连接,发送一些数据和取回一些数据,并且所有的这一切都是在很少的几段脚本中就能够实现。使用XMLHTTP对象通常是进行XML数据交换,但其他格式的数据也是允许的。在作这一系列事情时,不需对当前网页进行重加载,用户甚至不知道后台在作些什么,网页不用重新刷新就已经获取了新的数据。

PIC

  将客户端的请求发送到服务器后,通过XMLHTTP对象可以接受返回的数据。利用数据岛(Data Island)将我们返回的XML数据嵌入到页面中去。扩展标记语言XML使用标准的方式来描述和交换结构化数据;XML的数据以开放的、基于文本的格式进行描述,并通过标准HTTP协议传输。XML本身的特性决定了它天生就是一种灵活强大的数据源对象(DSO)。IE4.0使用JAVA APPLET来实现XML DSO;IE5.0支持Data Island,用户可以直接用<XML>标记定义的数据作为DSO。

PIC

  数据绑定(Data Binding)并不是一个新概念,IE 4.0就已对其给予了丰富的支持。但是,数据绑定并未受到应有的重视,许多开发者似乎更加愿意使用服务器端脚本(Server Script)的方法。然而实际上,无论是在动态网页的代码实现方面,还是在动态网页的工作效率方面,数据绑定的效率都比后者更高。

  可绑定的HTML元素共分为两大类:单值对象(Single-valued Consumer)和表对象(Tabular Consumer)。单值对象显示DSO提供的当前记录的某一个域,而表对象中的每行元素则分别对应一条记录中不同的域,并以此为模板重复显示数据集中的每条记录。数据显示对象既可以在设计时绑定到DSO,也可以在运行时动态绑定。

PIC

  利用数据绑定,减轻了服务器的负担。服务器应用程序可以专注于数据的产生,而数据的显示和操作由客户端脚本来完成。由于不需要刷新页面,我们能够将结果记录总数、当前页码等信息保存在客户端,并且根据这些信息来生产总页数、分页显示的代码。

PIC

  结果集缓存的检索

  利用JDBC2.0的特性,我们可以更加自由地操作结果集对象,移动游标向前、向后以及指向任意位置(将ResultSet的类型设置为TYPE_SCROLL_INSENSITIVE或TYPE_SCROLL_SENSITIVE),同时能够指定一次取得记录的数量。检索应用的类图如下:


图6:检索操作类图

  ResultHelper:用于检索操作的帮助类。通过该类来执行检索、获取记录总数、获取结果集的XML数据。

  QueryProperties:生成实际执行的、完整的数据库操作SQL语句。

  QueryBean:进行实际的数据库操作,提供对结果集的使用操作。该类也实现HttpSessionBindingListener接口,当不再需要该类的缓存数据时,能够关闭数据库连接。使用Iterator模式。

  PageGlobals:检索操作的公共变量,如默认页面大小、默认开始页面、默认缓存时间等。

  总结

  实际使用的情况表明,结果集的缓存和XML数据绑定能够大大提高检索和显示的效率。

  在服务器端,不需要使用JSP来生成检索结果页面,结果数据以XML来表示,能够提供给任何类型的客户端使用,而不仅仅局限于浏览器(类似于Web服务的概念);在网络传输方面,每次只是传递需要的XML,很大程度上减少了传输的数据量;客户端使用XMLHTTP对象来实现数据提交到服务器,形成一种后台操作的形式,“安静”地从服务器上取得数据;采用数据绑定的形式来呈现数据,生成网页的效率明显地提高了,而且编程工作量少,使用灵活。

  采用XML技术、数据绑定的方式来完成高效的检索结果呈现,在编程实现方面会带来一定的复杂性,但是,复杂的工作是高效率的代价,可以根据实际情况来决定采用的方式。
分享到:
评论

相关推荐

    数据挖掘在各行业的应用论文

    信息检索中的数据挖掘技术.caj 红外光谱谱图库中的数据挖掘.caj 中介粗集及其在数据挖掘中的应用.caj 数据挖掘在音高变化规律学习中的应用.caj 数据挖掘技术在财经领域的应用.caj 知识发现和数据挖掘的研究.caj 数据...

    数据挖掘论文合集-242篇(part2)

    信息检索中的数据挖掘技术.caj 信息系统中一种面向粗糙集的数据挖掘方法.caj 全连接回归神经网络的稳定性分析.pdf 关注政府上网后的数据挖掘.kdh 决策支持分析新技术——数据挖掘.caj 分类特征规则的数据挖掘技术....

    数据挖掘论文合集-242篇(part1)

    信息检索中的数据挖掘技术.caj 信息系统中一种面向粗糙集的数据挖掘方法.caj 全连接回归神经网络的稳定性分析.pdf 关注政府上网后的数据挖掘.kdh 决策支持分析新技术——数据挖掘.caj 分类特征规则的数据挖掘技术....

    数据挖掘论文合集-242篇(part3)

    信息检索中的数据挖掘技术.caj 信息系统中一种面向粗糙集的数据挖掘方法.caj 全连接回归神经网络的稳定性分析.pdf 关注政府上网后的数据挖掘.kdh 决策支持分析新技术——数据挖掘.caj 分类特征规则的数据挖掘技术....

    论文研究-基于Web服务和信息检索技术的信息整合方案及其应用.pdf

    从国内企业信息管理存在的问题入手,针对数据分散,信息利用效率低下等问题,提出了基于XML网络服务和Office信息检索技术的一个解决方案,并结合微软员工信息系统(MEIS)的系统设计实例,介绍了如何利用网络服务和...

    一种大数据智能分析平台的数据分析方法及实现技术.doc

    在治理数据的过程中,需要根据情况对数据本身额外建立描 述数据结构的元数据、以及检索数据的索引服务,以便后续更佳深度利用数据。 2.5 结构化数据 结构化数据具备特定的数据结构,通常可以转换后最终用二维的结构...

    一种基于XML文档关键字检索的结构索引 (2010年)

    XML数据索引对其检索效率有较大的影响。在深入分析现有XML结构索引之后,结合)(JⅥL文档特点,提出了一种基于关键字检索的结构索引――LSS(Level Structure Summary)。LSS采用了把具有相同标签路径的结点进行...

    XML,XSLT,AJAX三大技术打造开源多用户博客X3BLOG

    自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lucene的.net版本,实现了功能强大执行快速的全文检索引擎。...

    中海集团航运船舶管理信息系统应用案例

    中海集团航运管理系统的陆岸数据中心架构应用 Sybase ASE 12.5 for Linux数据库产品,主要...系统中应用的Sybase技术可实现多种功能,包括检索速度快;支持XML标记和操作;支持应用组件HA部署架构;支持事务处理等等。

    基于MPEG-7标准的视频描述与检索

    随着计算机以及通信技术的发展,以视频为代表的多媒体数据量和信息量急剧增长。视频数据的日益增加,应用也越来越广泛。现在,在数字图书馆、军事信息系统、Web信息环境、专业视频库等应用,需要对视频数据和视频...

    XML关键字查询处理研究

    关键字查询作为一种有效的信息检索手段,一直以来都是XML数据管理领域研究的热点问题,每年均有大量最新研究成果出现在各种顶级会议和期刊上.针对众多国内外研究者在XML关键字查询领域所作出的创新性工作,该文以XML...

    VB.NET2005教程 (8):了解和掌握ADO.NET的使用

    在广受欢迎的ADO技术基础上,.NET平台带来了革命性的ADO.NET技术,它通过相同的模型,提供对 Microsoft SQL Server 等数据库以及通过 OLE DB 和 XML 公开的数据源的一致访问,连接到这些数据源,并检索、操作和更新...

    rdataretriever:与数据检索器的R接口

    rdataretriever还有助于在选择的数据库管理系统(PostgreSQL,SQLite,MySQL,MariaDB)或平面文件格式(CSV,XML,JSON)中自动存储这些数据集,以供日后使用并与大型数据分析管道集成。 rdatretriever还通过提供...

    Effective XML Query Expansion Based on Pseudo-Relevance Feedback

    提出了一个解决框架:一方面,研究了XML 伪反馈文档查找方法,在充分考虑XML 内容和结构特征的前提下,提出了基于检索结果聚类和两阶段排序模型相结合的高质量XML 伪相关文档查找技术路线;另一方面,针对CO(content...

    XQuery权威指南(简码·扫描版)

    本书除了用于指导编程外,还可用作提高与优化XML数据检索性能的参考书。  本书不仅适合那些须要操作大量XML数据的程序员(不管是使用C#还是Java等语言的程序员都适合阅读本书),还适合管理XML数据库的管理员,以及...

    基于XQuery的XML格式学生成绩查询

    针对XML文档的信息查询,介绍了XQuery标准产生及发展现状,分析了XQuery的查询处理过程;结合XQuery和Java技术进行查询处理,查询结果用XSLT 和SVG...设计了一个XML检索应用实例,完成了从XML数据源中直接检索数据。

    网趣网上购物系统HTML静态版v2012版

    系统采用先进的AJAX技术与XML技术相融生成静态,速度更快!软件代码多重过滤可以第一时间被搜索引擎收录,独特的静态生成算法可以大大减轻服务器的负担,无论在生成速度还是安全方面都达到国内领先水平。 二、生成...

    车辆违规查询系统QT版

    使用QtXml读取XML文件数据信息存入SequenceNum_Map容器中,单号作为SequenceNum_Map的键, XML读取的车辆违章的具体信息先存入结构体中,之后再把结构体存入 SequenceNum_Map中作为SequenceNum_Map的值,查询单号的...

    最新.net技术博客源代码.rar

    自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎...

Global site tag (gtag.js) - Google Analytics