Oracle 23ai 中的重要新特性 VECTOR 数据类型

news2025/4/21 15:48:57

Oracle 23ai 中的 VECTOR 数据类型是 Oracle 数据库在 AI 领域的一个重要新特性,它允许用户以向量的形式存储数据,并在这些向量的基础上进行高效的搜索和分析。以下是对 Oracle 23ai VECTOR 数据类型的详细解析:

参考官方文档地址
https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/plsql-data-types.html#GUID-160C5139-EDBE-40BE-8DB4-1CA4E8A1CA46

一、基本概念

Oracle 23ai 中的 VECTOR 数据类型是一种用于表示一系列数值的数据类型,这些数值可以代表不同的含义,比如在几何学中代表点的坐标,在机器学习中代表特征向量等。通过向量化技术,可以将文档、图像、视频等非结构化数据转换为向量形式,进而利用这些向量进行高效的相似性搜索和分析。

二、主要特性

  • 集成性:VECTOR 数据类型完全集成在 SQL 和 PL/SQL 中,支持多种客户端和编程语言,并在 python-oracledb、node-oracledb、JDBC 和 ODP.NET 驱动程序中具有原生绑定功能。这种全面的支持提供了跨多个开发环境的无缝向量搜索功能。

  • 高效性:Oracle 23ai 提供了高性能的向量索引,如内存中的邻居图向量索引(In-Memory Neighbor Graph Vector Index)和邻居分区矢量索引(Neighbor Partition Vector Index),这些索引技术能够显著加快向量的搜索速度,提高查询效率。

  • 灵活性:用户可以根据需要自定义向量的维度和精度,以适应不同的应用场景和数据类型。同时,Oracle 23ai 还支持在 JSON 类型中嵌入 VECTOR 数据类型,使得结构化数据和非结构化数据的处理更加灵活。

  • 安全性:Oracle 23ai 提供了强大的安全性保障,包括透明数据加密、Key Vault、Audit Vault 等功能,确保向量数据的安全性和隐私性。

三、应用场景

Oracle 23ai 的 VECTOR 数据类型在多个领域都有广泛的应用前景,包括但不限于:

  • 文档搜索:在文档数据库中,用户可以利用 VECTOR 数据类型对文档进行向量化处理,并通过相似性搜索快速找到相关的文档。
  • 图像识别:在图像处理领域,VECTOR 数据类型可以用于表示图像的特征向量,并通过向量搜索实现图像的快速识别和分类。
  • 推荐系统:在电商、社交媒体等平台上,推荐系统可以利用 VECTOR 数据类型对用户和商品进行向量化处理,并通过计算向量之间的相似度来推荐相关的商品或内容。
  • 生物信息学:在生物信息学领域,VECTOR 数据类型可以用于表示基因序列、蛋白质结构等生物数据的特征向量,并通过向量搜索进行基因相似性分析、疾病预测等研究。

四、使用示例

以下是一个简单的使用示例,展示了如何在 Oracle 23ai 中创建包含 VECTOR 数据类型的表并插入数据:

4.1、简单的使用示例

CREATE TABLE t_orders (  
    order_id INT,  
    order_vector VECTOR  
);  
  
INSERT INTO t_orders VALUES (1, '[100, 200]'), (2, '[210, 220]'), (3, '[310, 330]');  
  
TESTUSER@FREEPDB1> SELECT * FROM t_orders;

  ORDER_ID ORDER_VECTOR
---------- ----------------------------------------------------------------------------------------------------
         1 [1.0E+002,2.0E+002]
         2 [2.1E+002,2.2E+002]
         3 [3.1E+002,3.3E+002]

在这个示例中,我们首先创建了一个名为 orders 的表,该表包含两个字段:order_id(订单ID)和 order_vector(订单向量)。然后,我们向表中插入了三条记录,每条记录的 order_vector 字段都包含了一个二维向量。最后,我们通过 SELECT 语句查询了表中的所有记录。

4.2、将VECTOR数据类型与PL/SQL一起使用

此示例的第一部分演示了如何将向量选择到PL/SQL向量变量中,在本例中,在向量列上使用%TYPE。

CREATE TABLE t_VectorTable (embedding VECTOR(3, float32), id NUMBER);
INSERT INTO t_VectorTable VALUES ('[1.11, 2.22, 3.33]', 1);
INSERT INTO t_VectorTable VALUES ('[4.44, 5.55, 6.66]', 2);
INSERT INTO t_VectorTable VALUES ('[7.77, 8.88, 9.99]', 3);

SET SERVEROUTPUT ON;

DECLARE
  v_embedding t_VectorTable.embedding%TYPE;
BEGIN
  SELECT embedding INTO v_embedding FROM t_VectorTable WHERE id=3;
  DBMS_OUTPUT.PUT_LINE('Embedding is ' || FROM_VECTOR(v_embedding));
END;
/

Result List

Embedding is [7.76999998E+000,8.88000011E+000,9.98999977E+000]

PL/SQL procedure successfully completed.

4.2、匿名块使用带有批量获取的游标将VectorTable的向量捕获到表%ROWTYPE

下面的匿名块使用带有批量获取的游标将t_VectorTable的向量和id数据捕获到表%ROWTYPE索引表中。
The following anonymous block uses a cursor with bulk fetch to capture the VectorTable’s vector and id data into a table%ROWTYPE index table.

DECLARE
  TYPE vecTabT IS TABLE OF t_VectorTable%ROWTYPE INDEX BY BINARY_INTEGER;
  v_vecTabT vecTabT;
  CURSOR cur IS SELECT * FROM t_VectorTable;
BEGIN
  OPEN cur ;
  FETCH cur  BULK COLLECT INTO v_vecTabT;
  CLOSE cur ;

  -- display the contents of the vector index table
  FOR i IN 1 .. v_vecTabT.LAST LOOP
    DBMS_OUTPUT.PUT_LINE('Embedding ID ' || v_vecTabT(i).id || ': ' ||
            FROM_VECTOR(v_vecTabT(i).embedding));
  END LOOP;
END;
/

在这里插入图片描述

4.3、将VECTOR数据类型与PL/SQL触发器一起使用

CREATE TABLE t_vecLogTable 
(
embedding VECTOR(3, float32), 
describe VARCHAR2(25), 
seq NUMBER
);

CREATE SEQUENCE seq_vecTrgSeq;

CREATE OR REPLACE TRIGGER tr_VectorTable 
BEFORE UPDATE ON t_VectorTable
FOR EACH ROW
BEGIN
  INSERT INTO t_vecLogTable VALUES (:old.embedding, 'OLD.VECTRG',seq_vecTrgSeq.NEXTVAL);
  INSERT INTO t_vecLogTable VALUES (:new.embedding, 'NEW.VECTRG',seq_vecTrgSeq.NEXTVAL);
END;
/

UPDATE t_VectorTable SET embedding='[2.88, 4.99, 8.66]' WHERE id=2;
COMMIT;

SELECT * FROM t_vecLogTable  ORDER BY seq;

Result List:

TESTUSER@FREEPDB1> col DESCRIBE format aa30
TESTUSER@FREEPDB1> col DESCRIBE format a30
TESTUSER@FREEPDB1> SELECT * FROM t_vecLogTable  ORDER BY seq;

EMBEDDING                                                    DESCRIBE                              SEQ
------------------------------------------------------------ ------------------------------ ----------
[4.44000006E+000,5.55000019E+000,6.65999985E+000]            OLD.VECTRG                              1
[2.88000011E+000,4.98999977E+000,8.65999985E+000]            NEW.VECTRG                              2

4.4、将向量距离函数与PL/SQL一起使用

此示例演示了PL/SQL对向量距离函数的支持。

DECLARE
  v1 VECTOR := TO_VECTOR('[1, 2, 3]');
  v2 VECTOR := TO_VECTOR('[4, 5, 6]');
  man_dist NUMBER;
  euc_dist NUMBER;
  cos_dist NUMBER;
  inn_dist NUMBER;
  ham_dist NUMBER;
  dot_dist NUMBER;
BEGIN
  man_dist := L1_DISTANCE(v1, v2); --Manhattan Distance
  euc_dist := L2_DISTANCE(v1, v2); --Euclidean Distance
  cos_dist := COSINE_DISTANCE(v1, v2); --Cosine Distance
  inn_dist := INNER_PRODUCT(v1, v2); --Inner Product
    
  --The Hamming Distance has no standalone function in PL/SQL
  ham_dist := VECTOR_DISTANCE(v1, v2, HAMMING);

  --The Negative Inner (Dot) Product has no standalone function in PL/SQL
  dot_dist := VECTOR_DISTANCE(v1, v2, DOT);

  DBMS_OUTPUT.PUT_LINE('The Manhattan distance is: ' || man_dist);
  DBMS_OUTPUT.PUT_LINE('The Euclidean distance is: ' || euc_dist);
  DBMS_OUTPUT.PUT_LINE('The Cosine distance is: ' || cos_dist);
  DBMS_OUTPUT.PUT_LINE('The Inner Product is: ' || inn_dist);
  DBMS_OUTPUT.PUT_LINE('The Hamming distance is: ' || ham_dist);
  DBMS_OUTPUT.PUT_LINE('The Dot Product is: ' || dot_dist);
END;
/

在这里插入图片描述

4.5、将短距运算符与PL/SQL一起使用

请注意,由于PL/SQL不支持向量的隐式转换,因此必须在变量赋值之前或在同一行中构造向量。这与PL/SQL中的其他距离函数的行为相同。
Note that because PL/SQL does not support implicit conversion with vectors, you must construct the vectors before the variable assignment or in the same line. This is the same behavior as the other distance functions in PL/SQL.

DECLARE
  v1 VECTOR := VECTOR('[1, 2, 3]');
  v2 VECTOR := VECTOR('[4, 5, 6]');
  cos_dist BINARY_DOUBLE;
  euc_dist BINARY_DOUBLE;
  dot_dist BINARY_DOUBLE;
BEGIN
  cos_dist := v1 <=> v2;
  euc_dist := v1 <-> v2;
  dot_dist := v1 <#> v2;

  DBMS_OUTPUT.PUT_LINE(cos_dist);
  DBMS_OUTPUT.PUT_LINE(euc_dist);
  DBMS_OUTPUT.PUT_LINE(dot_dist);
END;
/

在这里插入图片描述

五、总结

Oracle 23ai 的 VECTOR 数据类型是 Oracle 数据库在 AI 领域的一个重要创新,它为用户提供了强大的向量化数据处理能力,使得用户能够更加方便地进行相似性搜索和分析。随着 AI 技术的不断发展,VECTOR 数据类型的应用前景将越来越广阔。

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

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

相关文章

Python机器学习推理工程化落地步骤指南

目录 一、引言 二、数据准备 2.1 数据收集 2.2 数据清洗 2.3 特征工程 2.4 数据分割 三、模型训练 3.1 选择算法 3.2 训练模型 3.3 模型评估 3.4 模型调优 四、模型部署 4.1 模型序列化 4.2 构建推理服务 4.3 部署与监控 五、总结 在当今科技飞速发展的时代…

【SVN的使用-通过xCode使用SVN-SVN的目录结构 Objective-C语言】

一、接下来,我们来通过xcode使用SVN啊 1.我先把小明这个目录下,wechat这个文件夹都删了, 我现在小明新入职了,但是呢,我现在不喜欢用命令行,我也不喜欢用Corner Stone,我要用xcode, 作为小明,我入职以后,第一件事儿,要把代码checkout下来, 那首先呢,打开你的xc…

从3D扫描到CAD模型【逆向工程】

有时&#xff0c;你无法访问零件原始生产中的原始设计文档。逆向工程&#xff08;reverse engineering&#xff09;使你能够分析物理零件并探索其最初的制造方式&#xff0c;以复制、创建变体或改进设计。目标是最终创建一个用于制造的新 CAD 模型。 虽然逆向工程的概念非常简…

Linux--安装VMware步骤

安装VMware VMware Desktop Hypervisors for Windows, Linux, and Mac 复制链接打开浏览器下载即可 从官网下载软件&#xff0c;完成后为确保后续正常使用&#xff0c;需要检查虚拟网卡是否安装完成 检查虚拟网卡的安装步骤 Windows--设置--高级设置--网络适配器--看是否有显…

录屏软件免费推荐,拥有这4款,不花一分钱

在这个充满创意与活力的数字时代&#xff0c;录屏软件早已成为我们探索世界、分享生活的必备神器。但市面上却存在很多收费的录屏软件&#xff0c;让人望而却步。那么有没有一些录屏软件免费帮助我们轻松开启录影人生&#xff0c;尽情展现创意与才华呢&#xff1f; 本文就将带…

【错题集-编程题】kotori 和 n 皇后(哈希表)

牛客对应题目链接&#xff1a;kotori和n皇后 (nowcoder.com) 一、分析题目 算法思路&#xff1a;使用哈希表标记行列以及两个对角线。 注意&#xff1a;输出的时候提前判断⼀下。 二、代码 //值得学习的代码 #include <iostream> #include <unordered_set>using n…

旷野之间14 - 常见的AI面试题解答

​​​​​ 1. 什么是大型语言模型(LLM)以及它如何工作? 大型语言模型 (LLM),例如 GPT-3 或 BERT,是具有理解和生成类似人类的文本能力的高级机器学习模型。 核心组件和操作: 编码器-解码器框架:用于 GPT-3(单向)和 BERT(双向)等模型。Transformer 架构:利用具有…

N-(4-Azido-2-nitrophenyl)-N‘‘-biotinylnorspemidine

​一、基本信息 常用名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine 英文名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine CAS号&#xff1a;786609-83-4 分子式&#xff1a;C22H33N9O4S 分子量&#xff1a;519.62 二、结构特点 该化…

【深海王国】小学生都能玩的语音模块?ASRPRO打造你的第一个智能语音助手(9)

Hi~ (o^^o)♪, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω) 今天大都督继续为大家带来系列——小学生都能玩的语音模块&#xff0c;帮你一周内快速学会语音模块的使用方式&#xff0c;打造一个可用于智能家居、物联网领域的语音助…

如何下载git上的代码到本地

第一步&#xff1a;第一步&#xff1a;进入所在项目&#xff0c;右击打开"Git Bash Here" 第二步&#xff1a;git clone https://gitee.com/xxx/xxxx #文件地址链接 完结&#xff1a;

TCP协议双向网络通讯---Python实现

本篇文章是博主在人工智能、网络通讯等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在Python…

基于uni-app与图鸟UI的知识付费小程序模板

一、项目概述 在知识经济蓬勃发展的背景下&#xff0c;移动互联网成为知识传播与消费的重要渠道。本项目旨在利用前沿的前端技术栈——uni-app及高效UI框架图鸟UI&#xff0c;打造一款集多功能于一体的、面向广大求知者的知识付费平台移动端模板。该模板旨在简化开发流程&…

《大明混一图》: 令人叹为观止的古代世界地图

关注我们 - 数字罗塞塔计划 - 《大明混一图》是我国目前保存尺寸最大、最完整、年代最久远&#xff0c;且由中国人自己绘制的世界地图&#xff0c;2003年10月被列入《中国档案文献遗产名录》&#xff0c;现保存于中国第一历史档案馆。据学者们研究&#xff0c;这幅地图大约是…

【SD教程】全网最详细的AI绘画提示词语法讲解!(附提示词插件包)

AI绘画提示词如何写&#xff1f;对于入门的小伙伴来说这是一个大问题&#xff0c;提示词写的好&#xff0c;才能有高质量的作品&#xff0c;那今天给大家详细讲解一下&#xff0c;建议点赞收藏&#xff01; 文末附提示词插件 一、SD提示词基础 AI绘画提示词基本规则 1、提示…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《计及负荷时空特性的高速公路链式微网光-储-充容量优化配置方法》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

政企单位光纤资源高效管理与优化策略

引言 随着信息技术的飞速发展&#xff0c;政企单位对于通信基础设施的管理要求日益提高。然而&#xff0c;传统的管理模式&#xff0c;如Excel表格记录和纸质审批流程&#xff0c;已难以满足当前复杂多变的业务需求。在此背景下&#xff0c;我们实施了光纤管理的数字化转型项目…

仕考网:公务员如何备考申论

在备战公务员考试的申论部分时&#xff0c;掌握一定的技巧&#xff0c;遵循特定的步骤是至关重要的。以下是一些备考策略&#xff0c;希望能帮助到大家&#xff1a; 1. 掌握考试大纲和命题趋势 在考试大纲中明确了题目的类型和可能涉及的主题范围&#xff0c;考生可以聚焦到关…

免费录制视频的软件,推荐3款,总有一款适合你!

在数字化时代&#xff0c;视频录制与分享已成为日常生活和工作中的重要组成部分。无论是录制游戏过程、教程讲解还是网络会议&#xff0c;一款好用的录制视频软件能够帮助我们更便捷地实现这个目标。然而&#xff0c;许多录制视频的软件都是收费的&#xff0c;这对于很多人来说…

【操作系统】手把手带你搭建DNS服务器!

DNS服务器 DNS服务器指域名系统或者域名服务。域名系统为Internet上的主机分配域名地址和IP地址&#xff0c;用户使用域名地址&#xff0c;该系统就会自动把域名地址转为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器&#xff0c;通过DN…

在创建jsp项目中解决无法连接数据库以及junit问题

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…