数据中台-核心功能

一、项目背景

随着大数据时代到来,数据中台在医院信息化建设中扮演着核心角色,它高效集成并管理来自挂号、HIS(医院信息系统)、临床、处方、诊疗、护理、随访等多个业务平台的海量数据。这些数据不仅支撑医院日常运营与决策,还通过标准化、清洗与转换(ETL)过程,确保数据质量,以满足向国家卫计委、省市经信委、市人保局等监管机构的合规上报需求。同时,数据中台作为数据共享与服务的枢纽,为药企、大数据厂商及科研机构提供精准、全面的医疗数据支持,促进医疗行业的创新发展。尤为重要的是,它为医生科研项目提供了强大的数据分析工具与平台,助力医生深入挖掘数据价值,分析各平台数据间的关联与趋势,为临床研究、疾病预测、治疗方案优化等提供科学依据,推动医疗科研水平的提升。

二、项目核心模块

1.数据集成

首先这个模块是我们中台项目的一个重难点,因为我们想把数据从源端同步到目标端,所以说这个源端是我们获取数据的根本。源端的类型有很多比如Mysql、Es、Redis、Oracle、Kafka、第三方文件 等。我们要做的就是将这些数据源做一个集成方便我们管理。

主要流程

分为离线数据集成跟实时数据集成

配置数据源

根据选择的数据源类型,我们进行配置数据源、流程设计节点

通过流程设计 ,拖、拉、拽创建异构数据源之间的集成任务,后续对数据进行清洗、转换、加载操作(ETL)

每个流程检点我们都可以点进去进行配置

配置节点:

配置库表输入 需要指定节点名称,节点ID(不能重复),选择链接的数据源 选择完数据源

有一个数据库表加载按钮

配置库表输出 需要指定节点名称,节点ID(不能重复) 选择链接的数据库 选择完数据源

有一个数据库表加载按钮

2.数据源管理

基于DBSwitch我们自己研发了一套数据源管理系统

用户可以进入数据源列表,包含Orcel,Mysql,SqlServer,Kafka,MongoDB 等

其中有个功能测试数据源,点击这个按钮可以对数据源进行测试链接。这一块跟 Navi cat PC

端一样 我们将数据源类型,数据源IP,用户名,密码这些信息给后端 后端进行测试连接(基于Mysql)

在后端我们需要对数据源链接池进行配置,方便我们链接到指定的数据源。

针对于链接较慢 我们可以优化JDBC链接、查询

JDBC链接这一块我们主要使用了链接池HikariCP对数据源优化,具体优化流程

我们设置初始化连接数initialSize为源数据库连接数的20%

设置最大连接数maxTotal为源数据库连接数的50%

设置最小空闲连接数minIdle为源数据库连接数的10%,确保在低峰时段也有足够空闲连接

设置连接超时的时间connectionTimeout为30秒

设置连接回收策略softMinEvictableIdleTimeMillis为10分钟,允许连接在空闲10分钟后被回收。

通过这些我们在ETL项目中可以保证数据访问的高效性和稳定性

关于JDBC优化查询方面

合理地使用索引、减少查询返回的数据量、避免在查询中使用不必要的列和条件等。 此外,我们还可以使用JDBC的预编译语句(PreparedStatement)来提高查询性能,因为预编译语句可以避免重复编译和执行相同的SQL语句(基于Mysql)。

3.数据抽取

基于我们配置好的数据源测试连接成功后,我们将源端库表加载出来,选取表中的字段进行抽取,抽取可以使用全量抽取,或者增量抽取。抽取时我们还可以对字段进行配置规则。

我们有一个规则引擎列表,规则引擎包含(脱敏规则、数据补全、数据转换、数据生成、数据清洗,自定义规则) 对字段进行关联。

抽取完数据以后我们根据绑定的处理规则对数据进行处理。

4.规则引擎

以下是处理的流程

首先我们根据选择的规则比如

数据脱敏:使用Groovy进行脱敏 需要给后端传 脱敏类型(姓名、身份证号码/证件号码、银行卡号、手机号、邮箱,比如手机号,就是手机号脱敏,卡号就是卡号脱敏)

通过Groovy代码进行脱敏 处理完以后我们对数据可以进行保存。

使用java代码脱敏,我们在前端脱敏规则页有一个脱敏示例代码根据示例我们知道要传什么值按照这个进行脱敏

数据清洗:校验实名、邮箱、手机号是否规范,不符合抛弃

数据转换:数据格式统一,男/男性-统一为男性,并且设置系统男性编码,详细地址:上海市浦东新区惠南镇,提取三个字段:上海市、浦东新区、惠南镇。

数据处理完以后我们选用增量同步将数据同步到目标端

主要使用Flink CDC 流处理

如果数据量大我们可以同步到Kafka中

流程:

Flink CDC 同步Mysql 数据到Kafka 的一个流程

前提条件

开启mysql binlog日志

1下载flink 1.1.13

flink-sql-connector-kafka.2.11-1.13.5.jar

flink-sql-connector-mysql-cdc-1.3.0.jar

启动flink-sql client flink sql客户端

2.通过Flink CDC 把Mysql 的 binlog日志同步到kafka , 借助flink sql 这个环境 ,通过表与表的关系同步到kafka

执行sql

insert into 卡夫卡表名, select* from mysql表名

在实时数据部分,通过Binlog方式,将业务数据库中的数据变更(CDC,Change Data Capture)采集到实时数仓。同时,通过Flume -Kafka-Sink对日志数据进行实时采集,当不同来源的数据都采集到实时存储系统后,便可以基于实时存储系统来构建实时数仓。在实时数仓的内部,仍然会遵守传统数仓分层理论,将数据分为ODS 层、DWD 层、DWS 层、 ADS 层以实现最大程度的模型复用。

同样我们也可以将数据同步到hive(数仓仓库中)

我们一般是将数据同步到Doris,Doris可以帮助我们对数据进行实时分析。

Doris能构建建⼀个“极速、易用、统一、实时”的数据架构来解决这些痛点:

极速:更快的查询速度,最大化提升业务分析人员的效率;

易用:对于用户侧的使用和运维侧的管控,都提供了极简的使用体验;

统一:异构数据与分析场景的统一,半结构化和结构化数据可以统一存储,多分析场景可以统一技术栈;

实时:端到端的高时效性保证,发挥实时数据的价值

数据加载:

增量及全量数据同步

在全量数据和增量的同步上,采取了Flink CDC来实现。Flink CDC实现了基于Snapshot的全量数据同步,基于 BinLog的实时增量数据同步。全量数据同步和增量数据同步可以自动切换,因此在数据迁移过程中,只需要配置好同步的表即可。当Flink任务启动时,优先进行历史表的数据同步,同步完成后自动切换成实时同步.

Doris实战——结合Flink构建极速易用的实时数仓_flink doris-CSDN博客

(更好理解Flink CDC 同步至Doris实时数仓)

应对数据更新

在实时数仓构建的过程中,还需面临高并发写入和实时更新的挑战,如何在亿级数据中快速找到需要更新的数据,并对其进行更新,⼀直都是大数据领域不断追寻的答案

高并发数据更新

Doris中通过Unique Key 模型来满足数据更新的需求,同时通过MVCC多版本并发机制来实现数据的读写隔离。当新数据写入时,如果不存在相同key的数据则会直接写入,如果有相同key的数据则增加版本,此时数据将多个版本的形式存在。后台会启动异步的Compaction进程对历史版本的数据进行清理,当用户在查询时,Doris会将最新版本对应的数据返回给用户,这种设计解决了海量数据的更新问题。

5.接口对接:抽取HIS出院患者、服药数据,webservice兼容不同开发语言(net、java、php)的远程调用

需要明确接口需要提供哪些数据,包括但不限于:

出院患者的基本信息(如姓名、性别、年龄、出院日期等)

出院患者的服药记录(药物名称、剂量、用药时间等)

由于需要兼容多种开发语言,使用RESTful Web服务。RESTful API是一种轻量级的Web服务架构风格,可以通过HTTP协议进行通信,易于不同语言实现客户端调用

接口设计 (示例):

  • URL: /api/patients/discharged
  • 方法: GET
  • 参数: (可选)日期范围(start_date, end_date)
  • 响应: JSON格式的患者列表

实现Web服务

  • 创建一个Spring Boot项目,并添加Web依赖。
  • 编写Controller层处理HTTP请求。
  • 使用Repository或Service层访问数据库(HIS数据库),并提取所需数据。
  • 配置CORS(跨源资源共享)以允许不同域名的客户端调用。

6.接口集市:提供药企、大数据、科研机构

接口集市是一个专为数据需求方(如药企、大数据公司、科研机构等)与数据提供方搭建的交互平台。该平台旨在促进数据的流通与共享,加速数据在药物研发、疾病研究、大数据分析等领域的创新应用。接口集市的核心功能包括 数据接口展示与搜索、接口文档示例、交易管理、技术支持与咨询

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值