Bootstrap

主题:征集数据库的轮询机制的方案

公司现在有一个项目,A应用在处理接受数据处理 插入数据库,B个应用发现数据有增量,直接从数据库取出做处理,显示在页面上。系统响应时间要求在秒级以内。

现在问题是:他们之间如何做通讯机制?现在有两种处理方案:

一种是JMS,耦合度比较低,效率好像不怎么样,没有具体项目经验。

另外一种,是通过触发器,插入数据的时候,同时另外一张表插入一些基础数据,通过线程轮询这张表,进行处理。缺点,容易导致线程堵塞,服务器压力大.

1:B应用开一个web service接口,A应用在插入数据库的同时,调用B的Web Service,把插入数据库的数据发送给B应用。

2:写一个Interceptor在A操作数据库的时候(lock 相应的字段)获取信息返回给表现层。让后释放对象,A继续写数据库,写完(release)

AOP的user guide的例子是个和你的需求类似的方案!

3: jms好一些,ActiveMQ基本上是1秒2000条消息,怎么都比轮询数据库快

4: 要兼顾需求与性能,还是应该由A数据库发消息,变更时发送消息通知。如果担心性能问题,可以采用异步。A只负责发送消息,B接收处理消息。这并没有增加多大的耦合。对A的风险不大。
具体实现上,如果A是Oracle,可以直接在DB层利用它提供的AQ来处理,性能非常好。如果不是,可以采用Trigger插入同构表,B轮循同构表来处理。否则性能肯定成问题。不过这样工作量比较大。
当然如果应用层结构清晰的话,拦截器也是一个较好的方式。
;