当前位置: 首页 > news >正文

milvus - VectorDBBench benchmaker 性能测试工具使用经验

IVF_FLAT (Inverted File with Flat Indexing)
优点:
在数据量适中且维度不是非常高的情况下,IVF_FLAT能提供精确的最近邻搜索结果。
相对简单,易于理解和实现。
缺点:
当数据集非常大时,IVF_FLAT需要大量的内存来存储整个数据集,这可能导致性能瓶颈。
检索速度随着数据集的增长而显著降低,因为需要与所有候选数据点计算相似度。
HNSW (Hierarchical Navigable Small World Graphs)
优点:
HNSW特别适合高维数据,能够在大规模数据集上提供高效的近似最近邻搜索。
即使数据集很大,HNSW也能保持较快的查询速度。
缺点:
HNSW的构建过程可能较为复杂和耗时,尤其是在数据流式更新的情况下。
结果为近似最近邻,虽然通常足够准确,但在某些场景下可能不如IVF_FLAT精确。
对于小数据场景,特别是如果数据量不大且可以接受较高的内存消耗,IVF_FLAT可能是一个更好的选择,因为它能提供精确的结果。然而,如果数据集的维度非常高或者你希望优化查询速度,即使数据量较小,HNSW仍然可能是更优的选择。
在实际应用中,选择哪一种算法还应考虑具体业务需求,比如是否可以容忍近似结果、系统资源限制、以及是否需要实时更新索引等因素。如果数据量和维度都不大,而且对查询速度的要求不是特别高,那么IVF_FLAT可能就足够了;但如果需要在高维数据上进行快速查询,HNSW则更加合适。
HNSW  分层可导航小世界图索引
1.M
M是一个关键参数,它定义了图中每个节点的最大出边数,即每个节点可以连接到的最多其他节点的数量 
在HNSW的多级图结构中,M控制着图的连通性和密度。
2.efConstruction
efConstruction定义了在构建图时,算法为每个节点寻找最近邻时考虑的候选节点数量。换句话说,它是构建索引过程中用于决定每个节点连接哪些其他节点的探索因子。
它控制了算法在添加新节点时考虑的候选邻居数量。当添加一个新节点时,算法会从当前图中选取efConstruction个节点作为候选,并从中挑选出最佳的邻居节点来建立连接
3.ef-search 
ef_search(有时简写为 ef)是HNSW(Hierarchical Navigable Small World graphs)算法中用于查询阶段的一个重要参数。在查询时,ef_search定义了算法在试图找到最近邻时考虑的候选节点数量。
它控制着搜索的广度,即算法在搜索图时愿意检查多少条边。
ef_search 控制搜索过程的效率和精度,它影响算法在搜索时探索的路径数量。
4.k
k通常是指查询时返回的最近邻(nearest neighbors)的数量
IVF_FALT  带平面索引的倒排文件
lists
lists参数实际上指的是nlist,它是IVF_FLAT索引中聚类(或列表)的数量。nlist决定了数据集被分割成多少个子集。
probes
probes参数是指在搜索时实际检查的聚类数量

官网地址如下:
https://zilliz.com/vector-database-benchmark-tool?database=ZillizCloud%2CMilvus%2CElasticCloud%2CPgVector%2CPinecone%2CQdrantCloud%2CWeaviateCloud&dataset=medium&filter=none%2Clow%2Chigh&tab=1

https://gitee.com/woohello/VectorDBBench

1.前置条件:
1.python >= 3.11
Ssl 问题解决:
https://cloud.tencent.com/developer/article/2424089
https://blog.csdn.net/qq_43370607/article/details/137382955

pip install vectordb-bench

1.ivf_flat 性能验证

nohup ./ivf_flat.sh  > /root/octopus/benchmarker/dimension/ivf_flat.log  2>&1 &
/usr/local/python3.12/bin/vectordbbench  milvusivfflat --uri 'http://xxxxx:32437'  --drop-old --lists 1024 --probes 5
{"run_id": "09c01adfa7a5470ea6176855cccd5628","task_label": "09c01adfa7a5470ea6176855cccd5628","results": [{"metrics": {"max_load_count": 0,"load_duration": 158.9442,"qps": 3031.743,"serial_latency_p99": 0.008,"recall": 0.5065,"ndcg": 0.5493,"conc_num_list": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],"conc_qps_list": [175.7321, 838.1756, 1328.4196, 1676.7759, 1885.2717, 2329.0303, 2238.8839, 2307.6002, 2418.9697, 2502.9213, 2628.4562, 2611.9513, 2631.2078, 2709.1865, 2751.1792, 2749.1104, 2792.9155, 2752.8945, 2836.4445, 2904.4609, 3031.743],"conc_latency_p99_list": [0.004655693072453141, 0.004652024507522583, 0.004790452426299453, 0.005058524944633246, 0.0053853894943371415, 0.00560504300147295, 0.005771844685822725, 0.006148010149598122, 0.006257654917612672, 0.00643803995847702, 0.006523223061859608, 0.00653654379490763, 0.0069596841046586635, 0.00731352926902473, 0.007371303759515286, 0.007228717562556266, 0.007472157787531615, 0.0074205820478498935, 0.006961745805479586, 0.008283554406836629, 0.0073261844931170345]},"task_config": {"db": "Milvus","db_config": {"db_label": "2024-07-30T14:43:55.771839","uri": "**********"},"db_case_config": {"index": "IVF_FLAT","metric_type": "COSINE","nlist": 1024,"nprobe": 5},"case_config": {"case_id": 50,"custom_case": null,"k": 100,"concurrency_search_config": {"num_concurrency": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],"concurrency_duration": 30}},"stages": ["drop_old", "load", "search_serial", "search_concurrent"]},"label": ":)"}],"file_fmt": "result_{}_{}_{}.json"
}

在这里插入图片描述
2.hnsw 性能验证
条件:–m 8 --ef-construction 64 --ef-search 10 --k 10

nohup ./hnsw_10.sh > /root/octopus/benchmarker/dimension/hnsw_10.log  2>&1 & 
/usr/local/python3.12/bin/vectordbbench   milvushnsw --uri 'http://172.20.1.101:32437' --drop-old   --m 8 --ef-construction 64  --ef-search 10  --k 10

在这里插入图片描述

{"run_id": "1c945b28090941c7ae58ec55a8ae0ecb","task_label": "1c945b28090941c7ae58ec55a8ae0ecb","results": [{"metrics": {"max_load_count": 0,"load_duration": 138.8369,"qps": 3857.9497,"serial_latency_p99": 0.006,"recall": 0.6946,"ndcg": 0.7127,"conc_num_list": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],"conc_qps_list": [205.9066, 896.0748, 1535.6513, 1961.4574, 2282.5936, 2486.9112, 2473.0187, 2639.9002, 2792.597, 2825.9357, 2985.0966, 2992.8825, 3202.8998, 3336.8242, 3480.6602, 3195.9544, 3206.5109, 3249.2361, 3527.203, 3528.9396, 3857.9497],"conc_latency_p99_list": [0.004022291118651628, 0.003988313633389771, 0.004059490236081183, 0.0042587881341576575, 0.004422521588951349, 0.0045851776339113715, 0.0050087556691840295, 0.005091396714560687, 0.005392795985937118, 0.005527270000986755, 0.00542353574000299, 0.005898943385109305, 0.005861698154173791, 0.006148975464701652, 0.006199899067729712, 0.006067702007293701, 0.006825755665823817, 0.006885729782283306, 0.006695127539336682, 0.0061551205324009055, 0.006313137001730501]},"task_config": {"db": "Milvus","db_config": {"db_label": "2024-07-30T15:32:41.701653","uri": "**********"},"db_case_config": {"index": "HNSW","metric_type": "COSINE","M": 8,"efConstruction": 64,"ef": 10},"case_config": {"case_id": 50,"custom_case": null,"k": 10,"concurrency_search_config": {"num_concurrency": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],"concurrency_duration": 30}},"stages": ["drop_old", "load", "search_serial", "search_concurrent"]},"label": ":)"}],"file_fmt": "result_{}_{}_{}.json"
}

2.hnsw 性能验证
条件: --m 8 --ef-construction 64 --ef-search 64 --k 64

nohup ./hnsw_10.sh > /root/octopus/benchmarker/dimension/hnsw_64.log 2>&1 & 
{"run_id": "0112f04d884a48e7b04a79601b501f43","task_label": "0112f04d884a48e7b04a79601b501f43","results": [{"metrics": {"max_load_count": 0,"load_duration": 99.8713,"qps": 3590.8011,"serial_latency_p99": 0.0068,"recall": 0.6842,"ndcg": 0.6988,"conc_num_list": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],"conc_qps_list": [204.2923, 903.9947, 1569.658, 1960.1058, 2254.7686, 2555.6955, 2661.9067, 2884.7484, 2974.3032, 2975.3197, 2988.5105, 3178.9354, 3299.7453, 3396.6382, 3327.4601, 3397.9266, 3465.914, 3466.3555, 3471.6151, 3504.3056, 3590.8011],"conc_latency_p99_list": [0.004091060114465654, 0.003925692438334226, 0.004029340751469135, 0.004241374858655035, 0.0044741668567061426, 0.004661575911566615, 0.004779618114605546, 0.00496285007596016, 0.005089158420264721, 0.005570173567533493, 0.005635122420825064, 0.0056590593174099925, 0.005516276902705431, 0.0058326821969822045, 0.005921696238219737, 0.006209327307716011, 0.006015772367082536, 0.0063866944853216406, 0.0059822171421721575, 0.005861425867676735, 0.00654305313937366]},"task_config": {"db": "Milvus","db_config": {"db_label": "2024-07-30T16:03:25.006315","uri": "**********"},"db_case_config": {"index": "HNSW","metric_type": "COSINE","M": 8,"efConstruction": 64,"ef": 10},"case_config": {"case_id": 50,"custom_case": null,"k": 10,"concurrency_search_config": {"num_concurrency": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],"concurrency_duration": 30}},"stages": ["drop_old", "load", "search_serial", "search_concurrent"]},"label": ":)"}],"file_fmt": "result_{}_{}_{}.json"
}

相关文章:

milvus - VectorDBBench benchmaker 性能测试工具使用经验

IVF_FLAT (Inverted File with Flat Indexing) 优点: 在数据量适中且维度不是非常高的情况下,IVF_FLAT能提供精确的最近邻搜索结果。 相对简单,易于理解和实现。 缺点: 当数据集非常大时,IVF_FLAT需要大量的内存来存储整个数据集,…...

Linux上如何分析进程内存分配,优化进程内存占用大小

云计算场景下,服务器上内存宝贵,只有尽可能让服务器上服务进程占用更少的内存,方才可以提供更多的内存给虚拟机,卖给云客户。 虚拟化三大件:libvirt、qemu、kvm内存开销不小,可以优化占用更少的内存。如何找到进程内存开销的地方直观重要,以qemu为例说明。 一、查看进…...

C语言笔记(第n版):知识清单

注:本文参考自【C reference - cppreference.com】和【C 语言参考 | Microsoft Learn】,颇有点借花献佛的意味…… C 程序是一系列包含声明的文本文件(通常为头文件和源文件)的序列。它们经过转换成为可执行程序,当操作…...

【香橙派系列教程】(四)基于ARM-Linux架构的语音控制刷抖音项目

【四】基于ARM-Linux架构的语音控制刷抖音项目 文章目录 【四】基于ARM-Linux架构的语音控制刷抖音项目1.语音模块配置1.创建产品2.引脚配置3.词条定义4.添加控制5.发布版本6.烧录固件 2.编程实现语音和开发板通信3.手机接入Linux热拔插1.dmesg命令2.adb调试踩坑问题 3.总结 4.…...

Java----反射

什么是反射? 反射就是允许对成员变量、成员方法和构造方法的信息进行编程访问。换句话来讲,就是通过反射,我们可以在不需要创建其对象的情况下就可以获取其定义的各种属性值以及方法。常见的应用就是IDEA中的提示功能,当我…...

相似度计算方法

一、相似度计算方法 相似度算法是计算两个或多个对象之间相似程度的方法,这些对象可以是文本、图像、音频等不同类型的数据。在计算机科学、信息检索、推荐系统、数据挖掘等领域中,相似度算法具有广泛的应用。 二、应用场景 搜索引擎:用于文…...

Vue 点击markdown页内链接,路由设置不跳转

在路由index.js里添加路由守卫: router.beforeEach((to,from,next)>{//如果是md页内链接“#xxx”,则不跳转const hash window.location.hash;if(hash.startsWith(#)) {next(false);}else{...其他控制代码next();} });当markdown用[标题链接](#标题名…...

IOday4

一、思维导图 二、练习 1、使用父子进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半内容&#xff0c;子进程拷贝后一半内容&#xff0c;子进程结束后退出&#xff0c;父进程回收子进程的资源 #include<myhead.h> int main(int argc, const char *argv[]) {//判断终…...

智能座舱背后主流车机平台(SA8155/SA8295)的高通Hexagon DSP是什么?

智能座舱背后主流车机平台(SA8155/SA8295)的高通Hexagon DSP是什么&#xff1f; 一、高通Hexagon DSP的辉煌发展历程 高通&#xff0c;作为全球领先的无线通信技术创新者&#xff0c;其处理器技术一直走在行业前列。随着智能手机和物联网设备的普及&#xff0c;对处理器性能的…...

linux进程控制——进程等待——wait、waitpid

前言&#xff1a;本节内容仍然是进程的控制&#xff0c;上一节博主讲解的是进程控制里面的进程创建、进程退出、终止。本节内容将讲到进程的等待——等待是为了能够将子进程的资源回收&#xff0c;是父进程等待子进程。 我们前面的章节也提到过等待&#xff0c; 那里的等待是进…...

Shell脚本的进程管理

进程管理是系统管理的重要方面&#xff0c;通过对进程的监控、启动、停止和重启&#xff0c;可以保证系统的稳定运行。Shell脚本是一种强大的工具&#xff0c;可以对进程进行自动化管理&#xff0c;提高效率和准确性。 参考&#xff1a;shell脚本进程管理 - CSDN文库 shell脚本…...

JLink烧录失败

1. 现象&#xff1a; 这个位置是灰色的&#xff0c;没有SW Device信息。 MDK下面的打印&#xff1a; J-Flash的打印&#xff1a; windows上面的弹框的现象没有截屏。 2. 解决办法&#xff1a; 1.打开J-Link Commander,输入unlock kinetis&#xff0c;看现象不起作用,网…...

Monorepo简介

Monorepo 第一章&#xff1a;与Monorepo的邂逅第二章&#xff1a;Multirepo的困境第三章&#xff1a;Monorepo的魔力 - 不可思议的解决问题能力第四章&#xff1a;Monorepo的挑战与应对策略第五章&#xff1a;总结第六章&#xff1a;参考 第一章&#xff1a;与Monorepo的邂逅 …...

SpringBoot打包为jar包,打包前注意事项及打包教程

在打包 Spring Boot 项目为 JAR 包之前&#xff0c;有一些重要的注意事项和步骤&#xff0c;以确保打包过程顺利并生成一个可正常运行的 JAR 包&#xff1a; 1. 检查依赖和版本 确保所有依赖项和插件版本是最新且兼容的&#xff0c;特别是 Spring Boot 版本和其相关依赖的版本…...

B端系统UI个性化设计:感受定制之美

B端系统UI个性化设计&#xff1a;感受定制之美 引言 艾斯视觉作为ui设计和前端开发从业者&#xff0c;其观点始终认为&#xff1a;在当今竞争激烈的商业环境中&#xff0c;B端&#xff08;Business-to-Business&#xff09;系统的设计不再仅仅是功能性的堆砌&#xff0c;而是…...

前端常用 utils 工具封装

// 函数防抖 export function debounce(fn, interval) {let timerreturn function (this, ...args) {clearTimeout(timer)const context thislet params [...args]timer setTimeout(() > {fn.call(context, ...params)}, interval || 1000)} }// 函数节流 export functio…...

项目都做完了,领导要求国际化????--JAVA后端篇

springboot项目国际化相信各位小伙伴都会&#xff0c;很简单&#xff0c;但是怎么项目都做完了&#xff0c;领导却要求国际化文件就很头疼了 国际化的SpringBoot代码&#xff1a; 第一步&#xff1a;创建工具类 /*** 获取i18n资源文件** author bims*/ public class Message…...

国内备受好评PostgreSQL数据库性能如何?

为什么国内很多数据库采用PostgreSQL数据库作为基础&#xff0c;再次开发自己的产品呢?不仅仅是因为PostgreSQL数据库开源免费、PostgreSQL 数据库的性能也是相当出色的&#xff0c;具有以下几个方面的特点&#xff1a; 1. 处理大规模数据&#xff1a; - 能够有效地管理和处…...

彻底搞懂前端跨域解决方案

一、浏览器的同源策略 1、同源策略概述 同源策略是浏览器为确保资料安全&#xff0c;而遵循的一种策略&#xff0c;该策略对访问资源进行了一些限制。 2、什么是源&#xff08;origin&#xff09;&#xff1f; 3、示例 4、同源请求 5、非同源请求 二、跨域会受到哪些限制 1…...

Kafka基础概念

MQ消息中间件 1&#xff09;总览&#xff1a; 消息中间件 这里我们主要学习的是kafka的基础概念 具体参考黑马头条&#xff1a;https://www.bilibili.com/video/BV1Qs4y1v7x4/?spm_id_from333.337.search-card.all.click 2&#xff09;消息中间件对比 3&#xff09;Kafka介…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...