跳到主要内容

存储选型与能力矩阵 ​

概述 ​

Agents-Flex 提供统一 Store API,但选择后端仍然是架构决策。数据库产品的向量规模、过滤能力、部署方式和运维 模型不同,Agents-Flex 对各产品的适配完整度也不同。

正确的选型顺序不是先比较“哪个数据库最快”,而是:

  1. 明确数据规模、查询类型、隔离要求和运维边界;
  2. 排除不满足硬性条件的实现;
  3. 使用生产数据和生产查询做基准测试;
  4. 验证故障、升级、备份和模型迁移;
  5. 再比较成本和团队维护能力。

本页矩阵描述的是仓库当前 Store 适配器,而不是数据库产品理论上支持的全部功能。

使用场景 ​

已有关系数据库,希望降低系统复杂度 ​

优先评估 Pgvector。向量、业务字段和 JSONB metadata 可以使用现有数据库的事务、权限、备份和 监控体系。需要确认数据规模、HNSW 索引和连接资源是否适合现有集群。

已经使用 MariaDB 11.7+ 的团队可以评估 MariaDB。它使用数据库原生 VECTOR 和 JSON 能力,不需要 安装扩展;旧版 MariaDB 和 MySQL 不能直接替代。

已有 Redis Stack,重视低延迟 ​

优先评估 Redis。它适合中等规模、在线低延迟检索和已有 Redis 运维体系的团队。必须使用包含 RedisJSON 和 RediSearch 的 Redis Stack,并评估向量索引的内存成本。

已有 Cassandra,希望保留分布式宽表架构 ​

Apache Cassandra 适合已经运行 Cassandra 5.x、需要水平扩展写入和高可用多副本,同时希望使用 原生 vector<float, N> 与 SAI 完成向量召回的团队。它的 CQL 条件能力比关系数据库窄,必须提前核对业务过滤 条件;Agents-Flex 会把 IN/OR 拆成多条查询合并,但不会用 ALLOW FILTERING 模拟 NOT/NULL。

已有 ClickHouse,希望复用分析平台 ​

ClickHouse 适合已有 ClickHouse 25.8+、以批量导入和分析型检索为主,并希望在 MergeTree 表中同时 保存向量与 JSON metadata 的团队。余弦和 L2 可使用原生 HNSW;dot product 当前采用精确排序。它不适合高频小批量 upsert,覆盖写入会产生同步 mutation。

大规模专用向量检索 ​

优先评估 Milvus、Qdrant 或 Weaviate。三者都提供专用向量能力, 但部署架构、过滤模型、索引参数和团队运维经验会影响最终选择。Weaviate 还适合希望使用动态属性 schema、 GraphQL 查询和混合检索生态的团队。

已有搜索平台,需要结合搜索生态 ​

使用 Elasticsearch 的团队可以评估 Elasticsearch;使用 OpenSearch 的团队可以评估 OpenSearch。两者都支持通过 SearchWrapper 进行向量检索和 metadata 条件过滤。

已有 MongoDB Atlas,希望统一业务数据和向量 ​

MongoDB Atlas 适合已经使用 Atlas、希望在 BSON 文档上同时执行普通条件和向量召回的团队。 向量预过滤字段必须预先进入 Vector Search Index,并需要评估 mongot 索引同步延迟和 Atlas Search 成本。

本地原型和轻量知识库 ​

Chroma 易于本地启动,并支持结构化 metadata 过滤,适合原型验证和轻量知识库。

希望由云厂商托管 ​

阿里云 DashVector 可以避免自建集群,但需要评估网络、配额、费用、凭证、区域和当前 Store 适配能力。 它不能在开发机本地安装,联调需要云端测试实例。

后端总览 ​

Store 模块数据库典型定位运行方式
agents-flex-store-redisRedis Stack低延迟、复用 Redis 技术栈自建或托管 Redis Stack
agents-flex-store-milvusMilvus / Zilliz Cloud大规模专用向量数据库自建集群或云服务
agents-flex-store-pgvectorPostgreSQL + pgvector关系数据与向量统一运维PostgreSQL 扩展
agents-flex-store-mariadbMariaDB 11.7+关系数据与向量统一运维MariaDB 原生 VECTOR
agents-flex-store-cassandraApache Cassandra 5.x分布式宽表与向量统一存储Cassandra 原生 vector + SAI
agents-flex-store-infinityInfinityAI 原生向量、全文与融合检索自建 Infinity 服务
agents-flex-store-clickhouseClickHouse 25.8+列式分析数据与向量统一检索ClickHouse 原生 Array(Float32) + HNSW
agents-flex-store-elasticsearchElasticsearch搜索平台中的向量召回自建或 Elastic Cloud
agents-flex-store-opensearchOpenSearchOpenSearch k-NN自建或 Amazon OpenSearch
agents-flex-store-mongodb-atlasMongoDB Atlas Vector SearchBSON 业务数据与向量统一MongoDB Atlas 或 Atlas Local
agents-flex-store-weaviateWeaviate专用向量检索与结构化过滤自建或 Weaviate Cloud
agents-flex-store-chromaChroma原型和轻量知识库独立 HTTP 服务
agents-flex-store-qdrantQdrant专用向量检索与 payload 过滤自建或 Qdrant Cloud
agents-flex-store-aliyunDashVector阿里云托管向量服务云服务

当前适配能力 ​

路由与条件 ​

Store数据空间路由自动创建当前条件过滤
RediscollectionName自动建索引RediSearch 表达式适配
MilvuscollectionName、Partition自动建 Collection/索引Milvus 标量表达式适配
PgvectorcollectionName 对应表自动建表可配置参数化 SQL 与 JSONB 条件
MariaDBcollectionName 对应表自动建表和 VECTOR INDEX 可配置参数化 SQL 与 JSON_VALUE 条件
Apache CassandracollectionName 对应表自动建 keyspace、表、metadata 列和 SAIEQ/范围/BETWEEN;IN/OR 多查询合并;支持纯过滤
InfinitycollectionName 对应 table自动建 database、table、metadata 列和 HNSWInfinity filter;支持 IN/NOT IN、嵌套逻辑和纯过滤
ClickHousecollectionName 对应 MergeTree 表自动建 database、表、维度约束和 HNSW参数化 SQL、JSON_VALUE、复杂条件和纯过滤
ElasticsearchindexName自动建 Indexquery string 适配
OpenSearchcollectionName / indexName自动建 Indexquery string 适配;支持纯过滤查询
MongoDB AtlascollectionName / indexName自动建 Collection 和 Vector Search IndexBSON 预过滤;支持纯过滤查询
WeaviatecollectionName自动建 Collection 和 metadata 属性原生 WhereFilter;支持纯过滤查询
ChromacollectionName可配置Chroma where JSON
QdrantcollectionName可配置Qdrant 原生 Filter
阿里云 DashVectorcollectionName、Partition控制台预建DashVector 专属 filter 适配

多租户安全

即使 Store 支持条件过滤,权限条件也必须由服务端强制追加,并通过真实数据库测试验证。高安全场景优先使用独立 Collection 或 Index,不要只依赖调用方传入 tenant 条件。

连接与本地开发 ​

Store应用连接本地开发环境
RedisRedis URIRedis Stack Docker
MilvusMilvus Java SDK官方 Standalone Docker 脚本
PgvectorJDBCpgvector/pgvector Docker
MariaDBJDBCmariadb:11.7 Docker
Apache CassandraApache Java Drivercassandra:5.0.5 Docker
InfinityHTTP API官方 Infinity Docker,HTTP 端口 23820
ClickHouse官方 JDBC over HTTPclickhouse/clickhouse-server:25.8 Docker,默认 HTTP 端口 8123
ElasticsearchElasticsearch Java Client官方单节点 Docker
OpenSearchOpenSearch Java Client官方单节点 Docker
MongoDB AtlasMongoDB Java Driver官方 Atlas Local Docker;普通 MongoDB 不支持 Vector Search
Weaviate官方 Java Client官方 Weaviate Docker,同时开放 HTTP 和 gRPC
ChromaREST /api/v2Chroma Docker
QdrantgRPC 6334Qdrant Docker,同时开放 HTTP 6333
阿里云 DashVector官方 Java SDK不能本地安装,连接云端测试实例

具体安装命令、端口、认证和清理方式均在各 Store 独立文档中提供。

选型维度 ​

数据规模和增长速度 ​

先测算向量数量、维度、metadata 大小、每天新增量和保留周期。向量占用不仅是 数量 × 维度 × 4 bytes,还要 计算索引、payload、复制、WAL、缓存和临时构建空间。

规模较小时,复用 PostgreSQL 或 Redis 可能比新增专用集群更合理。数据快速增长、需要复杂索引调优或分布式扩展 时,再评估 Milvus、Qdrant 或托管专用服务。

查询模式 ​

列出真实查询,而不是只测试一条 topK:

  • 纯向量召回;
  • 向量加 tenant、分类和状态过滤;
  • IN、NOT IN、BETWEEN、NULL 和嵌套 AND/OR/NOT;
  • 是否需要纯 metadata 查询;
  • 是否需要返回向量或指定字段;
  • topK、并发量、P95/P99 延迟和召回率目标。

如果过滤是硬性要求,应先确认目标 Store 对全部业务条件的适配能力,并运行真实集成测试。

数据一致性和更新 ​

确认业务是否要求:

  • 写入返回后立即可搜索;
  • 批量写入全部成功或全部失败;
  • 更新不存在 ID 时必须报错;
  • 文档内容、向量和 metadata 原子更新;
  • 删除后立即不可见。

统一 StoreResult 不会自动抹平数据库的一致性模型和 upsert 语义。

多租户隔离 ​

独立 Collection/Index 隔离更清晰,但租户数量过多会增加数据库元数据和索引管理成本。共享集合要求每条访问路径 强制追加 tenant 条件,并且 Store 必须真正支持服务端过滤。

对于权限敏感数据,不要仅凭一条成功的条件查询就判断隔离可靠,应执行跨租户读写、条件绕过、空条件和异常路径 测试。

运维与团队能力 ​

选型还包括数据库之外的成本:

  • 团队是否熟悉备份、恢复、扩容和版本升级;
  • 是否已有监控、日志、权限和告警体系;
  • 自建集群的值班成本是否高于云服务费用;
  • 数据所在区域、合规和网络延迟是否允许使用云服务;
  • 客户端和服务端版本是否有明确兼容策略。

Embedding 模型迁移 ​

模型版本、维度、归一化和距离度量共同定义向量空间。更换模型时通常需要新建 Collection/Index、全量重算向量、 验证召回率后切换流量。数据库是否方便做蓝绿集合和延迟清理,是长期维护的重要指标。

按约束缩小候选 ​

首要约束优先评估重点验证
已有 PostgreSQL,希望少一个系统Pgvector数据规模、查询计划、连接与 HNSW
已有 MariaDB 11.7+,希望少一个系统MariaDBVECTOR INDEX、连接资源、表数量与版本兼容
已有 Cassandra 5.x,需要分布式写入与高可用Apache CassandraSAI、条件限制、节点拓扑、一致性与索引构建成本
需要向量、全文和后续融合检索能力InfinityHTTP API 兼容性、HNSW、NULL 与覆盖写入语义
已有 ClickHouse,批量分析数据需要向量召回ClickHouse25.8+ HNSW、mutation 成本、过滤比例和 DOT_PRODUCT 精确排序
已有 Redis Stack,在线低延迟Redis内存、淘汰策略、动态字段索引
大规模专用向量检索Milvus、Qdrant、Weaviate召回率、索引参数、扩缩容与过滤
已有 Elasticsearch 搜索体系Elasticsearchmapping、script score 成本、字段精确匹配
已有 OpenSearch 体系OpenSearchmapping、script score、k-NN 参数与 TLS 配置
已有 MongoDB Atlas,希望统一 BSON 与向量MongoDB AtlasfilterFields、mongot 同步延迟、Search 成本
需要专用向量库、动态 schema 与 GraphQLWeaviateCollection schema、HNSW、过滤和集群资源
快速原型且需要 metadata 过滤Chroma版本兼容、持久化和容量边界
不维护数据库集群DashVector、腾讯云、其他托管方案适配能力、网络、配额、费用和锁定成本

这个表用于生成候选名单,不应代替真实压测。

PoC 验证方法 ​

准备代表性数据 ​

使用生产模型、真实文本长度分布、真实 metadata schema 和至少接近预期规模的数据。少量随机句子无法验证索引、 过滤和召回质量。

固定评价指标 ​

至少记录:

  • Recall@K 或人工标注命中率;
  • P50、P95、P99 查询延迟;
  • 写入吞吐和索引构建时间;
  • 内存、磁盘和网络占用;
  • metadata 过滤后的召回率;
  • 故障重试和恢复时间。

使用同一业务查询集 ​

不同数据库分值不完全一致,不能只比较 score 数值。应使用同一批 query、同一组相关性标注和相同业务过滤, 比较最终返回结果与延迟。

验证生命周期 ​

PoC 不应停在“能写能搜”,还要执行:

  1. 批量写入和部分失败;
  2. 更新正文、向量与 metadata;
  3. 删除以及删除后可见性;
  4. 第二个 Collection/Index 的隔离;
  5. 数据库重启和持久化恢复;
  6. 备份恢复到新实例;
  7. 客户端断线、超时和有限重试;
  8. 模型维度不匹配和 schema 不兼容。

上线前检查清单 ​

  1. 固定数据库、客户端和镜像版本;
  2. 使用生产 Embedding 模型确认维度和距离度量;
  3. 预建或验证 Collection/Index schema;
  4. 覆盖全部业务条件和特殊字符;
  5. 校准 topK、候选数和 minScore;
  6. 验证多租户不可见性和路由白名单;
  7. 配置认证、TLS、最小权限和网络边界;
  8. 配置持久化、备份,并完成一次真实恢复演练;
  9. 监控容量、写入失败、查询延迟、索引状态和费用;
  10. 准备 Embedding 模型升级、数据迁移和回滚方案。

下一步 ​

选出一到两个候选后,进入对应的独立文档完成本地安装和真实测试: