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.pswp.cn/diannao/43107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43107.shtml
英文地址,請注明出處:http://en.pswp.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 才能擁有崩潰恢復的能力。所謂崩…