`
F.B.I
  • 浏览: 8313 次
  • 性别: Icon_minigender_1
  • 来自: 基地
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java如何做到实时-----两种方案

阅读更多
今天老大提出这样的需求:"数据库新增了数据就要及时通知应用层做一系列的处理"

针对这需求我觉得应该分为两种方案: 如有更好的欢迎大家指教

第一:
      SQL+存储过程+触发器+DLL调用的方法来实现数据实时

第二:
     后台弄一个线程做定时查询(例如1秒钟2次查询),但这里就涉及到性能的问题,对于庞大的数据量我觉得有个方案
     做个临时表
      比如A表是原来的数据库表 那么把一个小时(时间自定)内的数据放到临时B表里,每隔1小时清空B表里的数据,要数据就索引B表里的数据,然后再做相应的处理
    
分享到:
评论
49 楼 ckn126 2010-06-21  
凤舞凰扬 写道
F.B.I 写道
今天老大提出这样的需求:"数据库新增了数据就要及时通知应用层做一系列的处理"

针对这需求我觉得应该分为两种方案: 如有更好的欢迎大家指教

第一:
      SQL+存储过程+触发器+DLL调用的方法来实现数据实时

第二:
     后台弄一个线程做定时查询(例如1秒钟2次查询),但这里就涉及到性能的问题,对于庞大的数据量我觉得有个方案
     做个临时表
      比如A表是原来的数据库表 那么把一个小时(时间自定)内的数据放到临时B表里,每隔1小时清空B表里的数据,要数据就索引B表里的数据,然后再做相应的处理
    

     感觉包括楼主在内的许多人对于这样一种“需求”的不正确理解。首先要问楼主的是,所谓的数据库新增数据的行为是如何产生的?在实际的生成环境中会允许人直接使用SQL或者SQL工具对数据库的数据进行更新操作么?(就算是datapatch,也会有一定的折中处理方式吧)。遇到这样的需求,其实楼主要找到的方案应该是从控制数据库的访问入手,比如如果是通过程序,则进行程序的统一拦截,如果是来自于其他系统或者数据库的stream复制,则可以通过触发消息机制。不应该从数据库本身的角度入手去通过什么触发器然后调用DLL方法什么的,这其实是一个方向性的失误的。
     至于频繁到1,2秒的轮询,更加是不可取的方案。


对于这位朋友的解答 我感觉非常正确。当一开始看着贴的时候我也是以为会用楼主说的第一种方法来完成,但是现在看来我的想法是错误的,我有一点非常疑惑 如果人家用数据库工具来操作数据库,这个应该是有一定的限制的吧。不知道各位有什么见解
48 楼 miaow 2009-12-14  
不奇怪啊,如果历史形成了有多个不同的应用都直接操作数据库,要额外加个处理逻辑又不想都改的话想到这样的做法很正常。
47 楼 airsise 2009-12-14  
F.B.I 写道
今天老大提出这样的需求:"数据库新增了数据就要及时通知应用层做一系列的处理"

针对这需求我觉得应该分为两种方案: 如有更好的欢迎大家指教

第一:
      SQL+存储过程+触发器+DLL调用的方法来实现数据实时

第二:
     后台弄一个线程做定时查询(例如1秒钟2次查询),但这里就涉及到性能的问题,对于庞大的数据量我觉得有个方案
     做个临时表
      比如A表是原来的数据库表 那么把一个小时(时间自定)内的数据放到临时B表里,每隔1小时清空B表里的数据,要数据就索引B表里的数据,然后再做相应的处理
    



怎么会想到从数据库入手呢?难以理解。
46 楼 qeppykqsn 2009-12-14  
mathfox 写道
rovanz 写道
....
只要统一数据库操作的入口不就做到了,你爱杂折腾咋折腾,而且这种方式对数据库没有任何额外的操作


修改JDBC driver怎么样?

不知道这么做合不合理



小弟一直有个疑问。。。大家不要潮笑啊。。。

这里如果我修改driver然后程序里面知道了数据库里面有修改动作,但是我怎么样去通知我的所有客户端,让客户端作对应的展示呢?
45 楼 wangpinzhuang 2009-11-19  
  在insert,update,delete 的事务提交时通知应用层,要其更新:那张表中的信息,更新策略是怎样的。更新的策略可以事先配置到配置文件中,可以是只读取某几个字段,也可以是全表更新。
44 楼 java_zhanghui 2009-11-13  
呵呵,感觉不像实时,lz理解有问题吧,应该是异步通知的概念。
43 楼 gembler 2009-11-13  
F.B.I 写道
第一:
      SQL+存储过程+触发器+DLL调用的方法来实现数据实时

xqh1022 写道
这帖子很火,确实java及时数据的问题值得探讨,但除了lz的第一种方法,其他的方法都没有做到及时


实在想不通你是怎么想的
42 楼 whaosoft 2009-11-13  
确实java及时数据的问题很值得探讨。
41 楼 tibetjungle 2009-11-12  
langyu 写道
数据库新增加数据总是有程序往里面塞的吧
塞数据的程序在添加数据后,就通知一个监听程序,让监听程序去数据库中去取
(可以传一个新添数据的最小Id给监听程序,让它从这个id之后取最新数据)


除非可以在基类修改,采用模板方法,不然改代码会改死人的。其实这个方法还不如用代理!
40 楼 xqh1022 2009-11-12  
这帖子很火,确实java及时数据的问题值得探讨,但除了lz的第一种方法,其他的方法都没有做到及时
39 楼 F.B.I 2009-11-12  
Dreamer 写道
如果楼主能控制所有访问该数据库的应用程序的话,如果同构,建议统一数据访问层;如果异构,需要修改应用程序,加入消息机制。
如果楼主没有办法控制其他访问该数据库的应用程序,个人觉得楼主的方案1比较合理一些。



触发器一个很大的弊端 就是性能问题。
38 楼 jenlp520 2009-11-12  
F.B.I 写道
jenlp520 写道
我记得以前javaeye上有个兄弟说他准备在mysql上加上监听器 mysql任何操作都可以触发监听器然后响应事件 不知道现在开发进度如何了

触发器嘛? 第一性能有问题 第二就是有时候还不触发,不知道你碰没碰到过,一般一个系统不提倡用触发器的,除非特殊情况下。



NO NO NO 不是触发器
37 楼 Dreamer 2009-11-12  
如果楼主能控制所有访问该数据库的应用程序的话,如果同构,建议统一数据访问层;如果异构,需要修改应用程序,加入消息机制。
如果楼主没有办法控制其他访问该数据库的应用程序,个人觉得楼主的方案1比较合理一些。
36 楼 iaimstar 2009-11-12  
代理模式 搞定。。但是不能响应手动的数据操作
35 楼 gembler 2009-11-12  
自行实现一个简单的JDBC代理,想干嘛都行了。

老是爱折腾..
34 楼 F.B.I 2009-11-12  
凤舞凰扬 写道
F.B.I 写道
今天老大提出这样的需求:"数据库新增了数据就要及时通知应用层做一系列的处理"

针对这需求我觉得应该分为两种方案: 如有更好的欢迎大家指教

第一:
      SQL+存储过程+触发器+DLL调用的方法来实现数据实时

第二:
     后台弄一个线程做定时查询(例如1秒钟2次查询),但这里就涉及到性能的问题,对于庞大的数据量我觉得有个方案
     做个临时表
      比如A表是原来的数据库表 那么把一个小时(时间自定)内的数据放到临时B表里,每隔1小时清空B表里的数据,要数据就索引B表里的数据,然后再做相应的处理
    

     感觉包括楼主在内的许多人对于这样一种“需求”的不正确理解。首先要问楼主的是,所谓的数据库新增数据的行为是如何产生的?在实际的生成环境中会允许人直接使用SQL或者SQL工具对数据库的数据进行更新操作么?(就算是datapatch,也会有一定的折中处理方式吧)。遇到这样的需求,其实楼主要找到的方案应该是从控制数据库的访问入手,比如如果是通过程序,则进行程序的统一拦截,如果是来自于其他系统或者数据库的stream复制,则可以通过触发消息机制。不应该从数据库本身的角度入手去通过什么触发器然后调用DLL方法什么的,这其实是一个方向性的失误的。
     至于频繁到1,2秒的轮询,更加是不可取的方案。


我说下我的观点:
              1.这位兄弟,感觉你的说话思路很清晰、也许这么弄会更好
              2.这只是老大要我帮他的,我搞java他弄c++具体的实现不由我来。如果是我弄,那我肯定不是数据库 开始,所以当别人手下难啊。也许是IT人的无奈吧。你的这办法非常好,谢谢
33 楼 ray_linn 2009-11-11  
选择特定的数据库,比如MS SQL 2005,就实现了通知。
32 楼 凤舞凰扬 2009-11-11  
F.B.I 写道
今天老大提出这样的需求:"数据库新增了数据就要及时通知应用层做一系列的处理"

针对这需求我觉得应该分为两种方案: 如有更好的欢迎大家指教

第一:
      SQL+存储过程+触发器+DLL调用的方法来实现数据实时

第二:
     后台弄一个线程做定时查询(例如1秒钟2次查询),但这里就涉及到性能的问题,对于庞大的数据量我觉得有个方案
     做个临时表
      比如A表是原来的数据库表 那么把一个小时(时间自定)内的数据放到临时B表里,每隔1小时清空B表里的数据,要数据就索引B表里的数据,然后再做相应的处理
    

     感觉包括楼主在内的许多人对于这样一种“需求”的不正确理解。首先要问楼主的是,所谓的数据库新增数据的行为是如何产生的?在实际的生成环境中会允许人直接使用SQL或者SQL工具对数据库的数据进行更新操作么?(就算是datapatch,也会有一定的折中处理方式吧)。遇到这样的需求,其实楼主要找到的方案应该是从控制数据库的访问入手,比如如果是通过程序,则进行程序的统一拦截,如果是来自于其他系统或者数据库的stream复制,则可以通过触发消息机制。不应该从数据库本身的角度入手去通过什么触发器然后调用DLL方法什么的,这其实是一个方向性的失误的。
     至于频繁到1,2秒的轮询,更加是不可取的方案。
31 楼 F.B.I 2009-11-11  
jenlp520 写道
我记得以前javaeye上有个兄弟说他准备在mysql上加上监听器 mysql任何操作都可以触发监听器然后响应事件 不知道现在开发进度如何了

触发器嘛? 第一性能有问题 第二就是有时候还不触发,不知道你碰没碰到过,一般一个系统不提倡用触发器的,除非特殊情况下。
30 楼 jenlp520 2009-11-11  
我记得以前javaeye上有个兄弟说他准备在mysql上加上监听器 mysql任何操作都可以触发监听器然后响应事件 不知道现在开发进度如何了

相关推荐

    cors-filter-2.5 + java-property-utils-1.9.1.zip

    在这个"cors-filter-2.5 + java-property-utils-1.9.1.zip"压缩包中,主要包含了两个关键组件:CORS Filter和Java Property Utils。 1. CORS Filter: CORS Filter是处理跨域请求的一种解决方案,它作为一个...

    Tomcat解决跨域的两个jar包java-property-utils-1.9.jar和cors-filter-1.7.jar

    本篇将详细介绍如何利用java-property-utils-1.9.jar和cors-filter-1.7.jar这两个jar包解决Tomcat的跨域问题。 首先,让我们了解`java-property-utils-1.9.jar`。这个库是由Apache Commons项目提供的,主要用来处理...

    cors-filter-1.7.jar和java-property-utils-1.9.jar

    标题中的“cors-filter-1.7.jar”和“java-property-utils-1.9.jar”是两个Java库的JAR文件,它们在Java开发中扮演着重要角色,特别是对于Web应用程序。这里,我们将深入探讨这两个库的功能和它们在“jasperserver”...

    java猜数字-两种游戏模式.rar

    【标题】"java猜数字-两种游戏模式.rar"是一个基于Java Swing开发的桌面应用程序,它实现了猜数字游戏,且提供两种不同的游戏模式。这个压缩包包含游戏的源代码以及一个程序设计开发文档。 【描述】中提到的关键...

    java-design-patterns-master_JAVAdesignpattens_java_design_

    在Java编程领域,设计模式是一种通用、可重用的解决方案,用于解决在软件设计中常见的问题。这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在帮助开发者深入理解和应用这些...

    javabase64-1.3.1.jar

    JavaBase64-1.3.1.jar 是一个专门用于...总的来说,JavaBase64-1.3.1.jar是一个实用的Java库,它为开发者提供了一种简单、高效的Base64编码和解码解决方案,特别适用于那些需要在不同平台之间交换二进制数据的项目。

    syslog-java-client-1.0.1.zip

    syslog-java-client可能支持其中一种或两种,需要根据需求选择合适的配置。同时,由于syslog协议不保证消息的可靠传输,开发者可能需要结合业务场景,决定是否采用TCP或SSL/TLS等更可靠的传输方式。 总的来说,...

    aws-java-sdk

    3. **异步和同步API**:SDK提供了同步和异步两种调用模式,开发者可以根据应用场景选择合适的方式处理请求,以优化性能和响应时间。 4. **身份和访问管理(IAM)**:SDK支持IAM,可以方便地管理用户的权限,确保...

    java-unrar-0.3.jar以及commons-logging-1.1.1.jar

    Java-unrar-0.3.jar 和 Commons-Logging-1.1.1.jar 是两个在Java开发中常用的库,主要用于处理RAR文件的解压缩和日志记录。以下将详细阐述这两个库的功能、使用方法以及它们在Java开发中的重要性。 1. Java-unrar-...

    aws-java-sdk-kinesis-1.10.18.zip

    总之,"aws-java-sdk-kinesis-1.10.18.zip"和"raml-java-parser.zip"代表了两个不同的领域:一个是实时流数据处理,另一个是RESTful API的设计和文档化。这两个项目都是开源的,允许开发者根据自己的需求进行定制和...

    luajava-1.1-x64-lua51

    在IT领域,尤其是在游戏开发和脚本编程中,Lua和Java两种语言常常被结合使用,以发挥各自的优势。"luajava-1.1-x64-lua51"是一个针对64位系统的版本,它提供了将Lua脚本集成到Java应用中的解决方案。本文将深入探讨...

    topsis.zip_java topsis_java---topsis_java-topsis_topsis_topsis n

    TOPSIS是一种多属性决策分析方法,常用于在多个备选方案中选择最优解,它基于理想解和反理想解的概念,通过计算每个方案与理想解和反理想解的距离来评估和排序。 【描述】"Topsis using java this can use Netbeans...

    Java-Interview-超全集合github上评分最高的jiva面试题

    - **内存泄漏与内存溢出**:如何检测和避免这两种问题。 5. **设计模式** - **常见设计模式**:单例、工厂、观察者、装饰器、代理、适配器等23种设计模式的应用场景和实现方式。 6. **Git基础** - **版本控制**...

    nexus-3.69.0-02-java17-unix.tar.gz

    用户需先使用`tar -zxvf nexus-3.69.0-02-java17-unix.tar.gz`命令进行解压,解压后会得到两个主要文件夹:“sonatype-work”和“nexus-3.69.0-02”。 “sonatype-work”文件夹包含了Nexus运行时的数据,如存储库的...

    java-client5.0.4和selenium-java-3 jar包

    结合这两个库,你可以构建一套全面的跨平台自动化测试解决方案。例如,你可以先使用Selenium WebDriver进行Web应用测试,然后利用Appium Java客户端进行移动应用的测试。这使得开发者可以在多个平台上验证应用程序的...

    taobao-sdk-java-auto.zip

    总之,"taobao-sdk-java-auto.zip"是一个针对Java开发者的实用工具,它简化了与淘宝和钉钉接口的对接,为开发企业级应用提供了便捷的登录解决方案。开发者只需按照文档说明正确配置和使用,就能将强大的钉钉扫码登录...

    mariadb-java-client-1.4.4 and sources

    MariaDB Java 客户端是用于与MariaDB数据库进行交互的一种Java API,它提供了JDBC驱动程序,使得Java开发者能够方便地在Java应用程序中执行SQL查询和管理数据库事务。在这个压缩包中,我们有两个文件:`mariadb-java...

    google-java-format最新

    "google-java-format"就是这样一个强大的工具,支持命令行接口(CLI)和API两种使用方式,方便开发者根据自身需求进行集成。 通过命令行调用,开发者可以在终端中运行特定命令对Java源代码进行格式化。例如,可以...

    JavaMelody javamelody-core-1.52.0.jar jrobin-1.5.9.jar

    总之,`javamelody-core-1.52.0.jar`和`jrobin-1.5.9.jar`是JavaMelody监控解决方案的重要组成部分,它们共同为Java Web应用提供了详尽的性能监控和数据分析能力。通过集成这两个JAR,开发者可以轻松地对应用进行...

Global site tag (gtag.js) - Google Analytics