`
奥义之舞
  • 浏览: 284396 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
  最近在做实时的监控系统,好多人都推荐采用服务器推送的方式来实现,于是乎,看了一个“基于Internet的数据库信息推送技术的研究和实现”的文章,貌似还是个小硕的论文,嘿嘿!
    认为这种推送需要由当数据库有新数据时及时告知服务器,然后服务器在通过推送的方式告知和服务器保持连接的客户端,也就是浏览器页面。。
    先来说说服务器推送到页面的方式吧,从服务器到WEB端页面有好多种实现方式,像什么Socket、Flash的Socket,基于Iframe的实现,AJAX长连接方式吧,
    而从数据库向服务器推送数据,数据库有变化调用触发器,通过扩展的存储过程(外部过程,dll)向服务器发送数据,这个扩展存储过程本质是一个函数,随同sqlserver注册,从属于微软的ODS(开放数据服务),方便在扩展存储过程传入和传出数据,不知道有没有人用过这种从数据库推送的方式,这种方式可靠不。
   而我问了一个XX培训的老师(不是此培训学校弟子,只是去玩,顺便探讨 ),他貌似很果断的都说了,他说触发器这种的是什么数据库级别的,不可靠云云,这是真的不。。。


  对于这个获取到数据经过计算之后马上推送到客户端,我想阐述一下:这里面有两个服务器,一个C++服务器向数据库里面插入,还有一个是Java这边得一个网页上服务器,C++的服务器已经写好了在这放着呢,不可能在更改他的内容了,而他只管向数据库里面插入数据,而不会在告知我这个Java服务器有新数据来了或者有新数据的信息,
  所以我才说能不能使用数据库获取到新数据主动推送到Java服务器这边,通过java服务器在推送到和他保持连接的页面上,
  而数据库获取到新数据告知服务器,我想只有触发器才能做到吧。。。。
  所以我想知道数据库触发器来推送新的数据信息这个是否可靠,
  当程序有新数据往内存里面存,这个是行不通的,1、两个不在一个服务器,一个是插入的C++服务器,处理数据信息,这个已经做好,因为一些原因,这个不会在变更了 2、java服务器,主管读取数据信息

 
  
分享到:
评论
29 楼 yizhilong28 2011-06-30  
Comet,porlet
28 楼 奥义之舞 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功能。














不错 嘿嘿
27 楼 guoapeng 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功能。












26 楼 squirel 2011-06-26  
可以,触发器+扩展存储过程,以前这么干过,在扩展存储过程里发到MQ。

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

我也很想这样做 
真悲剧
  对于这个获取到数据经过计算之后马上推送到客户端,我想阐述一下:这里面有两个服务器,一个C++服务器向数据库里面插入,还有一个是Java这边得一个网页上服务器,C++的服务器已经写好了在这放着呢,不可能在更改他的内容了,而他只管向数据库里面插入数据,而不会在告知我这个Java服务器有新数据来了或者有新数据的信息,
  所以我才说能不能使用数据库获取到新数据主动推送到Java服务器这边,通过java服务器在推送到和他保持连接的页面上,
  而数据库获取到新数据告知服务器,我想只有触发器才能做到吧。。。。
  所以我想知道数据库触发器来推送新的数据信息这个是否可靠,
  当程序有新数据往内存里面存,这个是行不通的,1、两个不在一个服务器,一个是插入的C++服务器,处理数据信息,这个已经做好,因为一些原因,这个不会在变更了 2、java服务器,主管读取数据信息
18 楼 奥义之舞 2011-06-24  
lxm63972012 写道

你的服务器不是先接收到数据吗?

服务端有两个功能,一个功能是存储即时数据到数据库,另一个就是把即时数据推送到客户端。

 
  服务端向数据库插入信息的这部分已经写好了,不会在变更了,
对于这个获取到数据经过计算之后马上推送到客户端,我想阐述一下:这里面有两个服务器,一个C++服务器向数据库里面插入,还有一个是Java这边得一个网页上服务器,C++的服务器已经写好了在这放着呢,不可能在更改他的内容了,而他只管向数据库里面插入数据,而不会在告知我这个Java服务器有新数据来了或者有新数据的信息,
  所以我才说能不能使用数据库获取到新数据主动推送到Java服务器这边,通过java服务器在推送到和他保持连接的页面上,
  而数据库获取到新数据告知服务器,我想只有触发器才能做到吧。。。。
  所以我想知道数据库触发器来推送新的数据信息这个是否可靠,
  当程序有新数据往内存里面存,这个是行不通的,1、两个不在一个服务器,一个是插入的C++服务器,处理数据信息,这个已经做好,因为一些原因,这个不会在变更了 2、java服务器,主管读取数据信息
17 楼 rocwon 2011-06-24  
监控。。。获取到实时数据后,写入数据库,再靠数据库的触发机制去提醒。。。这本身就是个问题。
应该获取到数据经过计算之后马上推送到客户端再,顺便用一个线程往DB或者文件里存储。
16 楼 z87663849 2011-06-24  
用一个比较折中的方法好了。存储分为2个部分,一部分存储到数据库中,一部分存储到缓存组件中(类似redis,memcache) 然后专门用一个组件定时(极其短的时间)去访问缓存.组装数据,然后把数据推给客户端
15 楼 奥义之舞 2011-06-24  
lxm63972012 写道

你的服务器不是先接收到数据吗?

服务端有两个功能,一个功能是存储即时数据到数据库,另一个就是把即时数据推送到客户端。



我服务器 接收不到数据,这是有两个服务的,那个C++服务器是直接发送到数据库的,Java服务器接受不了任何东西,只有自己主动的去获取才能知道数据库更新了,或者让数据库主动推送,
14 楼 lxm63972012 2011-06-24  

你的服务器不是先接收到数据吗?

服务端有两个功能,一个功能是存储即时数据到数据库,另一个就是把即时数据推送到客户端。
13 楼 lipengyu2006 2011-06-24  
Node.js
12 楼 奥义之舞 2011-06-24  
silence1214 写道
我觉得问题的入手点是这样的,数据库何时知道数据有更新,只有数据库知道了才会推出去。那么如何办?触发器是其一,因为触发器可以知道更新。第二个办法,当往数据库进行操作的时候,由程序发出信号,另外的监听程序得到信号后,再去推送数据。这个可以用异步消息实现。

入手点都同意,不过你说的第二个点,应该是向数据库更新的程序同时都通知我这边吧,
(因为一方面原因这个程序不会向Java服务器这边发出通知的。。)
如果只是从Java服务器这边考虑呢,是不是只能让数据库推过来了。。。
11 楼 奥义之舞 2011-06-24  
dancewhyw 写道
有什么关系吗?内存服务器可以是一个集群。用个内存池存放消息,轮询返回的速度非常快,还没明白意思吗?
数据库光是触发器就一般都不推荐使用,何况是在高并发的场景中。

还有为什么不推荐使用触发器呢,使用触发器有什么弊病可以说一下么 谢谢
10 楼 silence1214 2011-06-24  
我觉得问题的入手点是这样的,数据库何时知道数据有更新,只有数据库知道了才会推出去。那么如何办?触发器是其一,因为触发器可以知道更新。第二个办法,当往数据库进行操作的时候,由程序发出信号,另外的监听程序得到信号后,再去推送数据。这个可以用异步消息实现。

相关推荐

    android通过Service实现消息推送(客户端+服务器)

    本教程将详细介绍如何通过Service组件实现一个客户端的消息推送系统,并简要涉及服务器端的设置。 首先,我们要理解`Service`在Android中的角色。`Service`是Android四大组件之一,它在后台执行长时间运行的操作,...

    高并发大容量消息推送后台系统架构

    高并发大容量消息推送后台系统架构是一个专门用来处理大量用户接收消息请求的技术架构。随着互联网应用的迅猛发展,开发者需要通过消息推送来高效、实时地通知用户,无论用户是在线还是离线。在这样的背景下,推送...

    基于社交数据挖掘的个性化新闻推送研究.pdf

    廖轶宸开发了适合移动网络的混合型信息推送系统,利用用户身份信息、订阅主题、任务信息、位置和数据挖掘得到的用户潜在兴趣等信息进行过滤,提高了推送信息的准确性和多样性。 个性化信息推送服务在基于用户兴趣和...

    电信设备-基于物联网的信息推送方法、云服务器及计算机存储介质.zip

    《电信设备-基于物联网的信息推送方法、云服务器及计算机存储介质》这个压缩包文件主要涵盖了物联网(Internet of Things, IoT)技术在电信设备中的应用,特别是关于信息推送的方法,以及涉及云服务器和计算机存储...

    androidpn推送服务器端+手机端(版本3.0)

    综上所述,"androidpn推送服务器端+手机端(版本3.0)"的项目涵盖了服务器端和客户端的推送通知实现,涉及了Java编程、数据库管理、网络通信、Android应用开发等多个技术领域。开发者可以通过学习和实践这个项目,...

    Android应用源码之消息推送最新demo +服务器.zip

    在实际应用中,消息推送还可以结合其他技术进行优化,例如使用本地推送库(如GCMNetworkManager或WorkManager)进行延迟或定期推送,或者通过第三方推送服务(如极光推送、个推)来提高兼容性和到达率。 总之,这份...

    Android 高仿微信实时聊天 基于百度云推送

    在这个实例中,我们看到开发者使用了百度云推送(Baidu Cloud Push)来实现消息的实时推送功能,这是一套由百度提供的免费云服务,用于帮助开发者解决消息推送的问题。 首先,我们要理解的是Android的即时通讯(IM...

    Android应用源码基于百度云推送的聊天工具源码.zip

    8. **权限管理**:由于涉及到网络通信和推送服务,源码可能包含了Android的权限声明,如INTERNET权限和READ_PHONE_STATE权限。 9. **异步处理**:为了保持用户界面的流畅性,大部分网络操作和耗时任务会在后台线程...

    安卓Android源码——消息推送完美demo.zip

    本示例"安卓Android源码——消息推送完美demo.zip"聚焦于如何实现一个高效且用户体验良好的消息推送系统。其中包含的核心知识点包括: 1. **GCM(Google Cloud Messaging)/ FCM(Firebase Cloud Messaging)**:在...

    Android应用源码基于百度云推送的聊天工具源码.rar

    应用需要实现发送接口,将消息内容和接收方信息发送到服务器,并由服务器负责将消息推送给目标设备。 4. **UI设计**:源码中的截图可能展示了聊天界面的设计,包括输入框、发送按钮、消息列表等元素。我们可以学习...

    信息检索技术的发展与未来.ppt

    个性化信息检索主要体现在以下两个方面:允许信息用户的个性化定制和基于数据挖掘技术对信息用户的检索行为进行分析,挖掘出信息用户的检索需求,用推送技术 (Push) 主动向用户推送所需要的信息资源。 信息检索技术...

    著名的AndroidPN消息推送客户端

    4. **权限管理**:为了能够接收推送消息,客户端需要在AndroidManifest.xml中声明相应的权限,例如INTERNET权限和WAKE_LOCK权限,前者允许应用访问网络,后者确保设备在接收消息时不会休眠。 5. **通知栏提醒**:...

    Android应用源码之消息推送完美demo.zip

    在Android应用开发中,消息推送是一项至关重要的功能,它能够实时地将服务器端的信息传递给用户,提升用户体验并增加用户粘性。这个“Android应用源码之消息推送完美demo.zip”压缩包提供了一个完整的示例,帮助...

    java结合email实现自动推送功能

    在Java编程中,实现自动推送功能通常涉及到数据库操作以及邮件服务的使用。以下将详细讲解如何通过Java结合Email来完成这一任务。 1. **数据库操作** 在这个示例中,我们看到两种常见的数据库查询方法: - 获取表...

    基于BlazeDS实现股票系统中Flex与Java的通信.pdf

    通过BlazeDS技术,Flex可以调用Java的算法和数据库连接,从而实现了实时的数据推送和业务逻辑调用。 四、 BlazeDS在股票系统中的应用 BlazeDS在股票系统中的应用主要体现在以下几个方面: 1. 实时数据推送:通过...

    Android应用源码之消息推送完美demo-IT计算机-毕业设计.zip

    在Android应用开发中,消息推送是一项关键功能,它能让应用在后台或用户未直接与应用交互时接收并处理新信息。这个"Android应用源码之消息推送完美demo"是一个非常适合毕业设计学习的实例,涵盖了从基础到进阶的推送...

    Android应用源码之基于MQTT的安卓消息推送php服务端源码+安卓端源码.zip

    3. **Websocket技术**:为了实现实时通信,服务端可能使用Websocket,它允许双向通信,使得服务器可以主动推送给客户端。 4. **数据库操作**:为了存储和检索用户的订阅信息,可能涉及到MySQL、SQLite或其他数据库...

    ASP.NET简单聊天室(包括数据库)

    另外,WebSocket协议提供了一种双向通信机制,允许服务器主动向客户端推送数据,这对于聊天室这样的实时应用非常适用。如果项目中使用了WebSocket,那么可能涉及到System.Net.WebSockets命名空间的相关类。 接着,...

    XMPP(Android客户端的实现__Tomcat版的Androidpn_)

    Tomcat版的AndroidPN(Push Notification)项目是基于XMPP协议的一个推送通知服务,它利用了Tomcat服务器和MySQL数据库来处理和存储推送信息。 首先,要搭建这个系统,你需要确保已经安装了Java Development Kit ...

Global site tag (gtag.js) - Google Analytics