Milvus - 比特集机制及其应用场景详解

news2024/9/25 2:27:46

在向量数据库 Milvus 中,比特集(Bitset)是一种强大且高效的机制,能够帮助实现属性过滤、数据删除以及时间旅行查询等功能。本文将详细介绍比特集的概念、其在 Milvus 中的应用,以及其主要应用场景,并通过多个示例展示比特集在实际应用中的功能。

什么是比特集?

比特集(Bitset)是由 0 和 1 组成的位数组。每一个比特(bit)代表布尔值 truefalse,即 1 或 0。在 Milvus 中,比特集用于表示数据的状态,能够紧凑、高效地存储和处理布尔逻辑操作。

  • 0:通常表示“无效”或“未满足条件”。
  • 1:通常表示“有效”或“满足条件”。

比特集的主要功能

1. 属性过滤

在属性过滤中,比特集用于标记哪些实体数据满足给定的查询条件。通过布尔逻辑操作,比特集能够快速筛选出符合条件的实体。

应用场景:当需要从大量数据中根据某个属性(如年龄、产品类型等)进行筛选时,比特集能迅速确定哪些数据符合条件,而其他不符合条件的数据会被标记为 0。

示例:在一个包含 8 个实体的数据集中,只有 primary_keys 为 [1, 3, 5, 7] 的实体满足查询条件。比特集会将这些实体标记为 1,其余实体标记为 0:

  • 比特集:[1, 0, 1, 0, 1, 0, 1, 0]

2. 数据删除

比特集还用于管理数据删除。当某个实体被删除时,对应位置的比特集会被设置为 1。在后续查询中,这些标记为 1 的实体将被跳过。

应用场景:在大规模数据库中进行逻辑删除操作时,比特集可以帮助快速标记已删除的数据,避免它们在后续查询中被考虑。

示例:如果 primary_keys 为 [7, 8] 的实体被删除,比特集会变为:

  • 删除比特集:[0, 0, 0, 0, 0, 0, 1, 1]

3. 时间旅行查询

时间旅行查询允许用户查看历史某一时间点的数据状态。比特集结合时间戳,能够标记在不同时间点有效或无效的实体,模拟该时间点的数据库状态。

应用场景:在需要回溯数据状态或进行审计时,时间旅行查询可以帮助用户查询过去某个时间点的数据。

示例:如果用户设置 time_travel 为 150,比特集会标记在此时间点之前已存在且有效的数据,而那些之后插入的数据则会被标记为无效。

4. 并行处理中的高效计算

比特集占用的存储空间较小,并且可以快速执行布尔运算,适合在并行计算环境中处理大规模数据。多个比特集之间的逻辑操作(如 AND、OR)能够并行执行,从而提升系统的处理速度。

应用场景:在多核处理器或分布式系统中,处理大规模数据时,比特集能极大提升并行计算性能。

5. 索引优化

比特集可以用于构建高效的索引结构。通过预先生成比特集,可以快速筛选出满足查询条件的实体,避免每次查询时都重新计算。

应用场景:在需要频繁查询的大数据系统中,比特集可以作为一种优化工具,显著提升查询性能。

6. 稀疏数据表示

在稀疏数据场景中,比特集能够高效表示布尔状态。与传统数据类型相比,比特集占用空间小,非常适合表示大量布尔值或标志位。

应用场景:例如在权限管理系统中,比特集可以高效表示用户权限,或在任务调度系统中用于标记任务的状态。

比特集的综合应用示例

示例一:属性过滤与时间旅行

场景描述:假设在一个系统中,我们有 8 个实体数据,按照时间顺序进行以下操作:

  • 在时间戳 ts = 100 时插入实体 [1, 2, 3, 4]。
  • 在时间戳 ts = 200 时插入实体 [5, 6, 7, 8]。
  • 在时间戳 ts = 300 时删除实体 [7, 8]。

用户希望通过时间旅行查询,查看在 ts = 150ts = 250 时哪些实体符合查询条件。

Step 1:查询 time_travel = 150 时的数据
  • 过滤条件:primary_keys 为 [1, 3, 5, 7] 满足筛选条件,因此初始 filter_bitset[1, 0, 1, 0, 1, 0, 1, 0]
  • 时间点判断:在时间戳 ts = 150 时,实体 [5, 6, 7, 8] 还未插入,因此应被标记为无效,filter_bitset 变为 [1, 0, 1, 0, 0, 0, 0, 0]
  • 删除判断:此时还没有发生删除操作,因此删除比特集为 [0, 0, 0, 0, 0, 0, 0, 0]

最终比特集结果:通过与删除比特集结合后,最终结果比特集为 [1, 0, 1, 0, 0, 0, 0, 0],表示实体 [1, 3] 会被查询到。

Step 2:查询 time_travel = 250 时的数据
  • 过滤条件:primary_keys 为 [1, 3, 5, 7] 满足筛选条件,因此初始 filter_bitset 仍然为 [1, 0, 1, 0, 1, 0, 1, 0]
  • 时间点判断:在时间戳 ts = 250 时,所有实体都已经插入,因此比特集不变。
  • 删除判断:删除操作尚未发生,因此删除比特集依旧为 [0, 0, 0, 0, 0, 0, 0, 0]

最终比特集结果:最终比特集结果为 [1, 0, 1, 0, 1, 0, 1, 0],表示实体 [1, 3, 5, 7] 会被查询到。

Step 3:查询 time_travel = 350 时的数据
  • 过滤条件:初始 filter_bitset[1, 0, 1, 0, 1, 0, 1, 0]
  • 时间点判断:所有实体都已插入。
  • 删除判断:在时间戳 ts = 350 时,实体 [7, 8] 已被删除,因此删除比特集为 [0, 0, 0, 0, 0, 0, 1, 1]

最终比特集结果:最终比特集为 [1, 0, 1, 0, 1, 0, 0, 0],表示只有实体 [1, 3, 5] 仍然有效且符合条件。

示例二:并行处理中的应用

场景描述:在一个分布式系统中,有数千万级别的实体数据,用户需要同时进行属性筛选和数据删除操作。在这种情况下,多个比特集可以并行操作来提升性能。

  • 属性筛选:根据查询条件,生成初始 filter_bitset,标记哪些实体符合筛选条件。
  • 数据删除:对已删除实体生成 delete_bitset,标记哪些实体在查询时应被忽略。
  • 布尔逻辑运算:通过 OR、AND 等布尔操作,结合多个比特集结果,最终生成符合要求的实体集合。

通过并行化操作,各个比特集之间的布尔逻辑运算可以大幅提升性能,避免对每个实体逐个判断和处理。

示例三:稀疏数据表示中的应用

场景描述:在一个权限管理系统中,系统需要管理上百万用户的访问权限,涉及到大量布尔类型的数据,如用户是否拥有某个模块的访问权限。通过比特集,可以高效存储这些权限数据,避免浪费存储空间。

  • 存储效率

每个用户的权限用比特集表示,1 表示有权限,0 表示无权限。

  • 高效查询:在查询用户权限时,通过比特集可以快速筛选出哪些用户拥有某些模块的访问权限,提升查询性能。

总结

比特集是一种高效的工具,在 Milvus 中用于实现属性过滤、数据删除和时间旅行查询等功能。通过其紧凑的存储方式和高效的布尔逻辑操作,比特集可以帮助系统快速处理大规模数据查询和更新操作。无论是需要管理大量数据的删除状态,还是进行复杂的并行计算和时间旅行查询,比特集都能为开发者提供强大的支持。

这些应用示例展示了比特集在实际操作中的优势,特别是在处理大规模数据、查询优化和并行计算中的重要性。

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

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

相关文章

【Linux网络 —— 网络基础概念】

Linux网络 —— 网络基础概念 计算机网络背景网络发展 初始协议协议分层协议分层的好处 OSI七层模型TCP/IP五层(或四层)模型 再识协议为什么要有TCP/IP协议?什么是TCP/IP协议?TCP/IP协议与操作系统的关系所以究竟什么是协议? 网络传输基本流程…

【openwrt】 libubox组件——ustream

文章目录 ustream 核心数据结构struct ustreamstruct ustream_buf_liststruct ustream_bufstruct ustream_fd ustream 核心APIustream_fd_initustream_uloop_cbustream_fd_read_pendingustream_fill_read ustream_write_pendingustream_writeustream_fd_write ustream 应用示例…

Python画笔案例-059 绘制甩曲彩点动图

1、绘制甩曲彩点动图 通过 python 的turtle 库绘制 甩曲彩点动图,如下图: 2、实现代码 绘制甩曲彩点动图,以下为实现代码: """甩曲彩点动图.py """ import time import turtlecs = [red,orange,

CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task

论文汇总 当前的问题 图1:在VTAB-1k基准测试上,使用预训练的ViT-B/16模型,VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。 如图1所示,当给出大量提示时,VPT显示了性能的显著下降…

串口问题汇总:串口发送乱码,重定义使用printf ,输出顺序出错,缓存区思想,串口项目应用

1.c51使用串口出现顺序被覆盖的情况,也就是输出time 最后输出的却是te 这是因为你没有等待上一个数据发送就开始发送下一个数据就会导致数据篡位 2.c51想使用串口重定义使用printf 首先c51是自带stdio.h不需要像32那样点击 include lib选项,你直接改…

力扣958:判断二叉树是否为完全二叉树

给你一棵二叉树的根节点 root ,请你判断这棵树是否是一棵 完全二叉树 。 在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h 层)中可以包含 …

体制内打工人收藏!5款AI写作工具,助你变成单位笔杆子~

对于初入体制内职场的新手或是日常任务繁重、难以抽身撰写文件的同事们,别再让加班的夜晚成为常态!现在,就让我揭秘几个高效公文写作宝库,它们能助你迅速掌握公文写作的精髓,海量素材信手拈来,更有快速成文…

Elasticsearch、ik分词器、elasticsearch-head、Kibana的认识与安装

文章目录 elasticsearch安装elasticsearchIK中文分词器elasticsearch-headkibana elasticsearch Elasticsearch是一个基于Lucene的搜索服务器,也是属于NoSQL阵营的数据库。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口提供给我们操…

2025年SEO策略:如何优化您的知识库?

如今很多人在遇到问题时都会求助于谷歌。谷歌已经成为提供解决方案不可或缺的工具。作为全球搜索引擎的巨头,拥有大量用户流量。这就是为什么确保您的产品和服务在谷歌搜索结果中排名靠前是至关重要的,如果您想获得更多的客户,SEO是一个非常关…

打造你的专属主题-VitePress保姆级教程

本篇为vitepress系列教程,在开始前,若还不了解vitepress的小伙伴可以看一下以往文章: 不敲一行代码!助你快速搭建属于自己的官网博客!-VitePress保姆级教程 文章目录 VitePress主题配置准备自定义主题配置标题配置图标…

如何用AI实现自动更新文章?(全自动更新网站)

AI的诞生确实给我们的生活和工作都带来了很大的改变,从我自身来讲,也渐渐习惯了遇到事情先问问AI,不管是翻译、专业性问题、PPT制作、总结写作这些,确实帮我迅速理清了思路,也可以有很多内容的借鉴。 作为一个业余爱好…

滑动窗口算法第一弹(长度最小的子数组,无重复字符的最长子串 最大连续1的个数III)

目录 前言 1. 长度最小的子数组 (1)题目及示例 (2)暴力解法 (3)优化 2. 无重复字符的最长子串 (1)题目及示例 (2)暴力解法 (3&#xff…

深度学习:卷积神经网络CNN

目录 一、什么是卷积? 二、卷积神经网络的组成 1. 卷积层 2. 池化层 3. 激活函数 4. 全连接层 三、卷积神经网络的构造 四、代码实现 1.数据预处理 2.创建卷积神经网络 3.创建训练集和测试集函数 4.创建损失函数和优化器并进行训练 一、什么是卷积&…

Kivy,一个上天入地的 Python 库

大家好!我是炒青椒不放辣,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…

USB 电缆中的信号线 DP、DM 的缩写由来

经常在一些芯片的规格书中看到 USB 的信号对是以 DP 和 DM 命名: 我在想,这些规格书是不是写错了,把 N 写成 M 了?DM 中的 M 到底是什么的缩写? 于是我找了一些资料,终于在《Universal Serial Bus Cables …

string 的介绍及使用

一.string类介绍 C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理&a…

BUUCTF [SCTF2019]电单车详解两种方法(python实现绝对原创)

使用audacity打开,发现是一段PT2242 信号 PT2242信号 有长有短,短的为0,长的为1化出来 这应该是截获电动车钥匙发射出的锁车信号 0 01110100101010100110 0010 0前四位为同步码0 。。。中间这20位为01110100101010100110为地址码0010为功…

ssm病人跟踪治疗信息管理系统

专业团队,咨询就送开题报告,欢迎大家咨询留言 摘 要 病人跟踪治疗信息管理系统采用B/S模式,促进了病人跟踪治疗信息管理系统的安全、快捷、高效的发展。传统的管理模式还处于手工处理阶段,管理效率极低,随着病人的不断…

《SG-Former: Self-guided Transformer with Evolving Token Reallocation》ICCV2023

摘要 SG-Former(Self-guided Transformer)是一种新型的视觉Transformer模型,旨在解决传统Transformer在处理大型特征图时面临的计算成本高的问题。该模型通过一种自适应细粒度的全局自注意力机制,实现了有效的计算成本降低。它利…

VmWare安装虚拟机教程(centos7)

VMWare下载: 下载 VMware Workstation Pro - VMware Customer Connect 安装包:(16的版本)免费!(一个赞就行) 一直点下一步即可,注意修改一下安装位置就好 二、安装虚拟机 安装虚…