我写的是一个监控系统,要时实的从DB里取出更新的数据。我做的是每隔50ms跑躺DB,结果就有人说我这是虐待数据库,服务器。我问他是用触发器吗?他就不说了话。
后来我看到EasyJF做的一个东西讲到说“为了能不断接收到别人的发言信息,需要定时不断的从服务器端读取数据,因此,需要在客户端启动一个定时器,每隔一定的时候自动使用xmlhttp对象到服务器端下载别人的发言信息”。指点一下吧,什么才是对的。

解决方案 »

  1.   

    50ms!!强!呵呵 估计第一趟DB还没跑完,第2趟请求又来了!呵呵
    把时间延长点 最少也1秒吧
      

  2.   

    时间间距太小,另外这种请求你要设计到数据库查询最好是类似 Select Top 1 ?? From ?? 的,不然真的要考虑服务器是否承受得了!
      

  3.   

    xmlhttp   用这个吧.
    用ajax,定个时间读数据.
    50ms? 呵呵.  这是不可能的.
    如果是WEB的用ajax会比刷整一页快很多.
      

  4.   

    Ajax不就是用的xmlhttp吗?
    我们现在已经实现是,就是在猜想现在数据库和服务器是压力是不是很大?怎么才能让浏览起变被动,response..response..response........
      

  5.   

    采用“动态时间间隔”要好些,记录每次从发起请求到收到数据的总时间 T,
    下一次请求在“上次的 T值乘上个系数 a ”秒数后发起,当然 T 太小或太大,
    可以判断后适当修正。这样,正好服务器越忙,请求就自动减少。
    系数 a 要经测试后取适当的植。
      

  6.   

    做个动态时间间隔,动态改变“setInterval("xx()",100);”里面的20ms .
    这个就困难了吧
      

  7.   

    广播?
    怎么广播啊? 
    http都是无状态的. 
    只能是客户端请求服务器
    服务器怎么广播给客户端?
    如过是c/s的倒是可以.
      

  8.   

    "为了能不断接收到别人的发言信息,需要定时不断的从服务器端读取数据,因此,需要在客户端启动一个定时器,每隔一定的时候自动使用xmlhttp对象到服务器端下载别人的发言信息"
    只能这样的啊.  
      

  9.   

    如果是面向用户的,可以考虑加长定时触发时间,服务器做cache.我做过一个数据需要时时显示的页面.这个页面的日pv量大于1千万.页面的刷新时间是1分钟.
    如果每个用户1分钟都去跑躺DB,这个数据库的并发请求是惊人的.
    就算不是不读取数据库,服务器加载cgi动态程序的并发压力也会很大.解决办法就是,服务器后台每30-45秒读一次数据库生成静态xml或json文件.用户每一分钟用ajax读一次xml或者json.这样解决了数据库的并发问题,而且用户始终加载都是一个静态文件也减轻了apache load cgi的压力.
      

  10.   

    动态改变“setInterval("xx()",100);”里面的20ms .
    这个就困难了吧
    -------------------
    老大,你不会用 setTimeout() 吗?function Run()
    {
      //...
      //...
      setTimeout("Run()", T * a );
    }setTimeout("Run()", 1000 );
      

  11.   

    解决办法就是,服务器后台每30-45秒读一次数据库生成静态xml或json文件.用户每一分钟用ajax读一次xml或者json.这个方法很好~~简单实用!
    顶你~
      

  12.   

    解决办法就是,服务器后台每30-45秒读一次数据库生成静态xml或json文件.用户每一分钟用ajax读一次xml或者json.极度赞成!!
    顶!!!
      

  13.   

    这时候用触发器就可以了.
    有新的数据进来就生成静态xml或json文件.
      

  14.   

    woyingjie(沃英杰):
    解决办法就是,服务器后台每30-45秒读一次数据库生成静态xml或json文件.用户每一分钟用ajax读一次xml或者json.
    --------------------------------
    在白天的高访问量时段,每秒钟几千上万次地读取xml,服务器会不会傻眼啊?万一访问的时候刚好删除替换文件怎么办 ,为什么新浪的NBA不到几秒就能刷新啊 访问量应该不小啊 他是怎么做的
      

  15.   

    加载静态文件对服务器的压力很轻的,而且实际应用中,也会有多台应用服务器做负载均衡.
    xml静态化的工作是在后台服务器进行,然后分发到前台服务器,不用考虑文件替换的问题.
    我说的30秒只是举个例子,可以适当的减少这个时间.数据库几百个并发都抗的住,何况只有这一个查询请求呢.
      

  16.   

    不好意思,昨天不在公司
    感谢mmyy(),不过 setTimeout()他只执行一次,我要做个时时显示的东西显然是不可能的。
    50ms读取一次DB 和 50ms生成读取一次DB and 生成一次xml 让我无语...
    http是无状态的! “当数据发生改变时页面无刷新动态改变”可以实现吗?(用Ajax)
      

  17.   

    setTimeout()是执行一次,但你可以变通使用啊,就是在执行中再设置setTimeout()啊,当然这样不是标准的方法,setInterval()就是循环定时器。
      

  18.   

    赞成生成静态xml的方法
    同时还要考虑到“数据发生变化”面向的客户不同
    客户A的数据变化了,但客户B未变,所以N个客户就要N个Xml文件
    觉得初步流程大概是
    服务器端:数据变化-〉触发器生成xml客户端:定时访问xml,访问成功的话,改变数据库标记、删除xml
      

  19.   

    50ms读取一次DB 和 50ms生成读取一次DB and 生成一次xml 这样不是更辛苦吗?
      

  20.   

    Http + Jsp + Socket 能结合吗?
      

  21.   

    我有几个建议哈,当然只是建议,自己知道原理但是还没实现那。
    考虑到实时性的话最好的办法就是flash的xmlsocket或者推技术。这样也比单纯的拉技术要好一些。然后才是settimeout
    setTimeout可以一直执行一个事件的,
    function main()
    {
       ....
       ....
       setTimeout("main()",5000);
    }
    w我觉得5秒比较合适
      

  22.   

    这个东西,还可以这样考虑:
    对于部分请求,可能它们数目不多,但是发生量非常大,在服务器端,为这些答复页面建立静态的内容,定时(或根据数据库的情况)刷新。
    对于此类请求,服务器直接用静态内容来答复,而不是每次去刷数据库。这样的好处是,并发用户,不是很影响数据库,对于web服务器,也是个减压。
      

  23.   

    楼主需要定义一下自己的UseCase:
    1、你的数据到底变化频率是怎么样的?如果按你说的是显示货物的,应该是不小于秒级的。
    2、你的客户需要你以多块的频率显示新信息,换句话说,既便数据10ms更新一次,用户是否需要在10ms内就知道,还是30秒甚至更长的时间就可以,用户不需要关心这30秒内的变化。
    安装我的理解,Web应用的时间数量级应该是秒级甚至到分钟级别的,一般只有嵌入的监测系统才会在ms级别,那不是Web上可以实现的。记住,需求决定技术,技术决定实现。
      

  24.   

    "我要做的是一个监控系统,能不能在1.建立连接后、2.发送请求信息完成后就一直3.发送响应信息。知道浏览器关闭,一直送货就可以了,送最新的货物!!"标准的长连接应用,不过关键在于你这个连接要实时与数据库交互,就怕这个!
    自己搜索一下 长连接 server push
      

  25.   

    这个问题正是我想问的,我也要做一个即时监控的web应用,想用ajax,关注...
      

  26.   


    如果是面向用户的,可以考虑加长定时触发时间,服务器做cache.我做过一个数据需要时时显示的页面.这个页面的日pv量大于1千万.页面的刷新时间是1分钟.
    如果每个用户1分钟都去跑躺DB,这个数据库的并发请求是惊人的.
    就算不是不读取数据库,服务器加载cgi动态程序的并发压力也会很大.解决办法就是,服务器后台每30-45秒读一次数据库生成静态xml或json文件.用户每一分钟用ajax读一次xml或者json.这样解决了数据库的并发问题,而且用户始终加载都是一个静态文件也减轻了apache load cgi的压力日pv一千万以上,太牛了
    赞成这个做法
      

  27.   

    这方法可行
    但是!请注意,如果每个用户拿到的数据都不是不一样的,你怎么处理
    即便是同一个用户,在它选择某些选项的时候,数据也是不一样,
    这就是一个组合了    用户N个 * M状态 * N状态 * L状态等等等
    难道给每个用户的每种状态缓存一个json?当用户量不多说,只有10万的时候, 状态量有5种,每种状态用3种选项
    那么你因该存储 100000 * 3 * 5 个json缓存 也就是1500000个,估计够呛,
    一切讨论都是基于爱
      

  28.   

    生成XML一样会拖累服务器,CACHE可行