LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

在ASP中优化数据库处理

admin
2010年7月3日 13:25 本文热度 6873
asp是一个web服务器端的开发环境,它提供了一种简单易学的脚本(vbscript或jscript),并带有许多内置的对象,从而提供了一条简捷的编程之路。更为重要的是,asp中提供了ado对象,让程序员可以轻松操作各种数据库,从而可以产生和运行动态的、交互的web服务应用程序。目前,国内很多电子商务站点都采用了asp技术来与数据库交互,为用户提供各类服务。 [br]由于电子商务站点的大部分信息都存放在数据库中,要提高web的响应速度,建立高性能的电子商务站点,很大一部分取决于asp与数据库之间的处理性能。因此,在asp编写时,要注意数据库处理方法。 [br]1、 使用connection pool机制 [br]在数据库处理中,资源花销最大的是建立数据库连接,而且用户还会有一个较长的连接等待时间。若每一个用户访问时,都重新建立连接,不仅用户要长时间等待,而且系统有可能会由于资源消耗过大而停止响应。如果能够重用以前建立的数据库连接,而不是每次访问时都重新建立连接,则可以很好地解决这些问题,从而提高整个系统的性能。在iis+asp处理体系中,采用了connection pool机制来保证这一点。 [br]connection pool的原理是,iis+asp体系中维持了一个连接缓冲池,建立好的数据库连接在asp程序中的断开都是逻辑断开,而实际的物理连接被存储在池中并被维护。这样,当下一个用户访问时,直接从连接缓冲池中取得一个数据库连接,而不需重新连接数据库,因此,可以大大地提高系统的响应速度。 [br]为了正确使用connection pool时,必须注意以下几点: [br]a). 在mdac2.0以前的版本中,必须经过数据库驱动程序的配置才能使用connection pool;在以后的版本中(比如mdac2.1),缺省是使用connection pool机制。具体配置情况可以参见微软公司的站点([url=http://microsoft.com/data/]http://microsoft.com/data/[/url])。 [br]顺便提一句,在使用oracle数据库时,最好使用微软提供的驱动程序。 [br]b). 每次数据库连接串参数必须相同,否则会被认为是不同的连接而重新去连接数据库,而不是使用缓冲池中的连接。最好的做法是将连接串存储在application变量中,所有的程序在建立连接时使用application变量的值。 [br]c). 为了更好地使用和维护连接缓冲池,建议在程序中使用以下的方法对数据库连接进行操作,因为隐式使用数据库连接时不能利用缓冲池的机制: [br]¨ 显示地创建连接对象: set conn=server.createobject(“adodb.connection”) [br]¨ 建立数据库连接:conn.open application(“connection_string”),… [br]¨ 进行数据库操作:… [br]¨ 显式地关闭连接对象:conn.close [br][br]2、 利用直接的ole db驱动程序 [br]在asp中,通过ado可以使用两种方式连接数据库,一种是传统的odbc方式,一种是ole db方式。由于ado是建立在ole db技术上的,为了支持odbc,必须建立相应的ole db 到odbc的调用转换(如ms oledb provider for odbc)。而使用直接的ole db方式(如ms oledb provider for sql, oracle),则不需转换,从而提高处理速度,同时,还能利用ole db的新特性。 [br][br]3、 在内存中缓存ado对象或其内容 [br]通常,在asp程序中,都会涉及到一些存储在数据库中的常用信息,如省份列表,商品分类等,这些信息对于每一个访问用户都是相同的。若每一个用户访问时,都要去数据库里取出来,然后显示给用户,不仅会使数据库服务器负载加重,无法快速服务于更重要的事务处理,而且web服务器也必须不停地创建ado对象,消耗大量资源,导致了当用户很多时几乎失去响应。若能把一些常用信息事先存储在内存中,当用户访问时,直接从内存中取出,显示给用户,则可以大大减小系统的压力,提高响应速度。 [br]比如,我们可以把已经取得了数据的recordset对象存储在application变量中,当用户访问时,从application变量中取得recordset对象,而不需再次建立数据库连接;也可以将recordset对象里的数据以其他方式存储,比如存储在数组中,然后再将数组存储在application变量中,使用时用数组的方式读取。 [br]需要注意的是,一个对象要存储在application变量中,线程模式必须是both;对于不满足该条件的对象,必须以其他方式,比如转换成数组的方式存储在application变量中,这也是上面所说的将内容存储在数组中的原因。 [br][br]4、 使用数字序列 [br]在asp程序中,从诸如recordset中读取数据时,为了方便,常使用数据库列名的方式进行: [br]response.write rs(“fieldnamen”) [br]而很少采用该数据库列名所在的数字序列来读取,即: [br]response.write rs(n) [br]其实,为了从recordset得到列值,ado必须将列名转化为数字序列,因此,若直接使用数字序列,则可以提高读取速度。若感觉使用数字序列,程序可读性不直观,可以采用建立常量的方法,定义: [br]const fieldname1 1 [br][br]5、 使用数据库过程(procedure) [br]在电子商务站点中,尤其是要进行交易的站点,为了完成交易,可能需要多次查询大量的信息,用于判定是非,然后更新入库。若在编写asp时,直接在一个程序中作多次数据库操作,不仅iis要创建很多ado对象,消耗资源,而且加重了数据库服务器的负担,增大了网络流量。若把多次数据库操作流程定义为一个数据库过程,用如下方式调用: [br]connection.execute “{call procedurename(..)}” [br]则可以利用数据库的强大性能,大大减轻web系统的压力,而且由于页面内容与业务分开,管理维护也变得方便。 [br][br]6、 使用优化过的sql语句 [br]对于电子商务网站,最主要的就是要保证,不论访问用户的多少,系统都要有足够快的响应速度。由于在asp技术中,ado对象消耗的资源是非常大的,若一个sql语句要执行很长的一段时间,对整个资源也将一直占用,使系统没有足够的资源服务于其它用户。因此,尽量使用优化过的sql语句,减少执行时间。比如,不使用在in语句中包含子查询的语句,充分利用索引。 [br][br]7、 利用数据库的特性 [br]ado是一套通用的对象控件,本身没有利用数据库的任何特性。但若在asp程序编写时,有意识地考虑结合数据库的特性,往往可以有很好的效果。 [br]比如,oracle数据库服务器对于执行过的sql语句,通常都经过了分析优化,并存储在一个sql内存缓冲区中,当下次同样的sql语句请求时,直接从内存缓冲区取出执行,不再进行分析优化,从而可以大幅度提高性能。这就要求在asp程序编写时,尽量使用相同的sql语句,或者参数化的sql语句: [br]set cmd=server.createobject(“adodb.command”) [br]cmd.commandtext=”select * from product where productcode=?” [br][br]8、 用时创建,用完释放 [br]在前面也提到过,ado对象是非常消耗资源的,因此一定要牢牢记住,只在用到ado对象时才创建,用完后马上释放: [br]set rs=server.createobject(“adodb.recordset”) [br]…. [br]rs.close [br]set rs=nothing

该文章在 2010/7/3 13:25:04 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved