mcpField
Q
qdrant-multitenancy

qdrant-multitenancy

github.com/qdrant数据与数据库265254 次安装1 天前更新
代码仓库

关于 qdrant-multitenancy

qdrant-multitenancy 是在 Qdrant 部署中隔离租户数据的指南,帮助架构师根据租户规模和隔离需求,在载荷过滤、专用分片、集合及按区域分片之间选择。

主要功能

  1. 01比较三种隔离级别
  2. 02基于载荷的租户过滤
  3. 03共享与专用分片分层
  4. 04按租户使用集合的建议
  5. 05按区域自定义分片

适用场景

  1. 01为大量小型租户划分数据
  2. 02将大型租户与共享负载隔离
  3. 03为租户使用不同架构或嵌入模型
  4. 04按区域数据驻留要求放置数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/qdrant/skills --skill qdrant-multitenancy

安装后在 Claude Code 中输入/qdrant-multitenancy确认已加载。

详细介绍

Qdrant 多租户

多租户 是指在单个 Qdrant 部署中隔离多个用户或租户的数据。

  • 需要考虑的问题是:有多少租户,它们的规模差异有多大? 答案决定了隔离策略。
  • 选择前先了解三种隔离级别:基于 payload、基于分片和基于集合。
  • 对绝大多数用户来说,默认的正确选择是使用单个集合并按 payload 分区,而不是每个租户一个集合。

许多小型租户(默认:按 Payload 分区)

适用场景:你有许多规模大致相近、体量适中的租户。这是大多数用户推荐的默认方案。

一个集合容纳所有租户。payload 字段标记所有权,查询时通过筛选该字段来隔离每个租户的结果。

工作原理
  • 在租户字段上创建一个带有 is_tenant=true 的 keyword payload 索引(该标志需要 v1.11+)。is_tenant 会告知 Qdrant 此字段用于标识租户,因此每个租户的向量会存储在一起,并通过顺序读取提供服务。请参阅 。
  • 查询时,使用租户字段上的 must 筛选器隔离每个租户。如果没有该筛选器,查询就会搜索所有租户的数据。请参阅基于 Payload 的多租户。
  • 文本相关性(BM25 或带有 IDF 修饰符的稀疏向量)使用在整个分片上计算的统计数据进行评分,因此词汇不同的租户会相互影响评分。在 Qdrant 1.19 或更高版本中,传入 idf 搜索参数和租户筛选器,并为租户字段创建索引;在 1.20 或更高版本中,这也适用于全文索引上的 BM25 text 查询每租户评分统计。
  • 采用此策略时,随着规模扩大,索引速度可能会成为瓶颈,因为所有租户都在同一个集合中建立索引。为避免这种情况,你可以禁用全局 HNSW 创建(针对整个集合),只构建每个租户的索引:将 m=0,并将 payload_m 设为非零值。虽然这会加快索引过程,但请注意,不带租户筛选器的请求会变慢,因为它们必须扫描所有分组。因此,只有在遇到瓶颈且跨租户搜索很少时才采用此取舍。校准性能。

少数大型租户加上长尾租户(分层多租户)

适用场景:你有典型的 SaaS 客户分布:少数大型客户和许多小型客户;小型租户还可能随着时间推移而增长。此功能从 v1.16+ 起可用。它能避免邻居干扰问题,即某个大型租户迫使整个集群扩容,从而增加成本并降低其他所有租户的性能。

分层多租户将小型租户放在共享的备用分片中,同时将大型租户隔离在专用分片中,且所有租户都位于同一个集合内。 它结合了两种隔离级别:用于逻辑隔离的基于 payload 的多租户,以及用于大型租户物理隔离和资源隔离的自定义分片。超出共享分片承载能力的租户可以在之后迁移到专用分片,且无需停机。

工作原理
  • 使用自定义(用户定义)分片创建集合,并配置基于负载的多租户。一个共享的备用分片存放所有小型租户。如果有大型租户,则为其创建专用分片(每个租户一个)。查看分层多租户。
  • 何时提升租户?如果租户规模大到需要专用资源(当租户接近索引阈值时,是一个合理的提升触发条件),就将其提升到专用分片。Qdrant 会将其数据透明地迁移到新分片,同时持续提供读写服务。查看如何将租户提升到专用分片。
  • 请记住,重新分片可能既耗费资源又耗时,因此在决定哪些租户应使用专用分片时,请仔细考虑租户的增长模式。
  • 不建议每个集群配置超过约 1000 个专用分片(资源开销)。
  • 备用分片(存放小型租户)必须能放在单个节点上。
  • 分片方式在创建集合时即固定:自动分片的集合(默认)无法原地转换为自定义分片。如果以后有任何现实可能需要隔离大型租户,请从一开始就使用自定义分片创建集合,并将每个租户放入备用分片。

少量异构租户(每个租户一个集合)

适用场景:租户数量有限,且各租户使用不同的嵌入模型或集合架构。

  • 只有在租户数量有限且需要严格隔离,或租户的向量由不同的嵌入模型生成时,才应创建多个集合。

数据驻留和地理隔离(自定义分片)

适用场景:数据必须在物理上固定存储于某个地点,例如医疗行业的区域合规要求(一个区域的数据存储在加拿大,另一个区域的数据存储在德国)。这不仅是租户层面的问题,单个租户也可能需要按区域拆分自己的数据。

  • 与分层多租户一样,这种方式使用自定义分片;区别在于分片依据不同。此处的分片键是区域。每个键的数据会存放在特定分片上,你可以将这些分片部署在特定地点,同时所有数据仍保留在同一个集合中。如果还需要在区域内隔离各租户,可结合负载分区使用。查看用户定义的分片了解设置方法。
  • 只有当集群节点实际位于目标区域时,才能实现地理驻留。
  • Qdrant Cloud 会将集群部署在单个区域,目前不提供托管式多区域部署。

不要这样做

  • 不要将负载过滤器视为完整的安全模型。在 Qdrant 中(除非使用每个租户一个集合的方式),租户隔离基于负载。这是应用层的责任,而过滤器只是其中很小的一部分。

评论

支持 Markdown