用.net做了一个简单的投票点击游戏,大致流程就是,页面有30个图片,点击一个图片算一票,点击后数据库处理该图片的点击次数加一,可重复点击(联系点击500次,速度快的额外累计10%的点击次数)程序本身运行正常,但并发量大的时候,服务器就撑不住了,当在线游戏的人数达到1000时,服务器一下就崩了。现在想从程序和数据库方面优化,但不知怎么做,希望能得到.net、数据库方面的高手指点,先谢谢啦!

解决方案 »

  1.   

    已经是局部刷新了吗?
    服务器崩了, 是指Web还是数据库, 两者没有分离吗?
    先分离了用2个服务器吧。
      

  2.   

    1、目前没做局部刷新,页面很简单,图片也很小
    2、服务器崩了:指的是服务器网站的时候,页面提示:server is too busy (刷n久都还是这个提示)
    3、目前程序和数据库是放在两台不同的服务器上(分隔两地),但效果貌似还没有合放在同一台服务器上的响应快
    4、暂时没考虑用缓存,考虑到每投一票,页面就显示最新的票数,用缓存的话,票数就不能即时更新了
    5、部署多个应用服务器,这个具体怎么讲,能说明一下吗?
      

  3.   

    1、不知道瓶颈在哪??
    的确是这样,现在感觉问题好多,但不知道从哪入手优化!程序方面:很简单,一个按钮,点击一次,数据库的图片信息字段累加1,对数据库的操作是写在存储过程里面的数据库方面:就是一个update语句的存储过程真的不知道这两个简单的程序能做哪些优化?
      

  4.   

    2、检查一下是不是有什么资源没有释放,尤其是与数据库连接相关的
    5、去Google一下集群和负载均衡方面的知识
      

  5.   

    很久没上CSDN了,1年前常逛CSDN,sp1234帮忙解决了很多的问题,现在又能看到sp1234,真感到欣慰啊~~~o(∩_∩)o最直接的想法就是将更新数据库尽量变成异步操作,或者只是更新到内存数据库然后等请求数少了再更新到后台数据库。我有这个思路,更新到内存数据库然后等请求数少了再更新到后台数据库,但不知道具体怎么操作,sp能讲具体些或提供一些参考信息吗?
      

  6.   

    Service Broker 可以考虑一下。
      

  7.   

    拜一下sp老大先!
    看了楼上诸位的解答,我也来说说吧。
    缓存肯定是不能用的,业务决定了这个程序实时性比较高;
    我是这样想的,用个静态Datatable存储点击人、点击次数,每次操作后可将Datatale重新绑定到数据源;
    当然你的页面上需要设置一个定时器(vs2005里默认ajax里有那个东东),定时写入数据库,批量用事物控制写入数据库,负担应该小很多。当然你的Datatable应该和数据库中的表结构统一。你现在的应该是点一次写一次数据库吧,这样从操作数据库的效率上比较慢。最后,如果你有更多的钱的话,可以考虑做服务器集群,多个服务器负载平衡肯定能解决。
    数据库服务器和应用服务器分开是肯定的。
      

  8.   

    有个幼稚的点想法,不知行不行,大家帮忙看下:
    1、在程序中设置两个 application ,一个用于记录当前在线用户点击的次数,一个用于保存当前在线的用户数据2、页面第一次加载的时候,先读取该用户点击的相关数据,然后写到DataTable中,绑定完数据一会,再将DataTable保存到application3、用户点击图片的时候,读取application中的DataTable数据、处理(累加一)、绑定回页面并将DataTable保存回application中
       
       处理完以后,application的总计数器加一,判断如果application的值等于1000的时候,将application中的DataTable更新到数据库里面大体思路是这样,但实时更新的上千条数据保存在application中,反复读取、操作,感觉不安全