Milvus - 四种一致性级别与应用场景解析

news/2024/9/29 1:02:11/

在使用 Milvus 时,很多开发者在接触到查询请求中的大量参数时常感到困惑,尤其是 SDK 客户端开发者。本文将重点介绍其中的一个关键参数——Guarantee Timestamp(保证时间戳),并详细解释 Milvus 支持的四种一致性级别及其最适合的应用场景。

一致性概述

在分布式数据库系统中,一致性是指确保系统中的每个节点或副本在任意时刻都能获取相同的数据视图。在 Milvus 这样一个存储与计算分离的架构中,一致性尤为重要。Milvus 通过一套复杂的时钟机制和时间戳管理,保证用户查询时的数据准确性。

Milvus 的时钟机制

Milvus 的数据持久化操作由 DataNodes 处理,数据最终会被存储在 MinIO 或 S3 这样的分布式存储系统中。而计算任务,如搜索任务,则由 QueryNodes 承担。QueryNodes 处理两种数据类型:批式数据流式数据。其中,批式数据一旦写入便不会再改变,而流式数据是通过消息队列持续传输的,可能因为网络延迟而存在时间上的不一致。为了避免这种不一致性导致查询结果不准确,Milvus 引入了 Guarantee Timestamp 机制。

Guarantee Timestamp 机制

当 QueryNodes 从消息队列中消费数据时,每条记录都会被打上时间戳。QueryNodes 会不断获取时间戳信息,并将最新的时间戳称为 ServiceTime,即它能看到的最晚时间戳之前的所有数据。用户可以通过指定 Guarantee Timestamp 来告知 QueryNodes,此次查询必须包含 Guarantee Timestamp 之前的所有数据,从而确保查询结果的一致性。

Guarantee Timestamp 的作用机制

  • 如果 Guarantee Timestamp 小于 ServiceTime,QueryNodes 可以立即执行查询请求。
  • 如果 Guarantee Timestamp 大于 ServiceTime,QueryNodes 需要等待,直到 ServiceTime 推进到 Guarantee Timestamp 后才能执行查询请求。

这为用户提供了对一致性和查询延迟的灵活控制。具体来说,如果用户对数据一致性要求高且对查询速度不敏感,Guarantee Timestamp 应设置得尽可能大;反之,如果用户需要快速查询结果且能容忍一定数据不一致性,则可以将 Guarantee Timestamp 设置得较小。

四种一致性级别

Milvus 支持四种一致性级别,用户可以根据自己的需求在一致性和查询延迟之间进行平衡:

  1. 强一致性
    适用场景: 订单支付、账单处理等在线金融系统
    强一致性是最严格的一致性级别,要求查询必须看到最新写入的数据。这种模式下,查询请求会等待最新的数据可见后才执行,因此会导致较高的查询延迟。

  2. 有界滞后一致性
    适用场景: 视频推荐引擎、新闻推荐等需要一定性能的场景
    有界滞后允许一定范围内的数据不一致性,但在一定时间后,数据仍将保持一致。这种一致性适合需要较低查询延迟且可以接受部分数据不可见的场景。

  3. 会话一致性
    适用场景: 数据管理系统中,确保同一会话中的数据一致性
    会话一致性保证用户在同一会话内写入的数据可以立即被读取。适合需要保证单个会话内数据一致性的场景,如删除操作后的数据刷新。

  4. 最终一致性
    适用场景: 数据一致性要求不高但对查询速度有极高要求的场景
    最终一致性是最宽松的级别,保证副本最终会达到一致状态,但不保证操作顺序。这种一致性适合数据实时性要求不高的场景,如电商产品评论的查询等。

如何设置 Guarantee Timestamp

Milvus 使用 Guarantee Timestamp 来调节一致性级别。不同的一致性级别映射到不同的 Guarantee Timestamp 值:

  • 强一致性:Guarantee Timestamp 设置为最新的系统时间戳,确保查询节点看到所有最新数据后才执行查询。
  • 有界滞后一致性:Guarantee Timestamp 相对较小,允许查询节点基于一个稍旧的数据视图执行查询。
  • 会话一致性:客户端使用最新写入操作的时间戳作为 Guarantee Timestamp,保证每个客户端可以检索到自己的最新数据。
  • 最终一致性:Guarantee Timestamp 设置得非常小,跳过一致性检查,立即在现有数据视图上执行查询。

总结

Milvus 的一致性机制为用户提供了灵活的选项,让用户可以根据自身对数据准确性和查询速度的需求,自行选择最适合的方案。通过合理设置 Guarantee Timestamp,用户可以在强一致性和快速响应时间之间找到平衡,确保应用在不同场景下都能达到最优性能。

通过本教程的学习,相信你已经对 Milvus 的一致性机制有了清晰的理解,希望这些知识能够帮助你更好地应用 Milvus 处理大规模向量搜索任务。


http://www.ppmy.cn/news/1531166.html

相关文章

【Redis】渐进式遍历 数据库管理命令 RESP协议

目录 渐进式遍历 scan 数据库管理命令 切换数据库 获取当前数据库key的个数 删除当前数据库所有的key 删除所有数据库中所有的key RESP协议 渐进式遍历 Redis使用scan命令进行渐进式遍历键,进而解决直接使用keys获取键时可能出现的阻塞问题(因为…

VScode开发GD32移植(标准库通用),保姆级!!!!!!!

VScode开发GD32移植(标准库通用),保姆级!!!!!!! 文章目录 VScode开发GD32移植(标准库通用),保姆级!!!!!&#…

spring boot文件上传之x-file-storage

spring boot文件上传之x-file-storage 今天看到一个文件上传的开源组件x-file-storage,官方地址如下: https://x-file-storage.xuyanwu.cn/#/ 该组件官网是这样介绍的,如下: 一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿…

Android系统应用安装完成后是如何通知其他应用的?

文章目录 具体步骤如下:相关的系统广播(Actions):总结: Android系统在应用安装完成后,会通过 广播(Broadcast)的方式通知其他应用。这个广播称为"应用安装完成广播"&…

实验报告2-前端框架和模板引擎实现视图

资源下载 实验报告2-前端框架和模板引擎实现视图 一、实现思路 Spring Boot整合Thymeleaf实现图书管理案例。要求: 1、项目使用Spring Boot整合Thymeleaf,项目展示的页面效果全部通过Thymeleaf的模板文件实现。 2、查询所有图书。访问http://localhost:8…

基于SSM+小程序的儿童预防接种预约管理系统(疫苗1)(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本儿童预防接种预约微信小程序可以实现管理员和用户。 1、管理员功能有个人中心,用户管理,儿童信息管理,疫苗信息管理,儿童接种管理&#x…

Linux 文件 IO 管理(第三讲:文件系统)

Linux 文件 IO 管理(第三讲:文件系统) 进程为什么默认要打开文件描述符为 0,1 和 2 的文件呢?文件系统物理磁盘简单认识存储结构对磁盘存储进行逻辑抽象分组 —— 文件系统Block Bitmapinode Tableinode BitmapGDT(Gro…

MySql Explain优化命令使用

MySql Explain优化命令使用 truncate table student // 自增id 从 0 开始 delete from student // 自增id 会保留 , 108 区别: 1:自增id 2:delete 可以恢复 truncate 无法恢复 前言 EXPLAIN 是一个用于获取 SQL 语句执行计划的…