MySQL 9.0新特性:向量存储

MySQL 9.0 正式版已经发布,其中一个亮点就是向量(VECTOR)数据类型的支持,本文给大家详细介绍一下这个新功能。

向量类型

MySQL 9.0 增加了一个新的向量数据类型:VECTOR。它是一种可以存储 N 个数据项的数据结构(数组),定义方式如下:

VECTOR(N)

其中,每个数据项都是一个 4 字节的单精度浮点数。默认的数据项为 2048 个,最大值为 16383。

向量类型的数据可以使用二进制字符串或者列表分隔的字符串表示,例如:

CREATE TABLE t(id int, rgb vector(3));INSERT INTO t VALUES (1, to_vector('[255,255,255]'));
INSERT INTO t VALUES (2, to_vector('[128,255,0]'));
INSERT INTO t VALUES (3, to_vector('[0,65,225]'));

向量函数

MySQL 9.0 同时还增加了一些用于操作 VECTOR 数据的向量函数。

首先,STRING_TO_VECTOR 函数用于将字符串形式的向量数据转换为二进制,例如:

SELECT HEX(STRING_TO_VECTOR("[1.05, -17.8, 32]"));HEX(STRING_TO_VECTOR("[1.05, -17.8, 32]"))|
------------------------------------------+
6666863F66668EC100000042                  |

STRING_TO_VECTOR 函数的参数是一个字符串,包含一组由逗号分隔的浮点数,并且使用方括号([])进行引用。

TO_VECTOR 函数是 STRING_TO_VECTOR 函数的同义词。

其次,VECTOR_TO_STRING 函数用于将向量数据转换为字符串,例如:

SELECT VECTOR_TO_STRING(STRING_TO_VECTOR("[1.05, -17.8, 32]"));VECTOR_TO_STRING(STRING_TO_VECTOR("[1.05, -17.8, 32]"))|
-------------------------------------------------------+
[1.05000e+00,-1.78000e+01,3.20000e+01]                 |SELECT VECTOR_TO_STRING(0x00000040000040400000A0400000E040);VECTOR_TO_STRING(0x00000040000040400000A0400000E040)|
----------------------------------------------------+
[2.00000e+00,3.00000e+00,5.00000e+00,7.00000e+00]   |

输出结果中的浮点数使用科学计数法表示。

FROM_VECTOR 函数是 VECTOR_TO_STRING 函数的同义词。

最后,VECTOR_DIM 函数用于返回向量数据的维度,也就是数据项的个数。例如:

SELECT VECTOR_DIM(rgb) FROM t;VECTOR_DIM(rgb)|
---------------+3|3|3|

使用限制

VECTOR 数据类型存在以下限制:

  • VECTOR 数据不能和其他类型的数据进行比较,VECTOR 数据只能和其他 VECTOR 数据进行等值比较。
  • VECTOR 类型的字段不能作为任何类型的键值,包括主键、外键、唯一键以及分区键。
  • VECTOR 类型的字段不能作为直方图的统计源。
  • 一些 MySQL 字符串函数可以使用 VECTOR 数据作为参数,包括 BIT_LENGTH()、CHAR_LENGTH()、HEX()、LENGTH() 以及 TO_BASE64()。其他字符串函数不支持 VECTOR 类型的参数。
  • VECTOR 数据可以作为以下加密函数的参数:AES_ENCRYPT()、COMPRESS()、MD5()、SHA1()、SHA2()。其他加密函数不支持 VECTOR 类型的参数。
  • VECTOR 数据可以作为 CASE 运算符和 COALESCE()、IFNULL()、NULLIF() 以及 IF() 函数的参数。
  • VECTOR 数据可以作为 CAST(expression AS BINARY) 的参数,结果返回 VECTOR 数据的二进制字符串。CAST 函数不支持将数据转换为 VECTOR 类型,推荐使用 STRING_TO_VECTOR 函数。
  • 除了COUNT 函数之外,VECTOR 数据类型不能作为其他聚合函数或者窗口函数的参数。
  • VECTOR 数据不能作为以下函数或运算符的参数:数字函数和运算符、时间函数、全文检索函数、XML 函数、位操作函数以及 JSON 函数。

总结

首先,对于向量数据的支持是一个重大的改进,可以为 MySQL 增加向量存储功能。

不过,目前 MySQL 9.0 只有简单的 VECTOR 数据类型和转换函数,还没有提供向量相似度(余弦相似性、欧氏距离、内积相似性等)检索功能,以及优化查询性能的向量索引,距离一个实用的向量数据库还有一些差距。

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

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

相关文章

Redis Stream:实时数据流的处理与存储

Redis Stream:实时数据流的处理与存储 引言 在当今数据驱动的世界中,实时数据处理和存储成为了许多应用的核心需求。Redis Stream作为一种新兴的数据结构,为Redis带来了强大的流处理能力。本文将深入探讨Redis Stream的特点、使用场景以及如何高效地利用它来处理实时数据流…

聚焦数字创新,定义影像未来

国际数字影像产业园在明确产业定位与发展方向时,应聚焦于数字影像、文创、媒体等新兴产业领域,以技术创新为核心动力、产业升级为保障、市场拓展为途径、国际化发展为方向,推动园区的持续健康发展。 作为园区的核心产业,数字影像产…

python socks5代理的使用

需要安装依赖 1、解决方法1 In order to make requests use socks proxy, you need to install it with it’s dependency. pip install requests[socks]2、解决方法2 pip install PySocks

第二证券股市知识:股票填权是怎么回事?利好还是利空?

1、股票填权的含义 股票填权是指在除权除息之后的一段时刻内,假设多数投资者看好该个股,股票的价格超过除权除息的基准价就叫做填权。上市公司假设能持续分红,就会向市场传递积极信号,招引更多投资者买入,越来越多的投…

使用Livox-Mid360激光雷达,复现FAST_LIO(保姆级教程)

前面我已经完成了mid360激光雷达的驱动安装,octomap的复现,昨天我去把这俩在正式环境中实测了一下,效果不好,走廊转角没建出来,我查了一下,应该是TF的原因,但这部分我还不太懂,看到有…

云计算【第一阶段(28)】DNS域名解析服务

一、DNS解析的定义与作用 1.1、DNS解析的定义 DNS解析(Domain Name System Resolution)是互联网服务中的一个核心环节,它负责将用户容易记住的域名转换成网络设备能够识别和使用的IP地址。一般来讲域名比 IP 地址更加的有含义、也更容易记住…

2024世界人工智能大会:deepin引领AI与操作系统融合新时代

内容来源:deepin(深度)社区 7月4日,WAIC 2024在上海拉开帷幕。大会围绕核心技术、智能终端、应用赋能三大板块,聚焦大模型、算力、机器人、自动驾驶等重点领域,集中展示一批“人工智能”创新应用最新成果。…

【web前端HTML+CSS+JS】--- JS学习笔记03

一、JS介绍 可以在前端页面上进行逻辑处理,来解决表单的验证等问题,提升效率,直接在前端提示问题,减少服务器压力 应用1:可以做静态验证和动态验证(进行异步请求) 应用2:可以解析后…

monad理解

每个学习monad的人都要写一份自己理解的monad。然后还是包括自己没人能看到自己在写啥,而且大部分写的还是错误的。 距离学习monad有接近2周了,已经挺模糊了。 monad我理解有两个基本作用: 1. 能够对全部的返回值做链式调用。只能封装成mona…

学习数据库2

在数据库中创建一个表student,用于存储学生信息 查看建表结果 向student表中添加一条新记录 记录中id字段的值为1,name字段的值为"monkey",grade字段的值为98.5 并查看结果 向student表中添加多条新记录 2,"bob"…

鸿蒙开发小案例(名片管理))

鸿蒙开发小案例(名片管理) 1、页面效果1.1 初始页面1.2 点击名片展开1.3 点击收藏1.4 点击编辑按钮 2、实现代码2.1 DataModel.ets2.2 RandomUtil.ets2.3 ContactList.ets 1、页面效果 1.1 初始页面 1.2 点击名片展开 1.3 点击收藏 1.4 点击编辑按钮 2、…

百度、谷歌、必应收录个人博客网站

主要是给各个搜索引擎提交你的sitemap文件,让别人能搜到你博客的内容。 主题使用的Butterfly。 生成sitemap 安装自动生成sitemap插件。 npm install hexo-generator-sitemap --save npm install hexo-generator-baidu-sitemap --save在站点配置文件_config.yml…

【手撕数据结构】卸甲时/空间复杂度

目录 前言时间复杂度概念⼤O的渐进表⽰法小试牛刀 空间复杂度 前言 要想知道什么是空/时间复杂度,就得知道什么是数据结构。 这得分两层来理解。我们生活中处处存在数据,什么抖音热点上的国际大事,什么懂的都懂的雍正卸甲等等一系列我们用户看得到的&a…

鸿蒙语言基础类库:【@ohos.url (URL字符串解析)】

URL字符串解析 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 导入…

【K8s】专题六(5):Kubernetes 稳定性之重启策略、滚动更新策略

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、重启策略 1、基本介绍 2、资源清单(示例) 二、滚动更新策略 …

Vue框架引入

vue简介 1.1.vue是什么?Vue官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ vue是一套构建用户界面的渐进式javascript框架 构建用户界面:将我们手里拿到的数据通过某种办法变成用户可以看见的界面前端工程师的职责:就是在合适的时候发出合适的请求,然后…

展开说说:Android服务之bindService解析

前面两篇文章我们分别总结了Android四种Service的基本使用以及源码层面总结一下startService的执行过程,本篇继续从源码层面总结bindService的执行过程。 本文依然按着是什么?有什么?怎么用?啥原理?的步骤来分析。 b…

Splunk Enterprise 任意文件读取漏洞(CVE-2024-36991)

文章目录 前言漏洞描述影响版本漏洞复现POC批量检测-nuclei脚本 修复建议 前言 Splunk Enterprise 是一款强大的机器数据管理和分析平台,能够实时收集、索引、搜索、分析和可视化来自各种数据源的日志和数据,帮助企业提升运营效率、增强安全性和优化业务…

数据库作业3

DELETE FROM student WHERE grade IS NULL; 一、数据库操作部分 1. 向 student 表中添加一条新记录: INSERT INTO student (id, name, grade) VALUES (1, monkey, 98.5); 2. 向 student 表中添加多条新记录: INSERT INTO student (id, name, grade) V…

【MYSQL】如何解决 bin log 与 redo log 的一致性问题

该问题问的其实就是redo log 的两阶段提交 为什么说redo log 具有崩溃恢复的能力 MySQL Server 层拥有的 bin log 只能用于归档,不足以实现崩溃恢复(crash-safe),需要借助 InnoDB 引擎的 redo log 才能拥有崩溃恢复的能力。所谓崩…