提高分布式多层系统的效率之一:
原创 (小小->爱被下载中……)
想必C/S结构的应用程序大家都开发过吧,但我们可以常常听说 分布式系统也是一种C/S结构,的确,不可否认,分布式系统或叫多层结构也是一种C/S结构;网上有很多有关于介绍C/S结构的应用程序平滑的过度到分布式多层系统的例子,一般而言都是说只要将客户端的数据集组、数据连接组件转移到多层中的远程数据模块中,然后,再在数据交换服务处放置对应的TProvider组件接口,客户端用TClientDataSet代替以前的数据组件(TTable or TQuery);然后再在客户端加一个远程启动组件TDOMConnection or TSocketCOnnection用来能过数据交换服务连接远程数据库就可以应用三层,当然,在安装的同时进行一些设置(DCOM在这方面提体的尤其明显,我们都知道,DCOM COM+都是MS的产口,COM+是在Win2000以后才推出来的,DCOM是在WinNT4.0之后才推出来的;MS为了和Windows的紧密结合,所以将DCOM做为中间件的分布式应用程序 <注意:这个DCOM是DCOMConnection 中所说的DCOM,而不是SocketConnection;SocketConnection也可以是一种DCOM的连接方式,它就要说到DCOM/RIM/CORBA这三种连接方式了;> 一般而言在客户安装的时候要进行安全性设置,这就是DCOM特别安全的原因,同时也成了分布式中很不好配置的原因<你们在开发中用DCOMConnection 还是 SocketConnection?> 的安全性相当高,但我们也不能说它只允许Windows操作平台,因为它已经开始支持多操作系统了,ActiveX就是继承了它的这一点,因而才可以不受 操作系统的限制;而且,一般的运行速度也很快,不过它的初次连接速度的确让人不敢恭维;)
让我们走进正题吧,先就Connection Pooling来说说;
为什么在分布式多层中不用Access/ForPro/Paradox/DBASE/SyBase.......并不是不能用,你可以试一试,数据库服务器没有理由一定要和数据交换服务分开的,所以,不用它们的正真原理并不是因为它们是本地或其它什么原因,而是因为它们不支持COnnection Pooling这项技术,Delphi的Midas不提倡数据库服务器或是数据交换为客户端维护状态,的确,这很浪费资源,就如现在的一般网站都会要求您的计算机可以充许Cookie一样,它不可能为每个用户都去维护状态和永久的保持连接;而Delphi的TSession组件就可以解决这个问题,我们常常可以听到"池子"Pooling,就Connection Pooling而言,它是由数据引擎提供的,或是由一些服务提供的,我们可以用 MS Transaction Server (MTS)提供的Object Pooling(对像共享) 或是MS的ODBC3.0 以上版本的Connection Pooling特性进行设置; 我们用最常见的ODBC来说;不一定每一位程序员或是编程者都注意到它这个属性,如果是桌面数据库,它本来就不支持,甚至有些C/S结构中,用到的是大型数据库也有可能没有注意到这个属性,请将你的ODBC打开,到它的 "连接池"那一页看一看,你是否为你的SQL Server or Oracle启用了这个连接?如果没有,请以后记住,开启它,而对于本地的、桌面的数据就不用了,因为它们一般都是独站的,没有明确连接概念;那么到底连接如何理解?或是它是如何工作的呢?前面我们曾经说了,在分布式中,不要想撒懒,请加上TSession组件,如果可以的话,尽量可以让它自动创建,它可以为用户提供连接,而且可以设置Timeout<在ODBC里同样也可以>;这样的话,就可以保证用户及时的连接、释放它所占用的资源,如果用户需要连接时,它会帮你自动从连接池中找没有被用户占用的,如果全部被占用而且不允许创建<当然,这种情况很少>的话,它会试图的去判断其它用户的空闭时间,从而寻找空闲的连接;
这只是提高分布式应用程序的效率的一个方面,方方面面很多,但愿我们还可以继续交流,同时,您也可以指出我的错误之处;愿意与您共同交流;