服务器如何响应客户端大量数据请求?

路北 2014-06-06 12:01:58
问题描述:
C/S架构下,客户端(客户端数量最多5000个左右)请求服务器,此时服务器根据请求查询数据库,将数据库中的查询结果返回给客户端,目前因为数据查询结果比较多,当较多客户端执行该请求时,服务器压力过大,问下:有高手知道怎么合理解决该问题?

我当前的做法是:每个客户端一个服务线程,隔段时间发送请求命令,在该线程中把查询结果放在new出来的内存里,发送给客户端之后给delete掉,因此每个客户端都会new一个这样的结果集处理,当客户端过多时,服务器吃内存太多或崩溃,求解决办法?
...全文
655 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
feeginwu 2014-06-13
  • 打赏
  • 举报
回复
数据太大的话,可以考虑用Oracle啊,也不用写服务端了,前端直接连接Oracle客户端就可以操作了
Z5364142 2014-06-13
  • 打赏
  • 举报
回复
引用 9 楼 eziowayne 的回复:
换个角度来说是不是频繁地建立销毁线程导致的?可以采用线程池的结构试试。 [quote=引用 5 楼 Z5364142 的回复:] [quote=引用 4 楼 Idle_Cloud 的回复:] 数据库操作很费时间,一台机器处理不了那么多的,分机器还是有必要的。
是的所以如果数据量不多,可以先把数据读到内存里,或者也可以用内存数据库做相互的同步,然后查询直接查内存数据库,这样速度会快很多,不过总体来说怎么做还是和业务有关[/quote] 我用mysql的,跟不同的引擎也有关系,一般来说数据是放在缓存区的。[/quote] 我用的mysql,oracle都有,根据业务处理速度要求不同,有时我会把数据库内容定时读出来放在内存里,然后有需要查询的任务先查内存,内存没有的话再查数据库,写也是一样先写在内存里,定时统一写入数据库,不过对于写来说风险是意外重启数据会丢失
eziowayne 2014-06-13
  • 打赏
  • 举报
回复
换个角度来说是不是频繁地建立销毁线程导致的?可以采用线程池的结构试试。
引用 5 楼 Z5364142 的回复:
[quote=引用 4 楼 Idle_Cloud 的回复:] 数据库操作很费时间,一台机器处理不了那么多的,分机器还是有必要的。
是的所以如果数据量不多,可以先把数据读到内存里,或者也可以用内存数据库做相互的同步,然后查询直接查内存数据库,这样速度会快很多,不过总体来说怎么做还是和业务有关[/quote] 我用mysql的,跟不同的引擎也有关系,一般来说数据是放在缓存区的。
qq120848369 2014-06-12
  • 打赏
  • 举报
回复
数据库处理能力有限,首先测试数据库极限性能,然后优化程序设计,分离出DB长连接线程池。
路北 2014-06-12
  • 打赏
  • 举报
回复
目前感觉数据量不是很大了,我那样处理基本是没有问题
Z5364142 2014-06-12
  • 打赏
  • 举报
回复
引用 4 楼 Idle_Cloud 的回复:
数据库操作很费时间,一台机器处理不了那么多的,分机器还是有必要的。
是的所以如果数据量不多,可以先把数据读到内存里,或者也可以用内存数据库做相互的同步,然后查询直接查内存数据库,这样速度会快很多,不过总体来说怎么做还是和业务有关
Carl_CCC 2014-06-11
  • 打赏
  • 举报
回复
数据库操作很费时间,一台机器处理不了那么多的,分机器还是有必要的。
Z5364142 2014-06-11
  • 打赏
  • 举报
回复
首先 1.你做一个线程,保持和数据库的长连接,软过断掉马上重连 2.通过IO得知客户端请求,然后丢入线程池,使用阻塞模式比较好 3.在线程池中处理业务 4.注意用互斥锁做好保护 我处理过30W连接的客户端,一台服务器,无任何压力,这个主要是看并发的情况
cisco124695494 2014-06-11
  • 打赏
  • 举报
回复
这个吃内存, 这个没有什么好的办法吧, 要么扩充机器的内存, 要么扩充机器(简易的集群)
就想叫yoko 2014-06-06
  • 打赏
  • 举报
回复
查询结果是啥,要那么多内存。。

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧