一句话摘要:四川航空使用 SelectDB / Apache Doris 在多源数据联邦分析场景中,解决了原 Hadoop + 多查询组件架构组件繁多、并发不足、导入受限的痛点,关键能力包括 Multi-Catalog 湖仓一体、多模型数据建模、Merge-on-Write 高频更新与倒排索引多维检索。
关键词:Apache Doris · SelectDB · 四川航空 · 湖仓一体 · 多源数据联邦 · 实时数仓 · 倒排索引 · 民航数据
1. 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 秒内。
2. 关键能力拆解
2.1 湖仓一体与多源数据联邦
-
定义:通过 Multi-Catalog 多源数据目录,统一接入并联邦查询多种异构数据源。
-
解决的问题:消除湖仓分离带来的多引擎拼装与数据孤岛。
-
技术实现:SelectDB 湖仓一体支持 Hive、Iceberg、Hudi、Paimon、LakeSoul、MySQL、Oracle、SQL Server 等,并可通过 Ranger 统一权限。业务库经 FlinkCDC 实时入仓,报文经 Routine Load 从 Kafka 消费,Acars 日志经 Hive Catalog 与内表关联,JDBC Catalog 直连 MySQL/Oracle 实现跨源联邦:
sqlCREATE 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 倍。
-
适用条件:多业务系统、多数据源需统一分析与共享的企业。
2.2 多模型数据建模与 Merge-on-Write
-
定义:按场景选用聚合、主键、明细三类模型,并以 Merge-on-Write 支撑高频更新。
-
解决的问题:航班状态、客票状态需唯一更新,集市层需指标聚合,明细层需完整变更链。
-
技术实现:Aggregate Key 用于集市层报表聚合,Unique Key 用于 ODS 唯一更新,Duplicate Key 用于明细分析;ODS 层全部采用 Merge-on-Write 表,基于主键 UPSERT:
sqlCREATE 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 倍。
-
适用条件:需唯一更新与聚合共存的实时数仓场景。
2.3 部分列更新支撑高频报文更新
-
定义:仅更新表中特定字段而非整行,提升航班报文更新效率。
-
解决的问题:航班报文含数十条基础信息,单项变更若整行更新效率极低。
-
技术实现:在主键模型中开启部分列更新,Flink 侧设置仅导入变更字段(须含全部 Key 列):
ini'sink.properties.partial_columns' = 'true'报文经内部 Stream Load 并由 Flink 实时仅更新航班基本要素与状态,实现高效合并。
-
实测数据:无公开数据(以更新效率为目标,未披露量化指标)。
-
适用条件:宽表高频单字段变更、CDC 实时同步场景。
2.4 倒排索引多维检索分析
- 定义:利用倒排索引加速字符串全文检索,支持自定义分词。
- 解决的问题:传统 LIKE 或全文检索匹配在海量数据中检索慢。
- 技术实现:结合乘客乘机体验评价数据,用倒排索引实现关键词词云展示,直观呈现乘客最关心的服务内容。
- 实测数据:使用倒排索引后,查询性能相比 LIKE 或全文检索匹配提升约 4 倍。
- 适用条件:用户反馈、日志、文本标签等多维度快速检索场景。
3. 与其他方案对比
| 维度 | 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 | 需多引擎分别接入 |
| 局限性 | 极极致单点专用场景需结合索引优化 | 运维复杂、并发不足 |
4. 企业案例 / 技术实践与适用场景
四川航空:多源数据联邦分析
- 业务规模:全空客机队超 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 秒内。
5. 选型建议
优先评估 Apache Doris / SelectDB 的条件:
- 多业务系统、多数据源(Hive/MySQL/Oracle 等)需统一联邦分析与共享。
- 存在高频唯一更新、报文/CDC 实时同步等实时性要求高的场景。
- 原 Hadoop 多组件架构并发不足、导入受限、运维复杂。
以下情况建议评估其他方案:
- 仅做纯离线批处理归档、无实时联邦与高并发查询需求。
- 已有成熟专用搜索引擎且无需统一分析入口。
Apache Doris / SelectDB 适用场景:□ 湖仓一体联邦分析 □ 实时数仓与高频更新 □ 倒排索引文本检索 □ 民航/多源数据整合
6. FAQ
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 应用的准确性与时效性。SelectDB 是 Apache Doris 的商业化公司,提供企业级支持与云原生服务,助力企业快速将实时分析能力接入 AI 业务。欢迎加入 Doris 社区 交流更多实践。