COM+高手看过来-关于如何使与数据库的并发连接数达到最小最优的问题!(200分)

  • 主题发起人 主题发起人 yeah007
  • 开始时间 开始时间
Y

yeah007

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我们用COM+技术做中间层,由于客户端会比较多,为了使与数据库的并发连接数达到最小最优,
各位觉得能够采用一些什么办法!
越详细越好!
 
呵呵,支持事务。
把com+的闲置关闭之前的时间设置为0
还有就是一个比较重要的东西就是在客户端程序中,当要调用中间层时不需要Connnected := False;
因为中间层会自动的帮你关闭,若你写了Connected := False时,中间层不会释放你的资源,所以这点切记。
既然是中间层,那么详细的用户规则都应包装在其中,使得客户读取的次数以及流量越小越好

如果还有什么其他具体的东西不清楚的话,qq联系了,呵呵……
 
非常谢谢,
我的QQ号:171182701 记得加我啊,有许多问题需要请教!
 
如果客户端都访问一个应用服务器,而由这个应用服务器统一连接数据库的话,不算有多少
个客户端,它们与数据库的连接也都只是一个,就是应用服务器与数据库的那个连接。
为了服务更多的客户端,系统应采用减短对象生存期的方法,具体地说就是在必要的时候才
建立对象的实际,用完后就立即释放。
比如说下面这段代码,对象的实例在TForm1.Button1Click方法中建立,当此方法完成后,
对象的引用计数会减1(到0时销毁对象),但如果把Obj声明为类成员对象,在TForm1的
Create事件中建立,那么在整个客户端程序的运行期间,服务器端都要为维护对象的实例
占用资源,从而减少可服务的客户端数量。

procedure TForm1.Button1Click(Sender: TObject);
var Obj: IMyDateTimeSvr;
S: WideString;
begin
Obj := CoMyDateTimeSvr.Create;
S := Obj.GetDateTime;
end;
 
to Sachow:
你所说的就是减小对象的生存期的办法了!
但由于我们要与数据库频繁的打交道,所以这个办法能起多大的作用呢?
 
另外,中间层和DB只建立一个连接肯定是不够用的,因为数据负荷重的话,一个连接根本顾不过来!
所以理想的办法是如何设计有效的COM+结构!让COM+对象来负责连接的管理,均衡等!
但具体要如何才能是最理想的办法呢?
另外问一个问题:ORACLE是怎么收费的?
 
频繁与数据库打交道,客户端量又大的话,采用多次、少量存取是最好的办法,同样,只有
多次、少量存取才能减短对象的生存期。COM+是可以管理数据的连接和对象的Pooling,但
负载均衡需要由其它的方式来完成,包括服务器方式和客户端方式。服务器方式是将服务器
群集做为均衡负载的方式,客户端方式是采用TSimpleObjectBroker来连接组件,它会在服
务器列表中取响应速度快的服务器来访问。

对于一个连接是否够的问题,还需要进一步探讨。这涉及到I/O方面的问题,每建立一个数据
连接,数据库服务器都要建立并维护一个与客户端的网络对话,连接越多,开销越大。在建
立Socket服务器时有这样一个原则:如果你的请求能在很短时间内处理完(或你不需要服务
多个客户端),那么采用单线程单连接的方式总是比并发方式(采用多线程多连接)快。我
想这个原则也是可以应用到此处的。

Oracle是按用户收费的,好像分为5用户、25用户、50用户……另外还按CPU数量收,
4CPU + 25用户的报价好像是三十几万吧(不包括服务),具体的不太清楚。
 
后退
顶部