客户端频繁访问数据库的问题

时间:2021-08-06 04:35:34
我的程序有很多客户端,会频繁的访问数据库,造成经常会有客户端不能访问到数据库,这样二层好像不能满足要求,但是有高手说三层在这也没有什么优势。
客户端数大于100,小于500
请问有哪位高手、大侠给个实用方案?

18 个解决方案

#1


关键在于客户端占用使用数据库的时间。

#2


MIDAS好像只能50~60啊.

#3


没有吧? 这么惨。

#4


三层适合于广域网,在某种程度上比cs更加耗资源,你还是看看怎么优化数据库吧

#5


还能怎么样优化?

#6


这就要看你的设计的具体情况和客户端访问数据的情况了,例如你的许多客户端会访问一个类似的查询结果,这时你可以在三层的基础之上加上缓冲机制,情况就很不同了。我用DCOM最多测试到120个客户,没什么问题,但要是每个客户端访问数据的时间长的话,就不行了,主要现象是大部分客户端都会处于等待数据响应的状态。

#7


优化代码,写出高效的数据库程序。你没有看过李维的<<ADO/MTS/COM+高级程序设计篇>>吗?
作这种数据库程序一定要注意性能的调整。不要认为用ADOExpress 组件连上数据库进行操作
就完了。其实ADOExpress 组件在使用中有很多技巧的,建意你先看此书,就会豁然开朗了。

#8


mts/com+
用数据库连接池,这样在用户多的情况下可以缓解一下,效果还可以

#9


不会吧50~60就挂了,别人用D5+Socket写的,现在120个用户,依照正常。如何用com+ Pooler 或mts/com+应该不如此

#10


可以采取少量多次的方法存取数据。一次只取少量数据,待客户处理完毕后再取下一批数据。这样应该可以减少单一客户端占用数据库连接的时间,从而使服务器实际上可以支持更多的客户端。

#11


如果你提取数据时才连接,提取完毕立即关掉连接,并且尽量使得提取的数据不要太大,花费的时间不要太多,你觉得还会受到连接数目的限制吗


我觉得很多系统有连接数目限制,是客户端老不断开连接造成的

#12


做成三层的,用缓冲池方式能满足你的要求。

#13


其实两层也可以满足你的要求,采用数据库缓冲池方式

可参考例子
C:\Program Files\Borland\Delphi5\Demos\Db\MtsPool

#14


采用database pooling 和 object pooling 来解决吧

#15


采用三层结构,用Corba实现,客户端采用单线程,服务器端采用多线程。然后为数据库作一个缓冲池,根据设置创建若干对数据库的常连接,这样当有客户端需要访问数据库的需要时,就可以从中锁定一个连接为之服务,服务完毕之后在将其解锁,以供其他请求服务之用。

#16


用linux/unix+oracle8

#17


我们通常设计一个大的远程数据模块,往里放许多数据控件。这样做的结果是效率非常低。比较效率高的做法是:
1、建一个数据模块,不是远程数据模块,在里面放入数据连接组件和一些查询组件。
2、建一个或多个远程数据模块,其中的数据组件使用前面所提到的数据模块中的数据连接组件。
通过这两点,可以有效的共享一个数据连接组件。

#18


请问 jdxjf(生活象拉磨,我就是那拉磨的驴) ,如何在使用远程数据模块? 算是COM还是CORA吗?

#1


关键在于客户端占用使用数据库的时间。

#2


MIDAS好像只能50~60啊.

#3


没有吧? 这么惨。

#4


三层适合于广域网,在某种程度上比cs更加耗资源,你还是看看怎么优化数据库吧

#5


还能怎么样优化?

#6


这就要看你的设计的具体情况和客户端访问数据的情况了,例如你的许多客户端会访问一个类似的查询结果,这时你可以在三层的基础之上加上缓冲机制,情况就很不同了。我用DCOM最多测试到120个客户,没什么问题,但要是每个客户端访问数据的时间长的话,就不行了,主要现象是大部分客户端都会处于等待数据响应的状态。

#7


优化代码,写出高效的数据库程序。你没有看过李维的<<ADO/MTS/COM+高级程序设计篇>>吗?
作这种数据库程序一定要注意性能的调整。不要认为用ADOExpress 组件连上数据库进行操作
就完了。其实ADOExpress 组件在使用中有很多技巧的,建意你先看此书,就会豁然开朗了。

#8


mts/com+
用数据库连接池,这样在用户多的情况下可以缓解一下,效果还可以

#9


不会吧50~60就挂了,别人用D5+Socket写的,现在120个用户,依照正常。如何用com+ Pooler 或mts/com+应该不如此

#10


可以采取少量多次的方法存取数据。一次只取少量数据,待客户处理完毕后再取下一批数据。这样应该可以减少单一客户端占用数据库连接的时间,从而使服务器实际上可以支持更多的客户端。

#11


如果你提取数据时才连接,提取完毕立即关掉连接,并且尽量使得提取的数据不要太大,花费的时间不要太多,你觉得还会受到连接数目的限制吗


我觉得很多系统有连接数目限制,是客户端老不断开连接造成的

#12


做成三层的,用缓冲池方式能满足你的要求。

#13


其实两层也可以满足你的要求,采用数据库缓冲池方式

可参考例子
C:\Program Files\Borland\Delphi5\Demos\Db\MtsPool

#14


采用database pooling 和 object pooling 来解决吧

#15


采用三层结构,用Corba实现,客户端采用单线程,服务器端采用多线程。然后为数据库作一个缓冲池,根据设置创建若干对数据库的常连接,这样当有客户端需要访问数据库的需要时,就可以从中锁定一个连接为之服务,服务完毕之后在将其解锁,以供其他请求服务之用。

#16


用linux/unix+oracle8

#17


我们通常设计一个大的远程数据模块,往里放许多数据控件。这样做的结果是效率非常低。比较效率高的做法是:
1、建一个数据模块,不是远程数据模块,在里面放入数据连接组件和一些查询组件。
2、建一个或多个远程数据模块,其中的数据组件使用前面所提到的数据模块中的数据连接组件。
通过这两点,可以有效的共享一个数据连接组件。

#18


请问 jdxjf(生活象拉磨,我就是那拉磨的驴) ,如何在使用远程数据模块? 算是COM还是CORA吗?