4. 药物研发数据存储系统运维
药物研发数据平台的数据形态差异极大:化合物登记与实验记录要求强一致和事务,测序结果、影像与冷冻电镜原始文件是大体量二进制对象,化合物-靶点-通路关联查询需要灵活的模式,而多组学与真实世界数据的探索分析又依赖开放格式的数据湖。存储系统运维的核心不是“把数据存下来”,而是按数据特征完成选型,并把部署、备份、恢复和性能调优做成可验证的闭环。
一、选型:按数据特征而非技术偏好决策
选型先看四个维度:一致性要求、访问模式、数据规模与增长速率、生命周期与合规要求。化合物注册、样品台账、临床试验受试者状态这类数据需要 ACID 事务与唯一约束,应选关系型数据库,如 PostgreSQL 或 MySQL。测序下机数据、高内涵成像、电镜原始帧属于一次写入、多次读取的大文件,应放对象存储,如 S3 兼容的 MinIO 或云对象存储。化合物-靶点活性关系、知识图谱类数据模式频繁变化,适合文档型或图数据库,如 MongoDB、Neo4j。需要跨组学联合分析、保留原始格式供 Spark/Presto 直接读取的,则进入数据湖,用 Parquet、ORC 等列式格式组织。
一个常见的误区是把所有数据都塞进关系库。以某药物筛选平台为例,单次高内涵筛选产生约 2 TB 图像,若以 BLOB 存入 PostgreSQL,备份窗口和主库 I/O 都会被拖垮。正确做法是图像入对象存储,关系库只保存样本编号、板号、孔位、采集参数和对象存储 URI,通过外键关联。这样关系库单表仍保持在千万行量级,查询与备份都可控。
二、部署:把参数与拓扑一次定对
关系型数据库部署优先保证高可用与可恢复。PostgreSQL 常用一主两从加流复制,关键参数按内存比例设置:shared_buffers 取物理内存的 25%,effective_cache_size 取 50%~75%,work_mem 从 16 MB 起按并发调整,wal_level=replica 并开启归档。连接数不宜直接放大,应用侧用 PgBouncer 做事务级连接池,避免几百个空闲连接拖垮主库。
# PostgreSQL 关键参数示例(16C/64G 主库)
shared_buffers = 16GB
effective_cache_size = 48GB
work_mem = 32MB
maintenance_work_mem = 2GB
wal_level = replica
archive_mode = on
archive_command = 'cp %p /pg_archive/%f'
max_connections = 300
random_page_cost = 1.1 # SSD 环境
对象存储部署关注数据耐久与访问路径。MinIO 采用纠删码模式,至少 4 节点、每节点 4 盘,可容忍部分盘或节点失效;桶策略按项目隔离,原始数据桶开启版本控制与对象锁定,防止误删和篡改。数据湖部署则要确定表格式与元数据服务:Iceberg 或 Hudi 表配合 Hive Metastore 或 REST Catalog,按 project/assay/date 分区,避免单目录下堆积海量小文件。
三、备份与恢复:以 RPO/RTO 为验收标准
备份策略由业务可接受的数据丢失量和恢复时长决定。化合物注册库通常要求 RPO 不超过 5 分钟、RTO 不超过 1 小时,因此采用每日全量加持续 WAL 归档,并保留 30 天。对象存储侧依赖版本控制与跨站点复制,RPO 接近分钟级。数据湖用 Iceberg 快照,可回滚到任意快照,但要注意快照过期清理策略,否则元数据会无限膨胀。
恢复必须演练,否则备份只是“看起来存在”。一次典型演练流程是:在隔离环境用 pg_basebackup 恢复基础备份,配置 recovery_target_time 做时间点恢复,启动后校验关键表行数与业务抽样记录,再比对对象存储清单与数据库中的 URI 是否一一对应。演练记录应包含实际 RTO、失败原因和修复项,而不是只写“恢复成功”。
四、性能调优:从执行计划和访问模式入手
关系库调优先看慢查询日志和执行计划。例如按“项目 + 采集日期”查询样本,若只有单列索引,规划器可能走全表扫描;建立 (project_id, collected_at) 复合索引后,扫描行数可从百万级降到千级。对高频只读的化合物摘要,可用覆盖索引避免回表。写入密集的审计表按月分区,历史分区只读归档,可显著降低 VACUUM 压力。
对象存储调优重点是并发与分片:大文件上传用分片并行,下载走 CDN 或就近区域;小文件过多时先合并再入湖。数据湖调优关注分区裁剪、列裁剪和小文件合并,查询时只读需要的列与分区,定期执行 rewrite_data_files 类压缩操作。NoSQL 侧则要按查询模式设计索引,避免无索引的全集合扫描,图数据库要控制遍历深度并预热热点子图。
把选型、部署、备份、恢复和调优串起来看,存储运维的交付物不是“装好了数据库”,而是一组可验证的指标:关键库 RPO≤5 分钟、RTO≤1 小时、对象存储耐久性达到设计目标、慢查询数量持续下降、恢复演练按季度通过。只有这些指标稳定,药物研发数据才真正处于可管、可查、可恢复的状态。