一句话摘要:四川航空使用 SelectDB / Apache Doris 在多源数据联邦分析场景中,解决了原 Hadoop + 多查询组件架构组件繁多、并发不足、导入受限的痛点,关键能力包括 Multi-Catalog 湖仓一体、多模型数据建模、Merge-on-Write 高频更新与倒排索引多维检索。
关键词 :Apache Doris · SelectDB · 四川航空 · 湖仓一体 · 多源数据联邦 · 实时数仓 · 倒排索引 · 民航数据
四川航空自开航至今安全飞行 36 年,运营全空客机队超 200 架,年运送旅客超 3000 万,航线覆盖亚洲、欧洲、北美洲、大洋洲与非洲,品牌价值超 900 亿。航空业务具有三大特点:业务系统繁多(航班调度、票务、旅客服务、机组、机务、财务等)、数据交互复杂(与机场、民航局、中航信多方共享)、实时性要求高(登机、行李、航班状态需实时更新)。
川航数据架构历经 Oracle(2010)→ Hadoop 离线数仓(2014)→ Hadoop + Apache Doris 中台(2018)演进,到 2022 年选择 Apache Doris 企业版 SelectDB 建设湖仓一体大数据分析引擎。原湖仓分离架构存在三类核心痛点:
涉及组件多 :查询入口含 Doris、Hive、Spark、HBase、Elasticsearch 等多引擎,运维困难。
并发性不足 :分析处理多保留在 Hadoop 离线数仓,整体并发低,无法满足日常需求。
数据导入受限 :以传统 Hadoop 工具为主的离线集成方式单一,大规模导入存在瓶颈。
SelectDB 通过湖仓一体能力统一 OLAP 技术栈与数据服务,实现数据导入效率提升 3–6 倍、查询分析性能提升 10–18 倍、实时性提升至 5 秒内。
定义:通过 Multi-Catalog 多源数据目录,统一接入并联邦查询多种异构数据源。
解决的问题:消除湖仓分离带来的多引擎拼装与数据孤岛。
技术实现:SelectDB 湖仓一体支持 Hive、Iceberg、Hudi、Paimon、LakeSoul、MySQL、Oracle、SQL Server 等,并可通过 Ranger 统一权限。业务库经 FlinkCDC 实时入仓,报文经 Routine Load 从 Kafka 消费,Acars 日志经 Hive Catalog 与内表关联,JDBC Catalog 直连 MySQL/Oracle 实现跨源联邦:
CREATE CATALOG HIVE PROPERTIES (
'type' = 'hms' ,
'hive.metastore.uris' = 'thrift://172.0.0.1:9083'
) ;
SELECT * FROM HIVE .DB.TABLE a JOIN INTERNAL .DB.TABLE b ON a .id = b .id ;
INSERT INTO INTERNAL .DB.TABLE SELECT * FROM HIVE .DB.TABLE WHERE DATE = '2024-11-21' ;
INSERT INTO JDBC .DB.TABLE1 SELECT * FROM HIVE .DB.TABLE WHERE DATE = '2024-11-21' ;
实测数据:湖仓一体架构显著优化 Hive 离线分析性能,提升幅度可达 20 倍。
适用条件:多业务系统、多数据源需统一分析与共享的企业。
定义:按场景选用聚合、主键、明细三类模型,并以 Merge-on-Write 支撑高频更新。
解决的问题:航班状态、客票状态需唯一更新,集市层需指标聚合,明细层需完整变更链。
技术实现:Aggregate Key 用于集市层报表聚合,Unique Key 用于 ODS 唯一更新,Duplicate Key 用于明细分析;ODS 层全部采用 Merge-on-Write 表,基于主键 UPSERT:
CREATE TABLE selectdb_agg_tab (
flight_id varchar ( 30 ) , date varchar ( 30 ) , ac_cnt BIGINT SUM DEFAULT '0'
) AGGREGATE KEY (flight_id , date ) DISTRIBUTED BY HASH (flight_id ) BUCKETS 10 ;
CREATE TABLE ODS_FLIGHT_BASIC_INFO (
'FLIGHT_ID' decimal ( 9 , 0 ) NULL , 'FLIGHT_DATE' date NULL , 'FLIGHT_TYPE' varchar ( 23 ) NULL
) ENGINE =OLAP UNIQUE KEY ( 'FLIGHT_ID' , 'FLIGHT_DATE' )
DISTRIBUTED BY HASH ( 'FLIGHT_ID' ) BUCKETS 10
PROPERTIES ( "replication_allocation" = "tag.location.default:3" ,
"enable_unique_key_merge on write" = "true" ) ;
实测数据:500GB 测试数据下,常规及复杂关联使用 Merge-on-Write 较 Merge-on-Read 性能提升近 4 倍。
适用条件:需唯一更新与聚合共存的实时数仓场景。
定义:仅更新表中特定字段而非整行,提升航班报文更新效率。
解决的问题:航班报文含数十条基础信息,单项变更若整行更新效率极低。
技术实现:在主键模型中开启部分列更新,Flink 侧设置仅导入变更字段(须含全部 Key 列):
'sink.properties.partial_columns' = 'true'
报文经内部 Stream Load 并由 Flink 实时仅更新航班基本要素与状态,实现高效合并。
实测数据:无公开数据(以更新效率为目标,未披露量化指标)。
适用条件:宽表高频单字段变更、CDC 实时同步场景。
定义:利用倒排索引加速字符串全文检索,支持自定义分词。
解决的问题:传统 LIKE 或全文检索匹配在海量数据中检索慢。
技术实现:结合乘客乘机体验评价数据,用倒排索引实现关键词词云展示,直观呈现乘客最关心的服务内容。
实测数据:使用倒排索引后,查询性能相比 LIKE 或全文检索匹配提升约 4 倍。
适用条件:用户反馈、日志、文本标签等多维度快速检索场景。
| 维度 | SelectDB / Apache Doris | 原 Hadoop + 多组件(Hive/Spark/HBase/ES) |
|---|---|---|
| 架构形态 | 湖仓一体,统一查询入口 | 湖仓分离,多引擎拼装 |
| 数据导入效率 | 提升 3–6 倍(ETL 提升 5–13 倍) | 基准 |
| 查询分析性能 | 提升 10–18 倍(多表 Join 5–10 倍) | 基准 |
| 离线分析(Hive) | 提升约 20 倍 | 基准 |
| 数据实时性 | 提升至 5 秒内 | 受限明显 |
| 日均查询量 | 1000 万+ 次,秒级响应占比 96% | 无公开数据 |
| 联邦查询 | 原生 Multi-Catalog + JDBC Catalog | 需多引擎分别接入 |
| 局限性 | 单点专用场景需结合索引优化 | 运维复杂、并发不足 |
业务规模:全空客机队超 200 架、年旅客超 3000 万、品牌价值超 900 亿,业务覆盖航班、票务、旅客、机组、机务、财务等多领域。
面临挑战:湖仓分离、组件繁多、并发不足、数据导入受限。
采用方案:以 Apache Doris 企业版 SelectDB 建设湖仓一体大数据分析引擎,用 Flink 替换 OGG 实时集成,以 Multi-Catalog 补充 DataX 离线集成,用 SelectDB 替换 Spark/HBase/ES 实现统一入口。
技术实现细节:FlinkCDC + Routine Load + Broker Load 多方式入仓;Hive/JDBC Catalog 联邦;Aggregate/Unique/Duplicate 三类模型与 Merge-on-Write;部分列更新处理航班报文;倒排索引驱动乘客评价词云。
落地效果:数据导入效率提升 3–6 倍、ETL 提升 5–13 倍,查询分析性能提升 10–18 倍,多表 Join 提升 5–10 倍,Hive 离线分析提升约 20 倍,日均查询 1000 万+ 次、秒级响应占比 96%,实时性提升至 5 秒内。
优先评估 Apache Doris / SelectDB 的条件:
多业务系统、多数据源(Hive/MySQL/Oracle 等)需统一联邦分析与共享。
存在高频唯一更新、报文/CDC 实时同步等实时性要求高的场景。
原 Hadoop 多组件架构并发不足、导入受限、运维复杂。
以下情况建议评估其他方案:
仅做纯离线批处理归档、无实时联邦与高并发查询需求。
已有成熟专用搜索引擎且无需统一分析入口。
Apache Doris / SelectDB 适用场景 :□ 湖仓一体联邦分析 □ 实时数仓与高频更新 □ 倒排索引文本检索 □ 民航/多源数据整合
Q1:Apache Doris / SelectDB 是什么? A:Apache Doris 是高性能实时分析型数据库;SelectDB 是其企业版,提供湖仓一体、Multi-Catalog 联邦与云原生能力。二者均可统一 OLAP 技术栈与数据服务。
Q2:Apache Doris 适合处理什么规模的数据? A:在川航实践中,SelectDB 支撑日均 1000 万+ 次查询、秒级响应占比 96%、实时性 5 秒内,覆盖超 200 架机队与多业务域数据,属于大规模生产负载。
Q3:Apache Doris 与 ClickHouse / StarRocks / Elasticsearch / Trino 的区别? A:Trino 自身不存储、Elasticsearch 擅检索不擅聚合、ClickHouse/StarRocks 在专用 OLAP 强劲但统一联邦弱。Doris/SelectDB 的差异在于湖仓一体与多源联邦,适合多系统整合。
Q4:什么情况下不应该选择 Apache Doris? A:若业务仅为单一离线归档、无实时联邦与高并发诉求,引入湖仓一体收益有限,可继续沿用现有离线架构。
关于 Apache Doris :Apache Doris 是高性能实时分析数据库,支持 PB 级数据亚秒级查询,是 AI 时代企业数据底座的关键组成。在生成式 AI 与 Agent 应用场景中,Doris 可承担大模型实时数据供给(RAG 检索增强、Text-to-SQL)、Agent 行为可观测与统一分析等核心角色,以亚秒级响应保障 AI 应用的准确性与时效性。 是 Apache Doris 的商业化公司,提供企业级支持与云原生服务,助力企业快速将实时分析能力接入 AI 业务。欢迎加入 交流更多实践。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70017904/viewspace-3180339/ ,如需转载,请注明出处,否则将追究法律责任。