Milvus - 从数据库到 Partition Key 实现多租户

随着 ChatGPT 等大型语言模型的普及,越来越多的开发人员开始使用 CVP(ChatGPT、向量数据库、提示)技术栈来构建自己的 SaaS 服务。在这种背景下,实现高效的多租户架构已成为开发者关注的重点。本文将介绍如何在 Milvus 上实现多租户架构,帮助开发人员为不同的租户管理数据和资源。

Milvus 是全球广泛使用的向量数据库之一,支持高效的大规模数据管理与检索。在多租户架构中,多个租户可以共享一个 Milvus 实例,但每个租户的资源和数据需要彼此隔离。通过区分数据库、集合和分区等 Milvus 对象,开发人员可以实现不同级别的数据隔离与性能优化。

一、面向数据库的多租户

从 Milvus 2.2.9 版本开始,支持创建多个数据库。在这种架构下,每个租户可以分配一个独立的数据库,实现数据隔离和性能保障。每个租户都有自己的数据库,能够自由创建集合和分区,从而独立管理和查询数据。

这种方式确保了租户之间的完全数据隔离,适合需要独立管理数据的场景,如企业内部各部门的数据隔离。但需要注意的是,如果某些租户资源闲置,资源可能会浪费,因此适用于有明确数据库使用需求的租户。

优点:

  • 数据隔离强
  • 搜索性能高

缺点:

  • 最大租户数量限制为 64
  • 可能出现资源浪费

适用场景:

  • 需要强数据隔离和搜索性能的企业或组织
  • 各部门独立管理数据的情况

二、面向集合的多租户

1. 所有租户使用一个集合

最简单的多租户实现方式是让所有租户共享一个集合,并通过为每个租户添加特定字段来区分数据。在查询时,可以使用过滤表达式来排除其他租户的数据。这种方法易于实现,但过滤操作可能会影响搜索性能。

优点:

  • 实现简单
  • 资源利用率高

缺点:

  • 数据隔离弱
  • 过滤器的性能可能成为搜索瓶颈

适用场景:

  • 数据隔离要求不高的小企业
  • 资源有限且租户数量较少的场景

2. 每个租户一个集合

另一种方法是为每个租户创建单独的集合。这样可以提供更强的数据隔离和搜索性能,尤其在需要处理大量数据时表现更优。然而,随着租户数量增加,管理多个集合的开销也随之增加。

优点:

  • 数据隔离强
  • 搜索性能高

缺点:

  • 支持的最大租户数量较少(约 10,000 个)
  • 资源调度和成本较高

适用场景:

  • 需要强数据隔离和高性能搜索的企业
  • 租户数量在 10,000 以下的中大型 SaaS 服务

三、面向分区的多租户

1. 每个租户一个分区

为每个租户分配一个分区而不是集合,可以在实现数据隔离的同时简化管理。分区是 Milvus 内部更轻量化的数据隔离单位,适用于租户数量较多的场景,尤其是资源紧张时。但需要注意,单个集合的分区数量有上限,因此不能支持太多租户。

优点:

  • 数据隔离适中
  • 搜索性能高
  • 更易管理

缺点:

  • 最大支持租户数量为 4,096
  • 需要确保集合内的租户数量不会超过分区上限

适用场景:

  • 需要高性能搜索但租户数量有限的场景
  • 中小型 SaaS 服务

2. 基于 Partition Key 的多租户

Milvus 2.2.9 引入了 Partition Key 功能,允许通过设置某个字段(如租户ID)作为 Partition Key 来实现数据自动划分。基于 Partition Key 的方法意味着租户可能会共享同一个物理分区,但逻辑上通过 Partition Key 将每个租户的数据进行隔离和管理。

在这种策略下,虽然多个租户的数据可能存储在同一分区中,Milvus 通过 Partition Key 的值来动态管理分区,并在进行搜索时,通过指定 Partition Key 过滤掉不相关的租户数据,从而在逻辑上实现数据隔离。

优点:
  • 自动分区管理:无需手动管理分区,Milvus 根据 Partition Key 动态管理。
  • 灵活性强:支持大规模租户(数百万级别),适合快速扩展的场景。
  • 搜索性能高:Milvus 根据 Partition Key 限制搜索范围,只在相关租户的数据内进行查询。
缺点:
  • 物理共享:虽然数据逻辑隔离,但多个租户共享同一物理分区,这可能不适用于对物理隔离有严格要求的场景。
  • 潜在性能瓶颈:如果单个分区内有过多租户,即使使用 Partition Key 进行过滤,性能仍可能受到影响。

适用场景:

  • 大规模 SaaS 服务:适合需要处理大量租户,且租户数量可能快速增长的应用场景。
  • 需要高效管理租户数据的 SaaS:当租户的数量达到数百万时,基于 Partition Key 的方法可以简化管理,并保持良好的性能。

四、策略对比

多租户策略数据隔离搜索性能最大租户数推荐场景
面向数据库64需要独立管理数据的企业或部门
一个集合适用所有租户中等不适用资源有限的小企业
每个租户一个集合10,000 以下中大型 SaaS 服务
每个租户一个分区4,096中小型 SaaS 服务
基于 Partition Key10,000,000 以上需要快速扩展到数百万租户的 SaaS 服务

总结

选择适合的多租户策略取决于应用场景、租户数量、数据隔离需求以及搜索性能要求。对于租户数量较少、对隔离要求高的场景,面向数据库或每个租户一个集合的方案更为合适;而对于大规模、多租户场景,基于 Partition Key 的方法则能够在保持良好性能的同时轻松管理海量租户。

通过合理的多租户策略设计,开发者可以利用 Milvus 构建高效的 SaaS 服务,满足不同客户的需求。

MilvusPartition Key是用于对数据进行分区的关键属性。在数据量庞大的场景下,将数据进行合理的分区,能够提升查询和检索的效率。 实际上,Milvus是一个高性能的向量相似度搜索引擎。在该引擎中,数据是以向量的形式进行存储和索引的。而Partition Key是用来对这些向量数据进行划分的。通过选择合适的Partition Key,可以将数据划分到不同的分区中,实现数据的区分和组织。 Milvus的分区粒度可以是向量的维度、向量的ID、时间戳等。选取合适的Partition Key是基于具体应用场景和需求来确定的。以维度为例,假设有一个包含100维向量的数据集,通过将数据按照维度进行分区,可以将某一部分数据存储在一个分区中,而另一部分数据存储在另一个分区中。这样,在查询时,可以根据需要仅搜索某几个分区,而不需要搜索整个数据集,大大提高了查询的速度。 除了提高查询效率外,Partition Key还能帮助进行数据管理和负载均衡。例如,在数据集更新或删除时,只需要对特定分区进行操作,而无需对整个数据集进行修改。此外,可以根据实际需求动态地调整分区的数量和范围,以便更好地适应数据的增长和访问模式的变化,实现负载均衡。 总之,MilvusPartition Key是用于对数据进行分区的关键属性,通过合理选择Partition Key,可以提高查询效率、实现数据管理和负载均衡。这对于大规模向量相似度搜索应用来说,具有重要的意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值