有一张大表table(比如约10万条数据),现有多个线程(比如20个)定时(比如每5秒)轮询它,另有若干线程可能会不定时访问它。
其中,轮询是为了监视其变化:增、改、删。问题:
有另一种方法,就是用触发器监视table的变化,把变化情况导入另一张表,请问这种方法的性能和原方法比,哪个更好?或者大家有更好的办法?请不吝赐教。

解决方案 »

  1.   

    忘了说了:
    倒到另外的表里,比如说temp,这时,我仍然要使用相同个数的线程来轮询,只不过现在轮询的是temp,而不是table。
      

  2.   

    用触发器加oracle消息(DBMS_PIPE),
    就不用轮询了。
      

  3.   

    回复人:AFIC(A Foolish In China) ( 四级(中级)) 信誉:100  2007-3-5 12:21:44  得分:0
    ?  用触发器加oracle消息(DBMS_PIPE),
    就不用轮询了。
    ——————————————————————————————————————————
    能否简单介绍下? 回复人:dobetterthatnthink(如果你没有那么多的选择) ( 五级(中级)) 信誉:100  2007-3-5 13:48:05  得分:0
    ?  为了编程方便,我会选择触发器加额外的表格。
    ——————————————————————————————————————————
    性能方面呢?
      

  4.   

    触发器触发到增、改、删的消息后,
    通过oracle消息(DBMS_PIPE)发送给客户端,
    这样不就不需要客户端轮询数据库了吗?
      

  5.   

    谢谢楼上,
    即便是我用DBMS_PIPE,我也得主动地定时RECEIVE_MESSAGE吧?这和触发器写入一个表有什么区别啊?
    区别是不是写入表是将信息保存到表里了,而DBMS_PIPE是将数据取走后就不保存了?那么性能方面有什么差别呢?
      

  6.   

    pipe没有使用过。 至于性能,看你的程序的效果是想怎么样的?
    说实在的话,你不用触发器也是可以的,例如在客户端自己来保存修改,增加,删除的日志信息,然后通过消息机制发送给接收的服务器。总之就是看你要如何编写程序了。性能要求不是太高,时间不是太多,就不要挖空心思了。反正性能不外乎就是增加更多的资源,或者给予更多的资源。
      

  7.   

    我说的消息机制不是pipe(至于PIPE是否和我说的类似,不在此论),而是通过tcp的方式发送报文到接收服务器。