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

news2024/9/25 13:18:16

随着 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 服务,满足不同客户的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu 安装minikube,并拉取k8s镜像

虚拟机是vmware17, 系统是ubuntu20.4, minikube是1.23.1, docker是24.0.7, 为什么要装minikube,通常k8s集群是要3台机子以上,而通过minikube,可以在一台机子上搭建出k8s集群,minikube采用的是D…

unraid使用docker安装redis并创建密码

unraid使用docker安装redis并创建密码 一、redis简单介绍 redis基于K-V思路,数据存储在内存中,速度快,高效。 使用时会结合其他数据库如mysql。 二、redis安装 应用市场搜索redis,找下载量最高的一个即可,其中参数只…

5--SpringBoot项目中菜品管理 详解(一)

目录 公共字段自动填充 问题分析 实现思路 代码开发 步骤一 步骤二 功能测试 新增菜品 需求分析和设计 代码开发 文件上传接口 功能测试 公共字段自动填充 问题分析 后台系统的员工管理功能和菜品分类功能的开发,在新增员工或者新增菜品分类时需要设置…

C语言特殊字符串函数和字符函数

特殊字符串函数 strtok(字符串切割函数) 重点:1.delimiters 参数是个字符串,定义了用作分割符的字符集合 2.第一个参数指定一个字符串,里面包含0个或者多个分隔符 3.strtok函数找到str中的分隔符,会把它改成\0,然后…

内衣洗衣机哪个牌子好用?五款业内口碑爆棚产品汇总

内衣裤洗衣机是一种非常实用的洗衣机,可以有效地保护内衣和贴身衣物的质量和卫生,相比于普通的家用大型洗衣机,内衣裤洗衣机在容量、洗涤方式、控制方式和价格等方面有很大的不同之处,如果您经常需要清洗内衣和贴身衣物&#xff0…

无人机蜂群作战会成为未来战争的主要形式吗,该如何反制呢?

无人机蜂群作战在未来战争中确实有可能成为一种重要的作战形式,但是否会成为“主要形式”则取决于多种因素,包括技术发展、战术创新、战略需求以及国际政治和军事格局的变化等。以下是对无人机蜂群作战及其反制措施的详细分析: 一、无人机蜂…

图神经网络(GNN)简单介绍

参考文章:A Gentle Introduction to Graph Neural Networks 仅作为自己学习的笔记 GNN应用领域: 芯片设计 场景分析与问题分析 推荐系统(类似抖音) 欺诈检测,风控相关 知识图谱 道路交通,动态流量预测 自动驾驶&…

程序员的得力助手:Kimi AI的实战体验引言

引言 作为一名程序员,我们经常需要处理大量信息,从代码调试到文档编写,再到团队协作,每一项任务都需要我们保持高度的专注和效率。在这个过程中,一个得力的助手可以极大地提升我们的工作效率。今天,我想和…

洛谷P2571.传送带

洛谷P2571.传送带 三分模板题 用于单峰函数求极值 一定可以将答案路径分成三段即AE - EF - FD (E和A可能重复,F和D可能重合) E在线段AB上,F在线段CD上 因为有两个不定点EF,因此假设E为参数,三分求F的位置再外层三分求E的位置 …

PMP--三模--解题--1-10

文章目录 9.资源管理1、 [单选] 项目已经准备好开工,资源已经配置好。开发经理随后通知项目经理,由于家庭紧急情况,关键资源不再可用。开发经理表示,所有其他开发人员都被分配到其他项目,任何开发人员都没有能力承担额…

Windows内核编程基础(1)

在前面的文章中,介绍了如何配置开发环境以及如何进行调试。 接下来的几篇文章,将会重点介绍内核编程中所需要了解的一些理论基础。 我写这个系列文章的主要目的是方便以后自己查阅,同时也给正在学习内核开发的小伙伴一些参考,所…

在线PDF转图片怎么转?4种简单转换的方法分享

在线PDF转图片怎么转?在线PDF转图片不仅简化了文档处理流程,还极大地提升了工作效率。无论是教师准备教学材料、学生整理笔记,还是职场人士分享报告,都能通过这一功能轻松实现PDF到图片的转换,确保内容的高清展示与便捷…

OLED(3)字库篇

文章目录 1 显示图片1.1 图片取模 2 字符集与编码2.1 字符编码2.2 ASCII2.3 中文编码2.3.1 GB2312 标准2.3.2 GBK 编码2.3.3 GB18030 2.4 Unicode 字符集和编码2.4.1 UTF-322.4.2 UTF-162.4.3 UTF-8 3 字库 DIY3.1 生成字库3.2 烧录到 W25Qxx 1 显示图片 1.1 图片取模 1&#…

【完整梳理验证】企业微信第三方应用接入全流程java版

企业微信第三方应用接入全流程java版 1. 概念与流程1.1 概念1、企业内部应用2、`第三方应用`3、代开发自建应用1.2 流程1.2.1 全局流程1.2.2 应用配置1.2.3 数据流程2. 核心文档2.1 理解第三方应用开发流程和概念2.1.1 应用开发阶段2.1.2 应用推广阶段2.1.3 基本流程1)前期应用…

【VUE_ruoyi-vue】基于ruoyi-vue框架实现简单的系统通用文件模块

基于ruoyi-vue框架,新增一个简单的系统通用文件模块,服务与各个模块涉及到文件上传信息的记录和相关展示 运行sql,创建数据库表 DROP TABLE IF EXISTS sys_file_info; CREATE TABLE sys_file_info (id int(11) NOT NULL AUTO_INCREMENT COMMENT id,lin…

怎样才能远程了解在iPhone、iPad上看了什么网站、用了什么APP?

有不少家长在网上吐槽: ——自家小孩每天抱着手机看,一看就两三个小时,到底在看什么? ——没有不允许小孩玩手机,但他一玩就一整天,用什么户外活动、家庭活动都吸引不回来。 ——每次问小孩在手机上看什…

【C++掌中宝】用最少的话让你全方位理解内联函数

文章目录 引言1. 什么是内联函数2. 工作原理3. 内联函数的编程风格4. 使用限制5. 内联函数与宏的比较6. 优缺点7. 何时使用内联函数8. 补充9. 总结结语 引言 在C编程中,函数的调用开销是程序运行效率的一个重要影响因素。为了解决频繁调用函数时的性能问题&#xf…

8080时序

通过RS来区分是命令还是数据 在WR高电平时,将数据放入D[0:15]数据线上 在WR上升沿,读取D[0:15]数据线上的数据 //提前把默认信号设置为对应电平 static inline void LcdSendCmd(uint16_t cmdVal) {LCD_CS_RESET();//cs输出低电平,表示片选…

【Diffusion分割】MedSegDiff-v2:Diffusion模型进行医学图像分割

MedSegDiff-V2: Diffusion-Based Medical Image Segmentation with Transformer 摘要: 最近的研究揭示了 DPM 在医学图像分析领域的实用性,医学图像分割模型在各种任务中表现出的出色性能就证明了这一点。尽管这些模型最初是以 UNet 架构为基础的&…

低代码BPA(业务流程自动化)技术探讨

一、BPA流程设计平台的特点 可视化设计工具 大多数BPA流程设计平台提供直观的拖拽式界面,用户可以通过图形化方式设计、修改及优化业务流程。这种可视化的方式不仅降低了门槛,还便于非技术人员理解和参与流程设计。集成能力 现代BPA平台通常具备与其他系…