论坛首页 综合技术论坛

Internet的数据库信息推送技术实现

浏览 15314 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-06-25  
数据库和外部其实根本不需要推送,使用推送还不如使用消息机制。
首先不需要推送是因为数据库的链接都是socket的长连接机制。相对于http的短连接来说,连接的消息是两端都可控的。
其次保持长连接,进行缓冲数据的flush还不如使用消息机制或者RPC来的更合理。服务器的压力始终在于并存的数量,占用资源时间越长,并发的可支持度就越低。既然是服务器与数据库的链接,就不存在无法定向的问题,完全可以定向进行远程调用或远程通信。
0 请登录后投票
   发表时间:2011-06-25  
用pushlet应该可以满足你的要求…
0 请登录后投票
   发表时间:2011-06-25  
不要用触发器 不可靠效率不高 以前做过数字电视实时计费的 就是oracle 处罚器中调用JAVA 后来摘掉了 老老实实写轮询吧
你可以在数据库和服务器中间加层memcached 写个watch dog就行
0 请登录后投票
   发表时间:2011-06-26  
就是Comet技术   Tomcat已经可以实现了   在Servlet3标准中应该已经支持
0 请登录后投票
   发表时间:2011-06-26  
用触发器真的很不保险,数量大和并发大的时候简直就是灾难,如果对一致性要求不是特别高的话,可以尝试下pub/sub的方式,就是前面有同学说过的基于消息的方式
0 请登录后投票
   发表时间:2011-06-26  
基于楼主说的情况,C++服务器负责更新数据,Java服务器负责查询和显示数据,采用触发器来实现这个推送,我觉得楼主的思路是对的。但是有两点需要注意:如果数据量更新不频繁,用触发器应该可以解决,简单而且没什么副作用;如果数据更新的比较快,就像之前一些同学担心的,并发和性能是个问题。如果数据更新快,实时性不是非常高的话,可以考虑采用定时轮询的方式。我对楼主之前一语带过的服务器推送Web界面的东东倒是很感兴趣,最近项目中也要用到相关机制,但是在网上查了下,好像这种成熟的应用组件并不多。
0 请登录后投票
   发表时间:2011-06-26  
可以,触发器+扩展存储过程,以前这么干过,在扩展存储过程里发到MQ。

不过最好是在数据入库之前先通过MQ等方式发出来,这种方式只能是不得已而为之。
0 请登录后投票
   发表时间:2011-06-27  

===============话题1===================
实时的监控系统
Tibico  已经有好的解决方案了
名字叫Tibico Hawk ,很好很强大,
建议楼主不要重复造轮子了,
如果楼主要重复造轮子的话,可以参考以下它,
一定会有所收获。它里面的push 是用Message queue做的


===============话题2===================

另外你说的数据库Push 方式,Oracle的我用过,很稳定。
原理很简单,实现也不麻烦,不过对现有系统要有所改动。
举个简单的例子

如果你要监控A, B,C 三个表,那么你要建立一个监控表M,
和三个表级触发器,另外要在A,B,C 三个表各加一个子段叫Updated_sequence

当A,B,C中有数据被更新时,触发器将向M 表中插入一条数据,内容只要包括表名即可,然后Oracle 有一个数据推送机制,好像叫DB Watch ,可以将M表中的数据推送到
Server端,Sever端根据接收到的表名,和缓存下来的最大 updated_sequence,发送一条select 语句就可以取得被更新的数据 ,
例如 select * from A where Updated_sequence> max_updated_sequence,

注意:A,B,C 表中insert , update,时都要修改Updated_sequence 字段,不建议用delete语句,建议用enable/disable字段间接实现delete功能。












0 请登录后投票
   发表时间:2011-06-27  
guoapeng 写道

===============话题1===================
实时的监控系统
Tibico  已经有好的解决方案了
名字叫Tibico Hawk ,很好很强大,
建议楼主不要重复造轮子了,
如果楼主要重复造轮子的话,可以参考以下它,
一定会有所收获。它里面的push 是用Message queue做的


===============话题2===================

另外你说的数据库Push 方式,Oracle的我用过,很稳定。
原理很简单,实现也不麻烦,不过对现有系统要有所改动。
举个简单的例子

如果你要监控A, B,C 三个表,那么你要建立一个监控表M,
和三个表级触发器,另外要在A,B,C 三个表各加一个子段叫Updated_sequence

当A,B,C中有数据被更新时,触发器将向M 表中插入一条数据,内容只要包括表名即可,然后Oracle 有一个数据推送机制,好像叫DB Watch ,可以将M表中的数据推送到
Server端,Sever端根据接收到的表名,和缓存下来的最大 updated_sequence,发送一条select 语句就可以取得被更新的数据 ,
例如 select * from A where Updated_sequence> max_updated_sequence,

注意:A,B,C 表中insert , update,时都要修改Updated_sequence 字段,不建议用delete语句,建议用enable/disable字段间接实现delete功能。














不错 嘿嘿
0 请登录后投票
   发表时间:2011-06-30  
Comet,porlet
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics