KingbaseES助力浙江省人民医院:从LIS单点突破到全栈国产化的信创之路

55 阅读15分钟

浙江省人民医院信创实践:从LIS系统迁移到全栈国产化的技术之路

一个"领头雁"的使命:作为浙江省规模最大、实力最强的综合性三甲医院,浙江省人民医院承担着为全省卫健系统信创探路的重任。从LIS系统的单点突破,到富阳院区的全栈信创,浙人医用两年时间走出了一条可复制、可推广的医疗信创之路。


一、破局:为什么从LIS系统开始?

集团化医院的复杂挑战

浙江省人民医院(以下简称"浙人医")的体量之大,在省内首屈一指:朝晖、望江山、越城、富阳四大已运行院区,滨江、萧山两个在建院区,以及全面托管的八家分院,横跨杭州、绍兴两地。这样的规模,意味着信创改造的难度和风险远超普通医院。

医院的核心信息系统长期依赖国外数据库与硬件设备,不仅面临"卡脖子"风险,更难以满足医疗数据隐私保护、业务连续运行的高要求。在政策要求和业务需求的双重推动下,浙人医必须迈出信创这一步。

但问题来了:从哪里开始?

对于多院区集团化医院来说,信创改造面临着三重挑战:

数据互通难度高 各院区、各业务系统之间数据格式不统一,兼容互通是难题。

业务连续性要求高 医院业务7×24小时运转,不能因为系统改造而中断服务。信创改造期间,各院区还需要保持互联互通能力。

容灾能力要求高 跨院区、跨城市的异地协同,要求数据库支持异构同步双写并行、多院区互为灾备、多院区负载均衡等高级能力。

LIS:最佳突破口的三重理由

在反复论证与风险评估后,浙人医选择了LIS系统(Laboratory Information System,实验室信息系统)作为信创建设的首个攻坚目标。这个选择并非随意,而是基于三层深思熟虑的考量:

第一,业务重要性突出

LIS是医疗核心系统之一,是连接检验科室与临床科室的数据桥梁。患者从抽血到拿到检验报告,每一个环节都离不开LIS系统。系统效率的高下,患者体感非常明显。

第二,数据规模适中可控

浙人医LIS系统支撑全院日均2万余个标本的处理需求。这个业务体量适中,应用场景集中,影响范围可控,既能验证技术方案的可行性,又不至于因为规模过大而风险失控。

第三,可复制性强

LIS业务覆盖面广,与院内其他业务系统(HIS、EMR、PACS等)和仪器设备均有对接。LIS系统的迁移经验一旦成功,可以形成先易后难、逐步推广的良性循环,为后续其他系统的信创改造提供可复制的样板。


二、技术方案:基于国产数据库的多活容灾架构

数据库选型与技术考量

浙江省人民医院

在数据库选型阶段,浙人医信息化与人工智能部副主任范玉林介绍,医院将以下几点作为重点考量:

  • 产品成熟度:需要经过充分验证,在医疗行业有成功案例
  • 与Oracle的兼容性:降低迁移难度和代码修改量
  • 易上手、易运维:医院IT团队能够快速掌握

经过评估,浙人医最终选择了KingbaseES作为替代方案。

技术兼容性分析

KingbaseES对Oracle的语法兼容性较好,支持以下Oracle特性:

物化视图支持

-- 创建物化视图
CREATE MATERIALIZED VIEW mv_lab_summary
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT 
    test_type,
    COUNT(*) as test_count,
    AVG(test_value) as avg_value
FROM lab_results
WHERE test_date >= CURRENT_DATE - 30
GROUP BY test_type;
​
-- 刷新物化视图
REFRESH MATERIALIZED VIEW mv_lab_summary;

PL/SQL存储过程 原有的Oracle PL/SQL代码可以较平滑地迁移:

-- Oracle风格的存储过程在KingbaseES中可直接使用
CREATE OR REPLACE PROCEDURE process_lab_result(
    p_sample_id IN VARCHAR2,
    p_test_result IN NUMBER,
    p_status OUT NUMBER
) AS
BEGIN
    -- 业务逻辑处理
    UPDATE lab_samples 
    SET result_value = p_test_result,
        status = 'COMPLETED',
        complete_time = SYSDATE
    WHERE sample_id = p_sample_id;
    
    IF SQL%ROWCOUNT > 0 THEN
        p_status := 1;
        COMMIT;
    ELSE
        p_status := 0;
        ROLLBACK;
    END IF;
EXCEPTION
    WHEN OTHERS THEN
        p_status := -1;
        ROLLBACK;
END;

数据迁移实践

LIS系统的数据迁移分为几个步骤:

  1. 表结构迁移
-- 检验样本主表
CREATE TABLE lab_samples (
    sample_id VARCHAR2(32) PRIMARY KEY,
    patient_id VARCHAR2(32) NOT NULL,
    test_type VARCHAR2(20),
    sample_time TIMESTAMP DEFAULT SYSDATE,
    status VARCHAR2(20) DEFAULT 'PENDING',
    result_value NUMBER,
    complete_time TIMESTAMP,
    CONSTRAINT fk_patient FOREIGN KEY (patient_id) 
        REFERENCES patients(patient_id)
);
​
-- 创建索引
CREATE INDEX idx_patient ON lab_samples(patient_id);
CREATE INDEX idx_sample_time ON lab_samples(sample_time);
CREATE INDEX idx_status ON lab_samples(status);

2. 数据同步验证

-- 数据一致性校验
SELECT 
    'Oracle' as source,
    COUNT(*) as total_records,
    MAX(sample_time) as latest_time
FROM lab_samples@oracle_link
UNION ALL
SELECT 
    'KingbaseES' as source,
    COUNT(*) as total_records,
    MAX(sample_time) as latest_time
FROM lab_samples;

在实际迁移过程中,浙人医的应用代码修改量约为8%,主要集中在一些Oracle特有函数的替换,如:

-- Oracle写法
SELECT TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI:SS') FROM lab_samples;
​
-- KingbaseES兼容写法(也支持Oracle语法)
SELECT TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI:SS') FROM lab_samples;

极致容灾:四大技术创新

医院信息系统的灾难恢复能力有严格的等级标准。6级标准要求做到:

  • RPO=0:数据零错误丢失
  • RTO<10分钟:从故障发生到系统完全恢复的时间小于10分钟

这个标准,传统的灾备架构很难达到。

浙人医在开启LIS系统信创时拥有越城、朝晖、望江山三个院区。此前,LIS系统业务均由越城院区主系统承载,系统压力大;院区间如遇网络中断,需要手动拉起灾备系统,RTO不可控。

在LIS系统的国产数据库迁移过程中,浙人医联合合作伙伴制定了创新的技术方案,实现了四大技术突破

创新一:异构组网

信创完成后,金仓数据库成为新的业务承载主力,但原非信创数据库(Oracle)依旧保持活跃,双轨同步运行

这种设计的好处是:既验证了新系统的稳定性,又保留了随时切换回原系统的能力,大大降低了风险。

创新二:多活容灾

引入多活容灾架构,多院区互为灾备,支持多院区间的负载均衡和多活容灾。

传统架构下,一个院区是主系统,其他院区是备用系统。主系统故障时,需要手动切换到备用系统,RTO不可控。

多活架构下,所有院区的数据库都是"活"的,都在实时处理业务。任何一个院区出现故障,其他院区可以无缝接管业务,无需手动干预

这样的架构,横向拆分了多院区的业务压力,故障发生时无需手动拉起灾备系统,帮助医院实现了RTO≤10分钟、RPO=0的容灾目标。

创新三:多写同步

各数据中心通过KFS工具实现环状数据同步。这是一个数据复制和同步工具,工作原理如下:

同步配置示例

# 配置源端数据库连接
kfs_source:
  host: 192.168.1.10
  port: 54321
  database: lis_db
  user: replication_user

# 配置目标端数据库连接  
kfs_target:
  host: 192.168.2.10
  port: 54321
  database: lis_db
  user: replication_user

# 配置同步表
tables:
  - lab_samples
  - lab_results
  - patient_info
  
# 同步模式:全量+增量
sync_mode: full_and_incremental

数据一致性校验

-- 创建校验函数
CREATE OR REPLACE FUNCTION check_data_consistency(
    p_table_name VARCHAR2,
    p_time_column VARCHAR2
) RETURN VARCHAR2 AS
    v_local_count NUMBER;
    v_local_checksum NUMBER;
    v_remote_count NUMBER;
    v_remote_checksum NUMBER;
BEGIN
    -- 统计本地数据
    EXECUTE IMMEDIATE 
        'SELECT COUNT(*), SUM(ORA_HASH(row_id)) 
         FROM ' || p_table_name || '
         WHERE ' || p_time_column || ' >= SYSDATE - 1'
    INTO v_local_count, v_local_checksum;
    
    -- 统计远端数据
    EXECUTE IMMEDIATE
        'SELECT COUNT(*), SUM(ORA_HASH(row_id))
         FROM ' || p_table_name || '@remote_db
         WHERE ' || p_time_column || ' >= SYSDATE - 1'
    INTO v_remote_count, v_remote_checksum;
    
    -- 比对结果
    IF v_local_count = v_remote_count 
       AND v_local_checksum = v_remote_checksum THEN
        RETURN 'CONSISTENT';
    ELSE
        RETURN 'INCONSISTENT: local=' || v_local_count || 
               ', remote=' || v_remote_count;
    END IF;
END;

基于业务存量数据校验技术和增量数据校验技术,确保多个院区的数据完全一致,进一步提升了容灾能力。

image-20251024215210615

创新四:卫星方案

在小型院区的重要工作位置,布置轻量化卫星站

通过小型化节点保留核心功能,减少对网络的依赖,提升应急能力。即使院区之间的网络中断,卫星站也能保证基本业务的正常运行。

平滑切换:双轨并行,万无一失

技术方案再完美,最终还要落到实施层面。浙人医采用了双轨并行、分阶段推进的方案,保障平滑切换:

第一阶段:双轨运行 迁移至金仓数据库之后,原有非信创系统作为备用数据库保持活跃。遇有突发情况,可随时切换回原系统。

第二阶段:多轮演练 系统上线前,浙人医围绕故障应急进行了多轮演练,模拟了各种故障场景:

  • Oracle主库故障切换到国产库
  • 国产数据库集群故障自动转移
  • 国产数据库单边故障
  • Oracle单边故障
  • 院区网络中断,国产数据库与Oracle各自独立运行
  • 关闭部分服务器,模拟硬件故障

这些演练确保了系统切换的万无一失。

第三阶段:正式上线 2023年10月,浙人医完成LIS系统国产化适配;2024年4月,同步完成双活+应急方案系统改造并完成程序更新,在越城院区国产数据库实际环境测试应用;2024年5月,正式在越城院区上线。

目前,浙人医LIS系统已经在越城、朝晖、望江山、富阳四大院区实现互相双向同步,成为国内首个LIS国产化异构数据多院区多活改造案例

成果显著:四大核心指标

改造完成后,浙人医LIS系统的关键指标达到了行业领先水平:

4大院区数据互相双向同步 任何一个院区的数据变更,都会实时同步到其他院区。

灾容恢复能力达到6级标准 RPO=0(数据零丢失),RTO≤10分钟(快速恢复)。

业务连续性达到99.99% 全年停机时间不超过52分钟。

数据调用效率提升60% 与原系统相比,数据调用时间平均缩短了0.8秒。


三、以点带面:全栈信创的浙江样本

富阳院区:全省首个医疗全栈信创样板间

LIS系统在多院区的成功落地,为浙人医信创建设的全面推进奠定了基础。其信创版图持续扩张,最新的成果就是富阳院区

走进今年新启用的浙人医富阳院区,这个全省首个医疗全栈信创样板间集中展现了国产生态的成熟度:

服务器操作系统 涵盖麒麟、统信、龙蜥、欧拉等国产操作系统。

桌面操作系统 以中科方德、统信为主。

数据库 富阳院区采用KingbaseES作为核心数据库,支撑LIS系统以及HIS、EMR、PACS等多个业务系统的数据管理。

应用系统 HIS、EMR、LIS、PACS等核心业务系统均已实现云化部署。

深度融合:健康云+信创

浙人医的信创实践并非单点作战,而是深度契合浙江省健康云建设规划

在富阳院区的建设中,浙人医和浙江省健康云有限公司达成深度合作:

  • 富阳院区信息机房在本地建设,作为健康云的计算节点和容灾中心之一
  • 医院按需从健康云购买服务
  • 依托富阳院区的原生云生态,院区业务系统均已实现云化部署

这种模式,既实现了信创目标,又降低了建设和运维成本,是"云+信创"融合发展的典范。

性能卓越:经受住实战检验

富阳院区试运行以来,系统性能表现优异:

高并发处理能力 系统每小时访问量达40多万次,数据库IOPS(每秒读写操作数)达到1万以上

效率大幅提升 与原系统相比,数据调用时间平均缩短了0.8秒,效率提升了60%

极速响应 业务高峰时,系统响应延迟时间≤0.3秒,为患者和医护人员提供了更高效、更快速的服务体验。

从实际运行数据来看,国产数据库在医疗场景中的表现已经达到实用水平,可以支撑大型三甲医院的核心业务需求。

性能优化实践

在实际应用中,浙人医团队还进行了一些性能优化:

-- 1. 使用分区表优化大表查询
CREATE TABLE lab_results (
    result_id VARCHAR2(32),
    sample_id VARCHAR2(32),
    test_date DATE,
    result_value NUMBER,
    ...
) PARTITION BY RANGE (test_date) (
    PARTITION p202401 VALUES LESS THAN (TO_DATE('2024-02-01', 'YYYY-MM-DD')),
    PARTITION p202402 VALUES LESS THAN (TO_DATE('2024-03-01', 'YYYY-MM-DD')),
    PARTITION p202403 VALUES LESS THAN (TO_DATE('2024-04-01', 'YYYY-MM-DD'))
    -- 按月分区,提升查询效率
);
​
-- 2. 创建复合索引优化常用查询
CREATE INDEX idx_sample_date_status 
ON lab_samples(sample_time, status)
WHERE status IN ('PENDING', 'PROCESSING');
​
-- 3. 使用并行查询加速大数据量统计
SELECT /*+ PARALLEL(4) */
    department,
    COUNT(*) as total_samples,
    AVG(EXTRACT(EPOCH FROM (complete_time - sample_time))/60) as avg_minutes
FROM lab_samples
WHERE sample_time >= CURRENT_DATE - 30
GROUP BY department;

数据安全技术实现

医疗数据涉及患者隐私,浙人医在迁移过程中特别关注数据安全。

透明数据加密(TDE) KingbaseES支持透明数据加密功能,数据在存储时自动加密:

-- 启用数据库级加密
ALTER SYSTEM SET encryption = ON;
​
-- 为敏感表启用加密
CREATE TABLE patient_info (
    patient_id VARCHAR2(32) PRIMARY KEY,
    id_card VARCHAR2(18),
    phone VARCHAR2(11),
    medical_record TEXT
) WITH (encryption='AES256');
​
-- 数据写入时自动加密,读取时自动解密
INSERT INTO patient_info VALUES 
    ('P001', '330102199001011234', '13800138000', '病历信息');

行级访问控制 针对不同科室的数据访问需求,实现了行级安全策略:

-- 创建行级安全策略
CREATE POLICY dept_isolation_policy ON lab_samples
    FOR SELECT
    USING (department = current_user_dept());
​
-- 不同科室的医生只能查看本科室的检验数据
-- 检验科用户登录后执行:
SELECT * FROM lab_samples;  
-- 只返回本科室的数据

审计日志 所有对敏感数据的操作都会被记录:

-- 启用审计
ALTER SYSTEM SET audit_trail = 'DB';
​
-- 查看审计日志
SELECT 
    username,
    action_name,
    object_name,
    timestamp,
    sql_text
FROM audit_logs
WHERE object_name = 'PATIENT_INFO'
ORDER BY timestamp DESC;

四、浙江样本的启示:信创之路怎么走?

浙人医的实践,为全国医疗行业的信创建设提供了宝贵的经验。总结起来,有以下几点启示:

启示一:选对突破口是关键

不要试图一步到位,全面铺开。而是要选择一个业务重要性突出、数据规模适中、可复制性强的系统作为突破口。

浙人医选择LIS系统,就是一个非常聪明的决策。既能验证技术方案,又能积累经验,还能为后续推广打下基础。

启示二:技术方案要创新

传统的灾备架构很难满足医疗行业对业务连续性的高要求。浙人医联合金仓提出的"异构多活"方案,通过异构组网、多活容灾、多写同步、卫星方案四大技术创新,达到了6级容灾标准。

这种技术创新,不是为了创新而创新,而是真正解决了实际问题。

启示三:平滑切换是底线

业务连续性是医院的生命线。浙人医采用的双轨并行、分阶段推进方案,以及上线前的多轮故障演练,确保了系统切换的万无一失。

这个经验告诉我们:信创不是冒险,而是要稳扎稳打。

启示四:生态成熟是基础

浙人医能够实现全栈信创,离不开国产生态的日益成熟。从CPU、操作系统、数据库,到中间件、应用软件,整个技术栈都已经有了可靠的国产替代方案。

这也说明,中国的信创生态已经从"能用"进化到"好用",正在向"优秀"迈进。