比如手机费,如果没钱了会短信通知。这种用的是什么技术呢,触发器只能完成数据库内操作,不能实现发短信操作吧。那么上层程序是如何监听相应数据的呢。有的说是轮循,那是怎么做的?

解决方案 »

  1.   

    有时候可能也没你想得那么复杂:
    1、统一扣款接口,也就是全系统只有一个接口方法最终负责扣款;
    2、在每次扣款的时候,检查下余额;
    3、余额如果不足,向发短信的功能发送个通知的任务(可以用消息队列如JMS)。当然,你通过数据库触发器去维护“欠费记录表”,然后再同另一个批处理程序去轮询该表进行处理也是可以的。
      

  2.   

    统一接口是种做法。但是我见过一种,程序A向表A中插数据,程序B会对每次增加的数据进行相应的发送处理。这是怎么弄的呢。轮循的做法是什么,不是定时的循环检查吧。另外如果用触发器的话不能同上层程序交互吧。
      

  3.   

    当然,借助Oracle这类数据库强大的能力,可以通过触发器调用Java代码然后发送JMS啥的也是可以的,但却是非常非常的不推荐。
    轮询,不是轮循。顾名思义就是定期去数据库里面Select下,看看哪些数据发生了变化,判定方法也很多,比如很有名的“modify_time”字段就往往是为了轮询、数据同步这类需求而诞生的。但从性能角度出发,压力大的系统不太建议直接从生产表中轮询,因为生产表数据一般比较多,轮询开销大容易跟主操作在资源上产生冲突。因此常用的另一种手段是:基于任务的轮询,大体思路如下:
    1、触发器,负责监听生产表的变更动作,然后同步将变更类型和变更ID写入任务表;
    2、轮询Java程序,只Select任务表,按顺序取出变更信息,执行后续动作后,删除该记录(或置删除标志位);
    考虑到任务表规模控制,可以对任务表按时间进行分区,然后按分区truncate,这个效率比delete高几个数量级。
      

  4.   


    画面ajax可以定时(这个具体要多短,是根据需要设定)查询数据库,数据库有个预警数值。
      

  5.   

    不知道楼主的数据库是啥,如果是Oracle的话,有个新技术叫做:Database Change Notification允许数据库客户端(比如JDBC)连接到数据库上并注册一个事件监听器,然后监听数据变化的事件,不过总感觉没有自己搞个辅助表记录事件来的安全 =_=