首页/AI/RAG 与向量库速查/多租户向量库模式

多租户向量库模式

多租户隔离有三档:每租户独立集合(隔离强、数量多管理重)、共享集合 + 租户过滤(主流)、共享集合 + 分区键(自动路由);选择取决于租户规模、隔离要求与运维能力。

RAG 与向量库速查AI更新于 2026-10-13

多租户向量库模式是什么

多租户向量检索的隔离方案大致三档:每个租户一个独立集合或索引,隔离最强但集合数量随租户线性增长,批量运维与备份窗口会失控;共享集合加租户过滤字段是主流做法,隔离依赖过滤条件必须被强制注入;共享集合加分区键(Milvus 的 partition key 等)由引擎按租户自动路由,在隔离与运维之间取中。选择依据是租户数量、合规要求与团队运维能力,而不是单纯的技术偏好。

基本信息

隔离三档独立集合、共享集合加过滤、共享集合加分区键
主流选择共享集合加租户过滤字段
必需能力租户字段必须建索引
隔离保证过滤条件在服务端强制注入,不依赖调用方
容量差异租户数据量差异大时需要限流与配额
合规场景数据驻留要求高时考虑独立实例

典型使用场景

  • SaaS 产品为每个客户隔离知识库,互不可见
  • 大客户或受监管行业要求物理隔离,单独集合甚至独立实例
  • 租户数上千时独立集合不可行,改用分区键自动路由
  • 混合检索中先按租户过滤再用向量近邻,避免跨租户召回
  • 租户数据量悬殊时按租户设置配额,防止单租户拖垮全局

共享集合加过滤

共享集合加过滤
client.create_payload_index("kb", field_name="tenant",
                        field_schema=models.PayloadSchemaType.KEYWORD)  # 过滤字段建索引
res = client.query_points(
    "kb", query=q_vec,
    query_filter=models.Filter(must=[models.FieldCondition(
        key="tenant", match=models.MatchValue(value=tenant_id))]),  # 服务端注入租户
    limit=10)

隔离模式对照

模式隔离强度运维复杂度适用
独立集合或索引高高大客户、合规要求高
共享集合加过滤字段中低常规 SaaS 多租户
共享集合加分区键中高中租户多且查询天然按租户
独立实例或集群最高最高数据驻留与合规硬性要求
租户过滤必须由服务端强制注入:如果过滤条件由调用方拼装、可以被绕过,隔离等于不存在,越权检索是数据泄露级别的事故。
过滤字段要建索引(Qdrant 的 payload index、Milvus 的标量索引等),否则过滤退化为全量扫描,延迟随数据量增长。

易错点

  • 过滤条件由调用方拼装,漏传租户条件造成越权检索,属于数据泄露级故障
  • 每租户一个集合的数量膨胀后,批量运维、备份与升级窗口失控
  • 过滤字段没建索引,查询延迟随数据量与租户规模持续上升
  • 删除租户只清应用层记录:向量与元数据仍留在库中,合规审计无法交代

数据来源与参考

  • Qdrant 官方文档(Multiple tenants)
  • Milvus 官方文档(Partition Key 多租户)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌