更快更强更稳定:腾讯向量数据库测评

向量数据库:AI时代的新基座
人工智能在无处不在影响着我们的生活,而人工智能飞速发展的背后是需要对越来越多的海量数据处理,传统数据库已经难以支撑大规模的复杂数据处理。特别是大模型的出现,向量数据库横空出世。NVIDIA CEO黄仁勋在NVIDIA GTC Keynote演讲中首次提到了向量数据库,并强调它在构建专有大型语言模型组织中的重要性。作为新一代AI处理器,大型模型提供了强大的数据处理能力,而向量数据库则成为了存储能力的关键基础。
向量数据库是一种专门用于存储和查询向量数据的数据库系统,它采用向量化计算,能够快速处理大规模复杂数据,相较于关系型数据库有着更高的性能。与传统数据库相比,向量数据库可以处理高维数据,例如图像、音频和视频等,从而解决了传统关系型数据库的瓶颈。此外,向量数据库可以利用分布式、云计算和边缘计算等技术轻松地扩展到多个节点,从而实现数据处理规模的扩大,并提高向量数据的存储、管理和查询的稳定性。
我们不禁要问,向量数据库相比于传统数据库有如此亮眼的表现,背后是哪些核心技术在支撑呢?
向量数据库的核心技术
什么是向量数据?
向量数据是由多个数值组成的序列,可以表示一个数据量的大小和方向。通过Embedding技 术,图像、声音、文本都可以被表达为一个高维的向量,比如一张图片可以转换为一个由像素值构成的向量。
在计算机科学和数据科学中,向量数据广泛应用于各种领域,如机器学习、图像处理、自然语言处理等。例如,在机器学习中,数据通常以向量的形式表示,每个维度表示一个特征,从而可以进行各种模型的训练和预测。通过对向量数据进行计算,可以进行相似度比较、聚类分析、分类和预测等任务。向量数据的处理和分析对于许多领域的数据科学和人工智能应用至关重要。
什么是向量数据库?
向量数据库是一种专门用于存储和查询向量数据的数据库系统。 向量数据库支持对向量数据进行各种操作,例如向量检索,根据给定的向量,找出数据库中与之最相似的向量;例如向量聚类:根据给定的相似度度量,将数据库中的向量分类,例如根据图片的内容或风格,将图片分成不同的主题。
向量数据库有哪些技术上的难点?
向量数据库主要有高维度、稀疏性、异构性和动态性四大难点。高维度是指向量数据通常包含大量元素,具有较高的维度,维度越高,对数据库性能的要求也就越高;稀疏性是指向量数据中很多元素的值可能为零或接近零,只有少数元素具有显著非零值,分布越稀疏越难以处理;异构性是指向量数据中的元素可能具有不同的类型或含义,表示不同的特征或属性;动态性是指向量数据可能随着时间或环境的变化而发生变化,可以是实时更新的,更新的频率越高,对数据库的查询、检索等要求也就越高。

分布式系统架构与负载均衡
针对向量数据规模庞大的问题,单机无法满足存储、计算需求, 所以必须要使用分布式系统。例如下图是腾讯云向量数据库分布式架构图,客户的请求通过负载均衡分发到各节点上,每个节点均可直接进行读/写操作,负责数据的计算及存储。

向量索引技术
向量数据维度很高,直接进行全量扫描或者基于树结构 的索引会导致效率低下或者内存爆炸。向量索引技术是一种专门用于向量数据的索引方法,旨在加快对向量数据的相似度搜索和查询操作。 首先对向量数据进行向量化计算,将每个向量映射到一个高维空间中。然后根据向量之间的相似度定义构建索引结构。常用的向量索引方法包括:
- FLAT:在FLAT 索引中,向量会以浮点型的方式进行存储,不做任何压缩处理。搜索向量会遍历所有向量与目标向量进行比较。当查询数量较少时,它是最有效的索引方法。当数据集非常大时,FLAT 的性能会明显下降。FLAT 适用于数据量小,且需要精确匹配的场景等。
- HNSW:是一种基于图的算法,它在高维空间中能够保持较高的精度。HNSW 通过建立一个多层级的图结构来组织数据集,并且使用随机游走来搜索最近邻。HNSW 的构建过程比 FLAT 更为复杂,需要更多的计算资源,但检索速度更快。HNSW 适用于需要快速近似匹配的场景等。
- IVF系列:IVF 系列索引的核心思想是将高维空间划分为多个聚类,并为每个聚类构建一个倒排文件。通过这种方法,IVF 系列索引可以在大规模高维向量数据中实现高效的相似性搜索。
腾讯云向量数据库的优势
以上种种技术难点一定程度上阻碍了向量数据库的大规模落地和使用,全球很多顶尖高科技公司和组织都在投入这个领域的研究。例如国际市场上,Zilliz与Nvidia、IBM、 Mircosoft等公司展开合作;Pinecone先后上架Google云和AWS,逐步打开市场。在国内市场腾讯云向量数据库(Tencent Cloud VectorDB)无疑是表现最抢眼的产品之一,凭借着强悍的性能、超高的稳定性和可靠性、超高性价比吸引了越来越多的用户。
强悍性能
腾讯云向量数据库单索引支持10亿级向量数据规模,在同等向量维度下和数据量级下,相比于开源向量数据库有极大的性能提升,博主在下一节也亲手测试体验了强悍的性能表现。
如此强大的性能能力建立在云原生的分布式架构基础上,做了大量的负载均衡优化、向量检索优化、向量分析优化等,体现了腾讯云深厚的技术功底。
超高性价比
腾讯云向量数据库从诞生之初就是基于云原生而设计的,得益于腾讯云完善的基础设施,用户直接在云上操作,可以大大减少机器成本和运维成本。所以选择腾讯云向量数据库无疑是超高性价比的选择。
高兼容性
向量数据库支持多种类型和格式的向量数据,同时提供多种语言和平台的接口和工具,具备高度的兼容性,方便用户进行集成和使用。腾讯云向量数据库提供了Python SDK和HTTP SDK两种SDK,例如使用Python SDK只需要执行下面的pip命令安装 tcvectordb库即可。
| Shell |
Python SDK提供了创建表格、写入数据、查询数据、相似性检索等API接口,使用起来非常方便。用户可以在官方手册中找到更多的教程和示例。
性能实测:128维向量查询
准备工作
最近腾讯云向量数据库也开放了产品内测功能,大家可以去官网按照产品手册的指导,亲手内测体验一下吧!博主很幸运率先体验到了腾讯云向量数据库,并亲手测了大家最关心的数据库性能、稳定性和可靠性,没来得及体验的朋友就请先跟着博主的视角一睹为快吧!

在正式测评前,先介绍以下我们的测试工具ann-benchamrk 。这是是一个用于评估近似最近邻(ANN)搜索库的性能测试工具,包含了多个真实数据集,其中包括图像、文本、生物信息学等领域的数据。每个数据集都有一个已知的最近邻集合,可以用作性能评估的标准。此外,ANN-Benchmarks还提供了一些常用的评估指标,如精确度、查询时间和内存消耗等,用于衡量不同算法在近似最近邻搜索任务中的性能。具体数据集信息如下表所示:

我们首先在控制台新建一个向量数据库:

在新建完数据库后,我们可以点进实例列表查看我们刚才新建实例的基本信息、规格信息和架构图:

为了测试需要,我们还需要购买一台CVM云服务器,可以根据自身需求购买不同配置的服务器:

购买时博主选择了按量计费的模型,配置如下:

执行测试
在开通完CVM之后,我们启动机器,打开我们的测试工具ann-benchamrk,安装测试环境依赖的包:


然后我们拷贝ann_benchmarks/algorithms/vector_db/config.yml 路径下的配置文件,重新命名为mytest.yml。查看我们刚才创建的向量数据库,配置数据库实例内网 IP 地址与端口。

接下来运行run.py执行128维向量性能测试:

多进程压测结果
我们用L2 euclidean欧式距离做衡量,在数据集量级100w和128维向量检索的条件下,获取最相似的 Top10的文档,比较QPS数据。腾讯云向量数据库的HNSW 索引都可以达到99%以上的召回率,QPS大约在13800以上,开源的向量数据库Faiss、Elasticsearch等在同等测试条件下,QPS都不超过4000,所以腾讯云向量数据库取得了至少3倍以上的性能提升。
结语
大模型的热潮宣告着人工智能的又一波高潮已经到来,向量数据库作为人工智能时代的基座,必将迎来一个飞速发展的新阶段。博主亲手体验了腾讯云向量数据库,能够切实解决传统数据库的诸多难点,强悍的性能和稳定性令我大受震撼。未来必定是属于AI的时代,让我们一起拥抱AI,拥抱向量数据库吧!
相关文章:
更快更强更稳定:腾讯向量数据库测评
向量数据库:AI时代的新基座 人工智能在无处不在影响着我们的生活,而人工智能飞速发展的背后是需要对越来越多的海量数据处理,传统数据库已经难以支撑大规模的复杂数据处理。特别是大模型的出现,向量数据库横空出世。NVIDIA CEO黄…...
【java web】JSP-Java Server Page
前言 这个框架我用得不多,感觉和python的django一样,前后端结合太紧密了,适合个人开发 get 明文请求,可以被直接收藏 post 密文请求 JSP Java Server Page(JSP)HTMLJava code 步骤: 1.…...
java文件命令行报错: 找不到或无法加载主类XXX报错及解决
前言 之前遇到过几次,后面稀里糊涂的解决了。今天详细记录一下,可能不全或有些错误,还请各位指正。 你要启动一个类的话首先要有类。 在这里,类有两种, 一个是带包名(package)的还有一个是没包…...
算法训练营day46|动态规划 part08:完全背包 (LeetCode 139. 单词拆分)
139. 单词拆分 (求排列方法) 题目链接🔥🔥 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明: 拆分时可以重复使用字典中的单词。 你可以假设字典中没…...
Java网络编程(二)Socket 套接字(TCP和UDP),以及TCP的回显
Socket 套接字(TCP和UDP),以及TCP的回显 Socket 套接字数据报套接字UDPTCP流套接字编程TCP的长短连接实现一个简单回显服务器 Socket 套接字 我们软件工作者,着重编写的是应用层的代码,但是发送这个数据,我…...
C++ - 多态语法 - 虚函数使用介绍
多态简单介绍 多态就是多种形态,是不同的对象去完成同一个动作所产生的结果可能有多种。这种多种的形态我们称之为多态。 比如:我们在买票的时候的时候,可能有成人全价,儿童半价,军人免票等等。对于成人,儿…...
php获取客户端ip地址及ip所在国家、省份、城市、县区
摘要 获取客户端ip地址,然后使用这个ip地址获取所在的国家、省份、城市,可以在网站中实现IP属地,发布地等功能。 本文的获取IP地址信息均采自网络上免费的IP查询网站,通过其API或者网页HTML解析出的ip地址信息。 代码 <?p…...
Error: Port Library failed to initialize: -86
最近遇到一个很奇怪的错误,这里记录一下,以备以后再次遇到 Error: Port Library failed to initialize: -86 Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.背景是,就是一普…...
SOME/IP 支持两种序列化方式:TLV 和 TV
SOME/IP 是一种基于 IP 的可扩展面向服务的中间件协议,它可以在车载以太网中实现 ECU 之间的高效通信和互操作性。 SOME/IP 的序列化方式是指将数据结构或对象按照一定的规则转换成字节序列的过程,以便在网络中传输和解析。 SOME/IP 支持两种序列化方式:TLV 和 TV。 TLV是…...
Unity之3D物理导航系统
一 介绍 Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路,比如可以制作点击某个位置,让角色自动的绕开障碍走到目标点的效果,比如可以制作敌人AI,让它可以通过NavMesh绕开障碍追击我方单…...
9.4黄金行情是否反转?今日多空如何布局?
近期有哪些消息面影响黄金走势?今日黄金多空该如何研判? 黄金消息面解析:周一(9月4日)亚市盘中,现货黄金震荡走高,延续上周涨势,一度刷新日内高点至1946.16美元/盎司。周三,ISM将发布服务业P…...
Win10下使用vim9
作为一个经常与文字打交道的Writer,你在学会Vim的基本操作之后,就一定会爱上Vim的。 以下是Windows10_64位(专业版)环境中安装、使用Vim9的全过程,分享一下: 一、下载、安装Vim9 去Vim官网去下载最新的Vi…...
Flink+Flink CDC版本升级的依赖问题总结
之前使用Flink1.13Flink CDC2.0同步MySQL数据,想测试一下最新的几个版本。但是各种依赖冲突的报错,经过一段时间的调试,终于解决,现在总结一下。 1、flink1.15前后jar包名称不一样 flink-streaming-java、flink-clients、flink-…...
Matlab论文插图绘制模板第112期—带阴影标记的图
之前的文章中,分享了Matlab带线标记的图: 进一步,本期分享的是带阴影标记的图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关注同名公号…...
专业运动耳机哪个牌子好、专业运动耳机推荐
在进行运动时,倾听音乐实际上是一种放松大脑、放松身体的小技巧。毕竟运动是一个耗费体力最多的活动,整个过程也往往令人感到乏味。如果有音乐作伴,你的运动就会变得更加轻松愉快。那么,哪种耳机适合运动呢?我正好对此…...
【SQL应知应会】索引 • Oracle版:B-树索引;位图索引;函数索引;单列与复合索引;分区索引
欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文免费学习,自发文起3天后,会收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 索引 • MySQL版 前言一、Oracle索引1.索引概述及分类…...
用ChatGPT做一个Chrome扩展 | 京东云技术团队
用ChatGPT做了个Chrome Extension 最近科技圈儿最火的话题莫过于ChatGPT了。 最近又发布了GPT-4,发布会上的Demo着实吸睛。 笔记本上手画个网页原型,直接生成网页。网友直呼:前端失业了! 但我觉着啊,真就外行看热闹…...
动态库的制作与使用及 动态库加载失败解决
加载动态库时有时会出现error while loading shared libraries:libcalc.so:可以通过lld命令查看动态库的依赖关系,发现libcalc.so时not found 原因 查找的优先级是DT_RPATH->LD_LIBRARY_PATH->/etc/ld.so.cache->/lib/,/usr/lib 找不到一个优…...
404 not found nginx(dist打包后,刷新和跳转都是404 not found nginx的问题) 解决方案(打包发布在服务器)
当我们执行了yarn run build之后,生成dist文件 我们将代码放入nginx-1.24.0下面的html中 然后我们就配置conf文件下的nginx.conf 配置方面不介绍了,主要问题是因为没有加这句话 问题分析 index index.htm index.html; index 就是根目录,也就…...
《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》全文翻译
《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》- Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 论文信息摘要1. 介绍2. 思维链提示3. 算术推理3.1 实验设置3.2 结果3.3 消融研究3.4 思想链的稳健性 4. 常识推理5. 符号…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
