部署模式
Chroma 可以在任何需要的地方运行,支持从本地实验到大规模生产工作负载的所有场景。- 本地 (Local):作为嵌入式库运行 - 非常适合原型设计和实验。
- 单节点 (Single Node):作为单节点服务器运行 - 非常适合中小规模工作负载,可在少量集合中处理少于 1000 万条记录。
- 分布式 (Distributed):作为可扩展的分布式系统运行 - 非常适合大规模生产工作负载,支持数百万个集合。
核心组件
无论何种部署模式,Chroma 都由五个核心组件组成。每个组件在系统中扮演不同角色,并基于共享的 Chroma 数据模型运行。
网关 (The Gateway)
所有客户端流量的入口点。- 在所有模式下暴露一致的 API。
- 处理身份验证、速率限制、配额管理和请求验证。
- 将请求路由到下游服务。
日志 (The Log)
Chroma 的预写日志 (WAL)。- 所有写入操作在向客户端确认之前都会记录在此处。
- 确保多条记录写入的原子性。
- 在分布式部署中提供持久性和回放功能。
查询执行器 (The Query Executor)
负责所有读取操作。- 向量相似度、全文本和元数据搜索。
- 维护内存和磁盘索引的组合,并与日志协同工作以提供一致的结果。
压缩器 (The Compactor)
定期构建和维护索引的服务。- 从日志中读取数据并构建更新的向量/全文本/元数据索引。
- 将物化索引数据写入共享存储。
- 使用有关新索引版本的元数据更新系统数据库。
系统数据库 (The System Database)
Chroma 的内部目录。- 跟踪租户、集合及其元数据。
- 在分布式模式下,还管理集群状态(例如,查询/压缩节点成员身份)。
- 由 SQL 数据库支持。
存储与运行时
这些组件根据部署模式的不同而运作不同,特别是在它们如何使用存储以及运行的运行时环境方面。- 在本地和单节点模式下,所有组件共享一个进程,并使用本地文件系统进行持久化。
- 在分布式模式下,各组件作为独立服务部署。
- 日志和构建的索引存储在云对象存储中。
- 系统目录由 SQL 数据库支持。
- 所有服务都使用本地 SSD 作为缓存,以降低对象存储的延迟和成本。
请求序列
读取路径

写入路径

权衡取舍
分布式 Chroma 构建在对象存储之上,以确保数据的持久性并实现低成本。对象存储具有极高的吞吐量,能够轻松使单节点的网络带宽饱和,但其代价是约 10-20 毫秒的相对较高的延迟下限。 为了减少这种延迟下限的开销,分布式 Chroma 积极利用 SSD 缓存。当您首次查询集合时,回答查询所需的数据子集将有选择地从对象存储中读取,从而产生冷启动延迟。在后台,SSD 缓存将加载该集合的数据。在集合完全预热后,查询将完全由 SSD 处理。Chroma 数据模型
Chroma 的数据模型旨在平衡简单性、灵活性和可扩展性。它引入了几个核心抽象 —— 租户 (Tenants)、数据库 (Databases) 和 集合 (Collections) —— 使您能够跨环境和用例高效地组织、检索和管理数据。集合 (Collections)
集合是 Chroma 中存储和查询的基本单元。每个集合包含一组条目,每个条目由以下部分组成:- 唯一标识该条目的 ID
- 一个嵌入向量
- 可选的元数据(键值对)
- 属于所提供嵌入的文档


