Milvus核心设计(2)-----TSO机制详解

目录

背景

动机

Timestamp种类及使用场景

Guarantee timestamp

Service timestamp

Graceful time

Timestamp同步机制

主流程

时间戳同步流程


背景

Milvus 在设计上突出了分布式的设计,虽然Chroma 也支持分布式的store 与 query。但是相对Milvus来说,不算非常突出。正因为Milvus 在设计上对分布式store 与 query 非常重视,所以引入了TSO机制。也就是timestamp oracle mechanism。我会以比较形象的方式讲述下这部分机理,并结合Milvus的配置及工作生活中的场景,技术上的设计美感和项目中的管理艺术,最终你会发现大道殊途同归。‘梦里寻他千百度,蓦然回首,那人却在灯火阑珊处‘。

TSO设计动机

Milvus 在设计时为什么要引入 TSO机制?实际上其动机和使用场景挂钩,当你使用 stand-alone 模式启动Milvus时,TSO的作用或许你看不出来,当然在不同 coordinate 与 node 之间这种时间同步机制仍然存在,因为从设计上的角度上来说,如果支持了分布式,那么自然也涵盖了stand-alone的单机模式。只是单机模式可以延用分布式设计的特性。

想象一个场景:

那么最正确的结果应该是:

  • user2在 t2 时刻 query c0 collection, 结果是 empty result。

  • user2在 t7 时刻 query c0 collection, 结果是 A1。

  • user2在 t12 时刻 query c0 collection, 结果是 A1与A2。

  • user2在 t71 时刻 query c0 collection, 结果是 A1。

假设没有统一的时间戳作为度量,你没法将不同cilent 的操作,这里包括了 DDL 与 DML,进行统一输出。DDL与 DML 前面都介绍过了,这里就一笔带过。但是客户端子的时间系统有可能基准参差不齐,这例你有可能说使用对时服务可以解决这个问题。确实,使用对时服务可以解决多client时间同步的问题,但是因为timestamp对分布式系统太重要,你不能总想着依靠一个对时服务来解决所有的问题。万一两个对时服务基准不统一,或是一个client根本连不上对时服务怎么办?真正robest的db 不会将自己的 kernel 依附在一个自己认为是核心且必要,但外界可有可无,甚至不准的service 之上。

先看下Milvus 中几种timestamp 的定义与使用场景

Timestamp种类及使用场景

Guarantee timestamp

这种 timestamp 顾名思义,就是保证性质的,就相当于设置之后Milvus保证在这个之前的所有DDL 与DML都执行完成。

需要注意的是,这个 guarantee 时间戳不需要你来设置,因为它对于Milvus 来说太核心了,万一你设置一个不太对的值,整个 system 的 query 结果可能不符合预期或是直接导致Milvus sys崩溃。 

举个例子:

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

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

相关文章

Windows 32 汇编笔记(一):基础知识

一、80x86 处理器的工作模式 1.1 实模式 实模式概述 实模式(Real Mode)是80x86处理器最早支持的工作模式,也是最基础的工作模式。实模式主要用于早期的MS-DOS操作系统和其他简单的操作环境。在实模式下,处理器能够直接访问1MB的…

Python 神器:wxauto 库——解锁微信自动化的无限可能

📝个人主页🌹:誓则盟约 ⏩收录专栏⏪:机器学习 🤡往期回顾🤡:“探索机器学习的多面世界:从理论到应用与未来展望” 🌹🌹期待您的关注 🌹&#x1f…

mysql高并发设计

mysql高并发设计 一、部署方案 https://blog.csdn.net/weixin_37519752/article/details/138728036 方案1:双主 1、优点 写入扩展性:两个节点都可以处理写入操作,提高了写入操作的扩展性。 高可用性:在任一节点故障时&#xff…

数据结构复习计划之复杂度分析(时间、空间)

第二节:算法 时间复杂度和空间复杂度 算法(Algorithm):是对特定问题求解方法(步骤)的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。 算法可以有三种表示形式: 伪代码 自然语言 流程图 算法的五…

猫不吃东西还呕吐是什么原因?可以预防猫咪呕吐的主食冻干推荐

猫咪突然食欲不振,还出现了呕吐的症状,这究竟是为什么呢?结合我多年养猫的经验,让我们一起分析一下可能的原因。 一、 猫不吃东西还呕吐是什么原因 (1)首先、排除猫瘟 如果你的猫咪一直家养,…

【Android】基于 LocationManager 原生实现定位打卡

目录 前言一、实现效果二、定位原理三、具体实现1. 获取权限2. 页面绘制3. 获取经纬度4. 方法调用5. 坐标转换6. 距离计算7. 完整代码 前言 最近公司有个新需求,想要用定位进行考勤打卡,在距离打卡地一定范围内才可以进行打卡。本文将借鉴 RxTool 的 Rx…

php快速入门

前言 php是一门脚本语言,可以访问服务器,对数据库增删查改(后台/后端语言) 后台语言:php,java,c,c,python等等 注意:php是操作服务器,不能直接在…

QUdpSocket 的bind函数详解

QUdpSocket 是 Qt 框架中用于处理 UDP 网络通信的类。bind 函数是此类中的一个重要方法,它用于将 QUdpSocket 对象绑定到一个特定的端口上,以便在该端口上接收 UDP 数据包。 函数原型 在 Qt 中,bind 函数的原型通常如下所示: b…

微软开源项目GraphRAG——基于知识图谱的RAG简介

前言 在大型语言模型(LLM)的前沿研究中,一个核心挑战与机遇并存的领域是扩展它们的能力,以解决超出其训练数据范畴的问题。这不仅要求模型在面对全新数据时仍能保持卓越表现,还意味着开辟了全新的数据分析可能性&…

JVM 堆内存分配过程

设置堆内存大小和 OOM Java 堆用于存储 Java 对象实例,那么堆的大小在 JVM 启动的时候就确定了,我们可以通过 -Xmx 和 -Xms 来设定 -Xms 用来表示堆的起始内存,等价于 -XX:InitialHeapSize-Xmx 用来表示堆的最大内存,等价于 -XX…

Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测

章节内容 上一节我们完成了: Hive中数据导出:HDFSHQL操作上传内容至Hive、增删改查等操作 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次&am…

简单的基追踪一维信号降噪方法(MATLAB 2018)

基追踪法是基于冗余过完备字典下的一种信号稀疏表示方法。该方法具有可提高信号的稀疏性、实现阈值降噪和提高时频分辨率等优点。基追踪法采用表示系数的范数作为信号来度量稀疏性,通过最小化l型范数将信号稀疏表示问题定义为一类有约束的极值问题,进而转…

c++ primer plus 第15章友,异常和其他 15.3.11 有关异常的注意事项

c primer plus 第15章友,异常和其他 15.3.11 有关异常的注意事项 15.3.11 有关异常的注意事项 文章目录 c primer plus 第15章友,异常和其他 15.3.11 有关异常的注意事项15.3.11 有关异常的注意事项 15.3.11 有关异常的注意事项 从前面关于如何使用异常…

vue实现表单输入框数字类型校验功能

vue实现表单输入框数字类型校验功能 1. 样式代码 <el-form-item label"订单总价"><el-input size"small" v-model"form.totalPrice" placeholder"请输入订单总价 正整数或者2位数小数" input"check(form.totalPric…

SpringSecurity中文文档(Servlet Authorize HttpServletRequests)

Authorize HttpServletRequests SpringSecurity 允许您在请求级别对授权进行建模。例如&#xff0c;对于 Spring Security&#xff0c;可以说/admin 下的所有页面都需要一个权限&#xff0c;而其他所有页面只需要身份验证。 默认情况下&#xff0c;SpringSecurity 要求对每个…

Umi.js 项目中使用 Web Worker

1.配置 Umi.js 在 Umi.js 中&#xff0c;需要通过配置来扩展 Webpack 的功能。在项目根目录下修改 config/config.ts 文件&#xff1a; export default defineConfig({chainWebpack(config) {config.module.rule(worker).test(/\.worker\.ts$/).use(worker-loader).loader(wo…

C语言之指针的奥秘(二)

一、数组名的理解 int arr[10]{1,2,3,4,5,6,7,8,9,10}; int *p&arr[0]; 这里使用 &arr[0] 的⽅式拿到了数组第⼀个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;而且是数组首元素的地址。如下&#xff1a; 我们发现数组名和数组⾸元素的地址打印出…

重要文件放u盘还是硬盘?硬盘和u盘哪个适合长期存储

在数字时代&#xff0c;我们每天都会处理大量的文件。其中&#xff0c;不乏一些对我们而言至关重要的文件&#xff0c;如家庭照片、工作文档、财务记录等。面对这些重要文件的存储问题&#xff0c;我们通常会面临&#xff1a;“重要文件放U盘还是硬盘”、“硬盘和U盘哪个适合长…

Vue2打包部署后动态修改后端接口地址的解决方法

文章目录 前言一、背景二、解决方法1.在public文件夹下创建config文件夹&#xff0c;并创建config.js文件2.编写config.js内容3.在index.html中加载config.js4.在封装axios工具类的js中修改配置 总结 前言 本篇文章将介绍使用Vue2开发前后端分离项目时&#xff0c;前端打包部署…

系统架构师考点--系统安全

大家好。今天我来总结一下系统安全相关的考点&#xff0c;这类考点每年都会考到&#xff0c;一般是在上午场客观题&#xff0c;占2-4分。 一、信息安全基础知识 信息安全包括5个基本要素&#xff1a;机密性、完整性、可用性、可控性与可审查性 (1)机密性&#xff1a;确保信息…