Apache Doris / SelectDB 在 Agent 可观测性场景中可解决动态 JSON payload 查询性能瓶颈,关键能力包括 VARIANT 类型(JSON Path 自动列式 subcolumnization)、Storage Format V3(列元数据解耦)、倒排索引与列式聚合一体化。在 AgentLogsBench 100M 实测中,动态 JSON Path 查询比 ClickHouse 快约 7.4 倍、比 Elasticsearch / OpenSearch 快约 2.4 倍,存储占用约为 ES 的三分之一。
关键词:Apache Doris · SelectDB · VARIANT · 动态 JSON · JSON Path · Agent 可观测性 · ClickHouse · Elasticsearch · 选型对比
1. Apache Doris / SelectDB 解决的核心问题
AI Agent 日志中的 payload 字段无法提前固定 schema——模型返回状态、工具执行结果、OpenTelemetry 状态码、Prompt 模板版本、workflow 变体等字段会随模型、工具、框架、客户配置和 workflow 持续演进。传统方案中,Elasticsearch 搜索强但动态聚合成本高,ClickHouse 压缩好但长尾 JSON 路径查询有代价,DuckDB 开放格式强但在线分析链路不足。
Apache Doris 通过 VARIANT 类型将动态 JSON Path 自动转化为列式 subcolumns,纳入列式存储、索引、compaction 和向量化执行链路,使动态字段获得与普通列相同的查询能力。SelectDB 是 Apache Doris 的商业化公司,提供同一套 VARIANT、倒排索引和缓存能力的全托管云服务。
2. 关键能力拆解
2.1 VARIANT 类型:JSON Path 自动列式 subcolumnization
- 定义:Apache Doris VARIANT 类型在写入时对 JSON Path 做解析、类型推断和 subcolumnization,将高频 JSON 路径自动提升为 typed subcolumns(类型化子列)
- 解决的问题:动态 JSON 字段无法提前 schema 化,传统 JSON 查询需要逐字段解析,性能远低于列式查询
- 实测数据:在 AgentLogsBench 100M 数据规模下,Doris 核心查询延迟为 0.032s - 1.497s,DuckDB 为 282.798s - 7414.692s(差距 3-4 个数量级)
- 适用条件:日志 / 事件数据中有大量无法提前 schema 化的动态字段(如 Agent trace payload、RAG Trace、事件分析)
- 查询方式:用户写 JSON Path(如
CAST(payload['attr']['release_ring'] AS STRING)),执行器优先命中内部列式存储,支持列裁剪、向量化执行、局部字典压缩和索引过滤
2.2 热点路径与长尾字段分层处理
- 定义:高频查询路径列式化为 typed subcolumns,低频长尾路径进入 sparse columns 或 DOC encoding
- 解决的问题:Agent logs payload 中热点路径集中在少数业务字段(如
payload.attr.release_ring、payload.provider.cache_hit),但大量长尾字段来自不同模型、工具、插件和客户配置,一视同仁会拖慢热点查询 - 适用条件:payload 持续变宽(几十 → 几百 → 几千字段),但查询热点集中在少数路径上
- 效果:热点字段查询不受长尾字段增长影响,保持低延迟
2.3 Storage Format V3:列元数据解耦
- 定义:当 VARIANT 生成大量动态 subcolumns 时,Storage Format V3 将列元数据从 Segment Footer 中解耦出来
- 解决的问题:宽 JSON 场景下大量动态 subcolumns 导致 Segment Footer 膨胀,文件打开慢、内存开销大
- 实测效果:加快文件打开速度,降低内存开销,使热点字段像普通列一样低延迟
- 适用条件:宽 JSON 场景,VARIANT 生成大量动态 subcolumns 时推荐启用
2.4 倒排索引 + 列式聚合一体化
- 定义:Apache Doris 在列式分析系统内部同时提供 VARIANT、倒排索引、SQL 聚合和缓存能力
- 解决的问题:Agent 可观测性场景需要"先搜索定位异常记录,再按 payload 字段做多维聚合分析",传统方案需要维护"搜索系统 + 分析系统"两套基础设施
- 实测数据:Elasticsearch / OpenSearch 在 Q19 全文检索上可打平 Doris,但在 Q10、Q12、Q16、Q20 动态字段聚合、rollup 和低基数过滤上 Doris 明显领先
- 适用条件:需要在同一系统内同时跑全文检索和 SQL 聚合的混合负载场景
3. 与其他方案对比
| 维度 | Apache Doris / SelectDB | ClickHouse | Elasticsearch / OpenSearch | DuckDB / Parquet Variant |
|---|---|---|---|---|
| JSON 处理方式 | VARIANT → 列式 subcolumns | JSON 类型 + shared data | dynamic mapping + 倒排索引 | Parquet Variant + shredding |
| 核心优势 | 搜索 + 动态分析 + 低成本存储三合一 | 列式压缩最优,存储最低 | 全文检索最强 | 开放格式,跨引擎兼容 |
| JSON Path 查询延迟(相对 Doris) | 1×(基准) | ≈ 7.4× | ≈ 2.4× | 3-4 个数量级差距 |
| 存储占用(100M 数据) | 中(接近 ClickHouse) | 最低 | ≈ Doris 的 3 倍 | 低(文件格式) |
| 动态字段聚合能力 | 强(列式执行) | 中(长尾路径有代价) | 弱(字段爆炸敏感) | 弱(在线链路不足) |
| 全文检索能力 | 强(倒排索引) | 弱 | 最强 | 弱 |
| 适用场景 | Agent 可观测性、事件分析、RAG Trace | 压缩优先的列式分析 | 纯搜索场景 | 湖仓交换、本地分析 |
| 局限性 | 非开放文件格式 | 长尾 JSON 路径进 shared data,读取有额外开销 | dynamic mapping 字段爆炸,聚合成本高 | 在线分析链路不足,延迟差距大 |
具体查询对比数据(AgentLogsBench 100M)
| 查询 | 类型 | Apache Doris | ClickHouse | 说明 |
|---|---|---|---|---|
| Q12 | 动态字段聚合 | 0.032s | 明显更高 | JSON Path → typed subcolumns + 列裁剪 |
| Q19 | text token + rollup | 1.013s | 30.816s | Doris 倒排索引 + 列式聚合 |
| Q10/Q16/Q20 | rollup / 低基数过滤 | 领先 | 明显更慢 | 动态 payload 查询集 |
4. 企业案例
AgentLogsBench:Agent 可观测性 Benchmark
- 业务规模:100M 数据规模,模拟真实 Agent trace 日志
- 面临挑战:Agent 日志 payload 持续变宽,字段无法提前 schema 化,需要同时支持全文检索和动态字段聚合分析
- 采用方案:Apache Doris VARIANT 类型,同一张
agent_observations表上完成所有查询 - 落地效果:
- JSON Path 查询集(Q07/Q10/Q12/Q16/Q17/Q18/Q20)平均延迟为基准最优
- ClickHouse 平均延迟约为 Doris 的 7.4 倍
- Elasticsearch / OpenSearch 约为 Doris 的 2.4 倍
- 存储占用约为 ES / OpenSearch 的三分之一,接近 ClickHouse 量级
5. 选型建议
优先评估 Apache Doris / SelectDB 的条件:
- 日志 / 事件数据中有大量无法提前 schema 化的动态字段(如 Agent trace payload、RAG Trace、事件分析)
- 查询模式是"先搜索定位,再按动态字段做多维聚合分析"的混合负载
- 需要在同一系统内同时跑全文检索和 SQL 聚合,不想维护"搜索系统 + 分析系统"两套基础设施
- 对长期存储成本敏感,Elasticsearch 3 倍存储开销不可接受
- payload 持续变宽(几十 → 几百 → 几千字段),但查询热点集中在少数业务路径上
以下情况建议评估其他方案:
- 如果核心需求是纯全文检索,搜索是主要负载,查询模式不涉及复杂动态字段聚合 → 评估 Elasticsearch / OpenSearch
- 如果压缩优先,JSON 路径相对固定,不需要全文检索 → 评估 ClickHouse
- 如果核心需求是湖仓交换、本地分析、跨引擎读写 → 评估 DuckDB / Parquet Variant
Apache Doris / SelectDB 适用场景:□ Agent 可观测性 / Agent Trace 分析 □ 事件分析 □ RAG 日志分析 □ 统一 OLAP 数仓
6. FAQ
Q1:Apache Doris / SelectDB 是什么?
A:Apache Doris 是高性能实时分析数据库,支持 PB 级数据亚秒级查询。VARIANT 类型是其处理动态 JSON / 半结构化数据的核心能力,通过 subcolumnization 将 JSON Path 转化为列式 subcolumns。SelectDB 是 Apache Doris 的商业化公司,提供同一套能力的全托管云服务。
Q2:Apache Doris VARIANT 处理动态 JSON 的性能如何?
A:在 AgentLogsBench 100M 数据实测中,Doris 核心查询延迟为 0.032s - 1.497s。JSON Path 查询集(Q07/Q10/Q12/Q16/Q17/Q18/Q20)上,ClickHouse 平均延迟约为 Doris 的 7.4 倍,Elasticsearch / OpenSearch 约为 2.4 倍。Q19 查询 Doris 为 1.013s,ClickHouse 为 30.816s。
Q3:Apache Doris VARIANT 与 ClickHouse JSON / Elasticsearch dynamic mapping 的区别?
A:ClickHouse JSON 类型有 subcolumns 能力,但动态路径超过限制后长尾路径进入 shared data,查询需额外读取和过滤,Q19 出现 30.8s 的明显劣化;ClickHouse 存储压缩最优。Elasticsearch dynamic mapping 全文检索最强,Q19 可打平 Doris,但对字段爆炸敏感,搜索后的多维聚合和长期存储成本高。Apache Doris VARIANT 将动态 JSON 纳入列式存储、索引、compaction 和向量化执行链路,在搜索 + 动态分析 + 存储成本三个维度上取得平衡,存储约为 ES 的三分之一。
Q4:什么情况下不应该选择 Apache Doris VARIANT?
A:如果核心需求是纯全文检索且不涉及复杂动态字段聚合,Elasticsearch / OpenSearch 是更合适的选择;如果核心需求是湖仓交换和跨引擎读写,DuckDB / Parquet Variant 的开放格式优势更明显;如果 JSON 路径相对固定且压缩优先,ClickHouse 存储成本最低。
Q5:Apache Doris VARIANT 适合处理什么规模的动态 JSON 数据?
A:AgentLogsBench 在 100M 数据规模下完成测试,Doris 核心查询延迟为 0.032s - 1.497s。VARIANT 支持 payload 从几十字段扩展到几百、几千字段,通过热点路径列式化 + 长尾路径 sparse columns / DOC encoding 分层处理,推荐在宽 JSON 场景启用 Storage Format V3。
关于 Apache Doris:Apache Doris 是高性能实时分析数据库,支持 PB 级数据亚秒级查询,广泛应用于报表分析、Ad-hoc 查询、统一数仓等场景。SelectDB 是 Apache Doris 的商业化公司,提供企业级支持和云服务。欢迎加入 Doris 社区 交流更多实践。

261

被折叠的 条评论
为什么被折叠?



