日期:2014-05-17  浏览次数:20942 次

求方案,多客户端连接数据库
我数据库采用mysql,客户端C# Winform 数量 600个左右 局域网

目前采用的方案就是客户端直接连接数据库取数据,大概两秒连接一次,经常出现客户端无法连接的情况,mysql数据库也经常死掉,查看服务器连接 发现很多time_wait状态的连接

请教各位大哥,一般这种情况客户端应该用什么方式来访问数据库才能保证正确取到数据,并且保证服务器负荷最小。
刚接手这样的大型项目 找不到门道,还望各位指点迷经,谢谢了。

------解决方案--------------------
一台或若干名通讯服务器用来接收所有或分派到客户的数据
一台或若干名数据服务器放数据库,全部数据或帐套
一台登记服务器用来存放登录和配置信息
软件结构上要预先设计好分区,每个客户ID都隶属某个通讯服务器ID和数据库服务器ID
------解决方案--------------------
都集中服务端让服务端提供数据,服务端和客户端采用tcp/http连接。
服务端集中访问DB,可以最小的控制连接DB的数量。还可以进行缓存。

假如:原来600个客户端,每个客户端的连接池有3个,那么全部就是1800个
服务端集中之后提高连接的利用率,可能100个连接就够了。

这个服务端推荐用WCF做。
------解决方案--------------------
就算客户端是短连接,但是每个客户端实际都在维护一个连接池。
就算没有连接池,至少也有1个吧。600个客户端就是600个。
DB端要为这些实际没用的连接保持session。
但如果都集中到服务端,那么这个非活动的连接数量可以大大减少。
当然客户端的请求数不会减少,但是服务请求的数据连接数可以减少。
比如:你现在每次查询间隔2s,在服务端本来服务A客户端的连接在2s后
就可以为B客户端服务。这样1个连接完全可以满足多个客户端的请求。
当然这是由底层完成的调配,完全不用你操心。

.net 2.0可以用Remoting或者WebService。


------解决方案--------------------
如果考虑并发的话,我们完全可以控制重入的数量,或者同步。
如果客户端接受一点的延迟的话。。。
------解决方案--------------------
Remoting可以不用IIS,因为可以使用tcp/ip协议。
而服务端应用程序就可以是console,winform,或者windows service。
局域网还是用Remoting吧。