跳到主要内容

多租户策略

随着ChatGPT的普及,越来越多的开发人员正在使用CVP(ChatGPT、向量数据库、提示)堆栈创建自己的SaaS服务。本指南解释了如何在Milvus上实现多租户,Milvus是世界上使用最广泛的向量数据库之一,以跟上这一趋势。

多租户是一种架构,其中单个Milvus实例为多个租户提供服务。区分租户的最简单方法是将他们的数据和资源与其他人分开。每个租户都有自己专用的资源,或与其他人共享资源,以管理Milvus对象,如数据库、集合和分区。基于这些对象,有相应的方法来实现Milvus多租户。

面向数据库的多租户

自Milvus 2.2.9版本起,对象数据库现已可用。您可以在单个Milvus集群中创建多个数据库。通过为每个租户分配一个数据库,可以实现面向数据库的多租户,使他们可以创建自己的集合和分区,以充分利用其数据。然而,这种策略确保了租户的数据隔离和搜索性能,但资源可能会浪费在空闲的租户身上。

面向集合的多租户

有两种可能的方法可以实现面向集合的多租户。

所有租户共用一个集合

通过向单个集合添加一个租户字段来实现多租户,以区分不同的租户,这是一个简单的选择。在为特定租户进行ANN搜索时,添加一个过滤表达式,以过滤掉属于其他租户的所有实体。这是实现多租户的最简单方法。但要注意,过滤器的性能可能成为ANN搜索的瓶颈。

每个租户一个集合

另一种方法是为每个租户创建一个集合来存储其自己的数据,而不是将所有租户的数据存储在单个集合中。这提供了更好的数据隔离和查询性能。然而,请记住,这种方法需要更多的资源调度、运营能力和成本投入,如果租户数量超过单个Milvus集群支持的最大集合数量,则可能不适用。

面向分区的多租户

还有两种可能的方法可以实现面向分区的多租户:

每个租户一个分区

管理单个集合比管理多个集合要容易得多。与其创建多个集合,不如考虑为每个租户分配一个分区,以实现灵活的数据隔离和内存管理。基于分区的多租户的搜索性能比基于集合的多租户要好得多。但是,请注意,集合的租户数量不应超过集合可以容纳的最大分区数。

基于分区键的多租户

Milvus 2.2.9 引入了一个名为分区键的新功能。在创建集合时,指定一个租户字段并将其设为分区键字段。Milvus 将根据分区键字段中的值将实体存储在一个分区中。在进行近似最近邻搜索时,Milvus会根据指定的分区键切换到一个分区,根据分区键过滤实体,并在过滤后的实体中进行搜索。

这种策略消除了 Milvus 集合支持的最大租户数量限制,并极大地简化了资源管理,因为 Milvus 会自动为您管理分区。

总之,您可以使用上述任一或多个多租户策略来构建自己的解决方案。以下表格比较了这些策略在数据隔离、搜索性能和最大租户数量方面的差异。

数据隔离搜索性能最大租户数推荐场景
基于数据库64适用于需要集合随项目变化的情况,特别适用于组织内部部门之间的数据隔离。
所有租户共用一个集合中等不适用适用于资源有限且对数据隔离不敏感的情况。
每个租户一个集合少于 10,000适用于每个集群少于 10,000 个租户的情况。
每个租户一个分区中等4,096适用于每个集合少于 4,096 个租户的情况。
基于分区键中等大于 10,000,000适用于预测租户数量迅速增加至百万级的情况。

接下来

管理数据库 模式