依附大系统 【数据实时获取】解决方案

简介:

    最近公司作为众多外部厂商之一,需要依托一个大型平台系统( 这里简称为Big-S) 给特定用户提供一些服务。

    作为外部厂商开发的 Web 应用(这里简称 Small-S),需要提取 Big-S 中的基础数据,包括用户、组织结构、代码表......部分字段到本地数据表中。

    融合 Small-S 自己特点,作为搭建 Small-S Web 项目的先决条件。

    Small-S 需要做到和 Big-S 的重点基础数据实时一致, 重点关注 Big-S 数据交互方面的以下特性:

         1. Big-S 提供给外部厂商交互方式大体有三种形式(EJB,WebService,JMS),数据表接近 4000 +。

         2. Big-S 提供给外部厂商 Oracle 数据库 DB_Select ,当然 DB_Select 只含有 Select 权限。

    至于其中 DB_Select 实时同步 Big-S 哪些数据库、需要怎样负载部署.....这些都不是该关心的事情。

    内部进行了几轮 PK,最终确定了比较不错的解决方案,本篇将循序渐进陈述几种提出的方法,给其他同行做参考为主,记录总结为辅。

    可能有人会感到疑惑,直接将需要的基础数据一次性抽取过来不行么?

    Big-S 中实时也在操作这些数据,抽取过来的数据肯定会和 Big-S 中产生误差,已这样的数据作为基础的 web 项目,等着被领导请去喝茶吧。

1. 使用 Big-S 提供的外部服务

    使用 BIg-S 提供的外部服务,获取数据过程为实时处理,而且处理速度也相当不错。

    获取数据时,你需要一些前置条件组织请求,才能准确的获取到你需要的数据,比如你需要一个用户信息,前置条件可能是用户ID,组织机构ID......

  • 首先考虑到的是 Small-S 需要扩展业务的时候,得去查找  Big-S 是否有提供类似的服务供你使用,如果有则好。
  • 如果没有呢?告诉 Big-S 去给你定制开发一个?
  • 其次,Small-S 需要做类似的查询功能时,假设查询所有用户信息,这时候你是没有前置条件的。
  • 最后,虽然获取数据响应事件速度是不错的,但 Small-S 需要组织请求、去除不相关的、转换为预期的 Small-S 数据结构对象,这些都耗时耗力。
  • EJB/WebService 服务的调用、交互规则不是本篇要阐述的重点,有兴趣可以自己看一下。

2. 双数据源配置

     使用 Big-S 提供的服务实时获取数据,被众人驳的体无完肤之后。

     紧接着有人将目光放在了 Big-S 对外提供的数据库 DB_Select 上面。

     具体想法为同时链接 Small-S 和 Big-S DB_Select , 公用同一个数据库资源池。 

复制代码
    <bean id="small-s" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${smalls.driverClassName}" />
        <property name="jdbcUrl" value="${smalls.url}" />
        <property name="user" value="${smalls.username}" />
        <property name="password" value="${smalls.password}" />
        ........
    </bean>
    <bean id="big-s" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${bigs.driverClassName}" />
        <property name="jdbcUrl" value="${bigs.url}" />
        <property name="user" value="${bigs.username}" />
        <property name="password" value="${bigs.password}" />
         ......
    </bean>
复制代码
  • 使用 Spring 可以很轻松的做到双数据库配置,资源池可以使用常见的 C3P0、DPCP....
  • 开发时可以在具体 Dao 层由程序员决定具体需要的数据源自己注入,或做点设计将两个数据源同时注入到父类 dao 中,基类 dao 继承即可。
  • 这时候,只要知道具体业务、具体表名,可以轻松获取到 Big-S 中的数据,这点还是相当满意。
  • 但是基础数据中实时变化的那部分,读取 Big-S 数据同步到 Small-s 中?
  • 做定时任务?时间间隔设置多少合适?间隔当中 Big-S 用户数据发生变化,Small-S 中的用户进行业务操作该怎们办?
  • 这种解决方法提供了一些思路,当最终还是夭折在同步上,耗时耗力。

3. Oracle DB_Link + Synonyms

    这个思路提出是一位经验老道的数据库 DBA ,在 Small-S 上建立 DB_LINK 到 Big-S 上,然后在 Small-S 上面建立需要表的同义词。

    与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义,查询 Big-S 表时都是实时数据。

    建立数据库链接和同义词过程: 

复制代码
    -- create database link
    create public database link big-s_link
    connect to '用户' identified by '密码'
    using '(description =
            (address_list
            (address = (protocol = tcp)(host = 'ip')(port = '端口'))
            )
            (connect_data =
            (sid = '实例名')
            (server = dedicated)
            )
            )';

   -- create database synonym
   create or replace synonym s_a for b_a@big-s_link;
复制代码
  • 在实际分析中,Big-S 共有的4000+的数据表,Small-S 顶多会使用到的只有200+。
  • 随义务扩展可以自行选择 Big-S 中的数据表,非常方便进行扩展。
  • 使用这种方式不需要配置两个数据源,只链接 Small-S 的数据库即可。
  • 同义词的使用保证了数据实时一致性,不会因为用户信息错误,而产生利益纠纷。

     至此依附 Big-S 数据实时获取解决方法应该来说有了比较不错的落地,至于使用后是什么情况,需要项目上线运行一段时间才能知道。

     Big-S 毕竟是大公司,具体我就不提了,而且是多厂商协同,切记相互扯皮,出现问题,在自己方定位问题未果后在去询问对方。

     注意对人起码的尊重,说话客气一点,搞好关系,这样会事半功倍。

 本文转自Orson博客园博客,原文链接:http://www.cnblogs.com/java-class/p/4553712.html,如需转载请自行联系原作者

相关文章
|
7月前
|
消息中间件 存储 NoSQL
离线与实时数据开发方案
离线与实时数据开发方案
126 0
|
8天前
|
数据采集 传感器 监控
MES系统的实时数据采集和监控功能具体如何实现?
MES系统(制造执行系统)通过与PLC、SCADA系统集成,加装传感器和使用物联网技术,结合条码与RFID技术、图像识别、云计算等手段,实现生产过程的全面实时数据采集和监控,确保数据的实时性和准确性,支持生产优化和决策。
|
5月前
|
存储 数据可视化 数据挖掘
实时数据分析系统的构建与优化
【7月更文挑战第29天】实时数据分析系统的构建与优化是一个复杂而细致的过程,需要从需求分析、数据源确定、数据采集与传输、数据处理与分析、数据存储、数据可视化、系统部署与配置、监控与优化等多个方面进行综合考虑。通过选择合适的技术栈和优化策略,可以构建出高效、稳定的实时数据分析系统,为企业决策提供强有力的支持。
|
4月前
|
存储 JavaScript 前端开发
ShareDB:构建实时应用从未如此简单
ShareDB:构建实时应用从未如此简单
82 0
EMQ
|
7月前
|
数据采集 消息中间件 并行计算
NeuronEX 3.2.0 发布:增强数据采集、分析计算和管理功能
工业边缘网关软件 NeuronEX 3.2.0 版本现已正式发布,本次发布带来了一系列的增强功能和新特性,旨在为用户提供更多数据采集、分析计算以及管理的能力。
EMQ
110 2
NeuronEX 3.2.0 发布:增强数据采集、分析计算和管理功能
|
7月前
|
存储 数据采集 监控
智慧工地整体方案,实现现场各类工况数据采集、存储、分析与应用
“智慧工地整体方案”以智慧工地物联网云平台为核心,基于智慧工地物联网云平台与现场多个子系统的互联,实现现场各类工况数据采集、存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块,根据现场管理实际需求灵活组合,实现一体化、模块化、智能化、网络化的施工现场过程全面感知、协同工作、智能分析、风险预控、知识共享、互联互通等业务,全面满足建筑施工企业精细化管理的业务需求,智能化地辅助建筑施工企业进行科学决策,促进施工企业监管水平的全面提高。
365 0
|
存储 安全
在线监测污水排放的方案
在线监测污水排放的方案
97 0
|
canal SQL 弹性计算
实时数据及离线数据上云方案
本实验通过使用CANAL、DataHub、DataWorks、MaxCompute服务,实现数据上云,解决了数据孤岛问题,同时把数据迁移到云计算平台,对后续数据的计算和应用提供了第一步开山之路。
|
消息中间件 JSON 物联网
实时即未来,车联网项目之原始终端数据实时ETL【二】
实时即未来,车联网项目之原始终端数据实时ETL【二】
233 0
实时即未来,车联网项目之原始终端数据实时ETL【二】
|
机器学习/深度学习 人工智能 分布式计算
离线实时一体化新能力解读| 学习笔记
快速学习离线实时一体化新能力解读
860 0
离线实时一体化新能力解读| 学习笔记