我用Rust构建了一个用于智能体跟踪的数据库(10亿行数据P95低于1毫秒)
摘要
ZenithDB是一款新的开源Rust数据库,专为存储和查询AI智能体跟踪而设计。通过在压缩过程中将同一跟踪的所有跨度放在同一个位置,它在10亿行数据上实现了亚毫秒级的跟踪获取延迟,并内置了全文搜索和延迟物化功能。
过去几个月我一直在捣鼓智能体基础设施,存储层不断吃我们的预算。分享一下我们为了解决这个问题而构建的东西。
痛点:智能体跟踪的形状很奇怪。一个跟踪很长。每个跨度有数百个属性,其中大部分是NULL。非NULL的属性中有宽JSON载荷(提示词、工具输出、补全)。评估分数几周后才到达,需要干净地合并。热点查询是“显示整个跟踪”,而不是“扫描十亿行并聚合”。Postgres、ClickHouse和DuckDB在这种形状下性能都会下降。我们对10亿跨度进行了基准测试:
- Postgres: P95跟踪获取延迟7.9毫秒
- DuckDB: P95跟踪获取延迟3.5秒
- ClickHouse: P95跟踪获取延迟178毫秒
- 我们: P95跟踪获取延迟571微秒
核心思想是跟踪局部性:在压缩时,单个跟踪的每个跨度都落在同一个行组中,按(trace_id, start_time, span_id)排序。无论数据集有多大,跟踪获取都只需一次段读取。这就是为什么从100万到10亿跨度延迟保持平稳。
其他设计选择:全文搜索(Tantivy)内嵌在存储段中,无需单独维护Elasticsearch作为边车服务。基于对象存储的WAL替代Kafka。延迟物化使得对于被其他谓词过滤掉的行,不会解码宽提示/补全列。
它叫ZenithDB。使用Rust开发,Apache 2.0许可,alpha版本。支持SQL和OTLP摄入。兼容OpenAI Agents SDK、Anthropic SDK以及任何OTel插桩的栈。
很好奇大家目前在用什么存储来存智能体跟踪。我听过很多“我们在用Postgres jsonb,但随着规模增长越来越慢”的故事;想知道这是否和大家的经历一致。
相似文章
Noxu DB:Berkeley DB Java Edition的Rust移植版
Noxu DB是一个用Rust编写的嵌入式事务性键值数据库引擎,移植自Berkeley DB Java Edition,提供ACID事务、B+树存储、崩溃恢复和可选复制功能。
@LangChain: 刚刚在 Interrupt! 大会上宣布!SmithDB。智能体追踪数据已经超出了现有数据库的承载能力。因此我们构建了……
LangChain 宣布推出 SmithDB,这是一款专为智能体可观测性而构建的分布式数据库,为 LangSmith 提供动力,针对复杂的智能体追踪数据提供卓越的性能和灵活性。
用Rust构建了一个极简编码代理,优化内存占用
介绍zerostack,一个用Rust构建的极简编码代理,专注于低内存占用(约16MB RAM)和空闲时无CPU占用,旨在实现与Pi或Mistral's Vibe等现有代理功能等效。
我用Rust构建了一个自托管的上下文赌博机装置,并部署在一个实时的AI交易产品上。在发现运行时错误之前,先找到了自己配置中的两个错误。
宣布两个开源Rust项目:Lycan(一种用于上下文赌博机的图执行语言)和Syntra(一个自托管的Docker设备,用于服务Lycan胶囊)。作者在自己的实时AI交易产品上自用测试,发现数据管道错误(而非算法问题)主导了适配工作。
使用AI编写10万行Rust代码的心得(2025)
一位开发者分享了使用AI编程助手构建一个基于Rust的10万行多Paxos共识引擎的心得,实现了显著的生产力提升和性能改进。