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

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 数据类型的应用前景将越来越广阔。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

集成sa-token前后端分离部署配置corsFliter解决跨域失效的真正原因

文章目录 1.前言2.问题复现3.解决方法3.1 方式一&#xff1a;后端修改CorsFilter源码3.2 方式二&#xff1a;前端禁用或移除浏览器referrer-policy引用者策略 4.总结 1.前言 缘由请参看下面这篇文章&#xff1a;sa-token前后端分离解决跨域的正确姿势 https://mp.weixin.qq.co…

【算法】二叉树-迭代法实现前后中序遍历

递归的实现就是:每一次递归调用都会把函数的局部变量&#xff0c;参数值和返回地址等压入调用栈中&#xff0c;然后递归返回的时候&#xff0c;从栈顶弹出上一次递归的各项参数&#xff0c;这就是递归为什么可以返回上一层位置的原因 可以用栈实现二叉树的前中后序遍历 1. 前序…

base SAS programming学习笔记(functions)

1.SAS function 分类&#xff1a; 计算描述统计量的函数&#xff1a; 举例如下&#xff1a;avgscoremean(exam1,exam2,exam3) 2.function 基本格式 function-name(argument1,argument2,......<argumentn>&#xff09; argument可以如下&#xff1a;变量名&#xff1b;常…

redis学习(009 实战:黑马点评:缓存穿透、缓存雪崩 、缓存击穿)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第40p-第p45的内容 文章目录 缓存穿透解决方案缓存空对象布隆过滤 解决方案实现缓存穿透总结 缓存雪崩解决方案 缓存击穿解决方…

Elasticsearch 更新指定字段

Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作&#xff0c;索引已经建过了&#xff0c;本文主要讲Elasticsearch更新指定字段语句&#xff0c;下面开始写更新语句执行更新啦&#xff01; 查询数据 查…

小阿轩yx-NoSQL 之 Redis 配置与优化

小阿轩yx-NoSQL 之 Redis 配置与优化 Redis 数据库介绍 是一个非关系型数据库 关系数据库与非关系型数据库 按照数据库结构划分的 关系型数据库 是一个结构化的数据库&#xff0c;创建在关系模型基础上&#xff0c;一般面向于记录借助集合代数等数学概念和方法处理数据库…

边缘计算网关:一种高效安全的工业物联网解决方案-天拓四方

在工业物联网&#xff08;IIoT&#xff09;领域&#xff0c;数据处理和实时响应的需求日益增长&#xff0c;尤其是在智能制造、远程监控和预测性维护等场景中。边缘计算网关作为一种前端数据处理和决策设备&#xff0c;正逐渐成为满足这些需求的理想解决方案。 在一个大型制造…

音频语言学习领域数据集现状、分类及评估

Audio Language Learning (Audio-Text Learning) 是一个新兴的研究领域&#xff0c;专注于处理、理解和描述声音。它的发展动力是机器学习技术的进步以及越来越多地将声音与其相应的文本描述相结合的数据集的可用性。 Audio Language Models (ALMs) 是这个领域的关键技术&#…

部署大语言模型并对话

在阿里云的https://developer.aliyun.com/adc/scenario/b105013328814fe995c0f091d708d67d 选择函数计算 设置服务器配置 复制公网地址 这个地址不能直接 在返回应用&#xff0c;创建应用LLM 对话页面 Open WebUI 点击下面的创建应用 部署完成后访问域名 打开访问地址

欧科云链研究院:坎昆升级后,Layer2变得更好了吗?

本文由欧科云链研究院OKG Research联合PANews出品&#xff1a;以数据为导向&#xff0c;洞察真实的链上世界。 作者&#xff5c;Jason Jiang, OKG Research 坎昆升级后&#xff0c;以太坊L2的交易费用降低明显且吞吐量有所提升&#xff0c;但整体生态并没有迎来想象中的繁荣景…

0基础学会在亚马逊云科技AWS上利用SageMaker、PEFT和LoRA高效微调AI大语言模型(含具体教程和代码)

项目简介&#xff1a; 小李哥今天将继续介绍亚马逊云科技AWS云计算平台上的前沿前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS上的AI软甲开发最佳实践&#xff0c;并应用到自己的日常工作里。本次介绍的是如何在Amazon SageMaker上…

【漏洞复现】Splunk Enterprise for Windows 任意文件读取漏洞 CVE-2024-36991

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 Splunk Enterprise 是一款强大的机器数据管理和分析平台&#xff0c;广泛应用于企业中&#xff0c;用于实…

应用最优化方法及MATLAB实现——第3章代码实现

一、概述 在阅读最优方法及MATLAB实现后&#xff0c;想着将书中提供的代码自己手敲一遍&#xff0c;来提高自己对书中内容理解程度&#xff0c;巩固一下。 这部分内容主要针对第3章的内容&#xff0c;将其所有代码实现均手敲一遍&#xff0c;中间部分代码自己根据其公式有些许的…

百度安全大模型智能体实践入选信通院“安全守卫者计划”优秀案例

7月3日&#xff0c;由全球数字经济大会组委会主办&#xff0c;中国信息通信研究院&#xff08;以下简称中国信通院&#xff09;与中国通信标准化协会联合承办的2024全球数字经济大会“云和软件安全论坛暨第二届SecGo云和软件安全大会”在北京召开。本届论坛聚焦云和软件安全最新…

从基础到进阶:无线局域网技术解析

在局域网刚刚问世后的一段时间内&#xff0c;无线局域网的发展比较缓慢&#xff0c;其原因是价格贵、数据传输速率低、安全性较差。但自20世纪80年代末以来&#xff0c;由于人们工作和生活节奏的加快&#xff0c;以及移动通信技术的飞速发展&#xff0c;无线局域网逐步进入市场…

今年2024,而那一年是1984

那一年&#xff0c;是1984 对于经历了改革开放洪流的国人来说&#xff0c;1984年似乎没有什么特别。 可是这一年&#xff0c;又确确实实非同寻常&#xff0c;许多后来的巨大变迁&#xff0c;在这一年埋下了伏笔…… 文学创作: 余华、莫言等作家在这一年迎来了自己的创作高峰…

学习通er图和项目思路

ER图 项目构思&#xff1a; 用户功能&#xff1a; 主要功能逻辑&#xff1a;

Web3知识图谱,一篇读完

这张图展示了区块链生态系统的架构和主要组件。以下是对图中内容的概括总结&#xff1a; 基础层&#xff1a; 底层基础设施&#xff1a;包括光纤网络、P2P网络、非对称加密、哈希算法、默克尔树和随机数生成。共识机制&#xff1a; PoW&#xff08;工作量证明&#xff09;: 比特…

Elasticsearch:介绍 retrievers - 搜索一切事物

作者&#xff1a;来自 Elastic Jeff Vestal, Jack Conradson 在 8.14 中&#xff0c;Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率&#xff0c;以及它们如何增强你的搜索操作。 检索器是 Elasticsearc…

MyBatis框架学习笔记(三):MyBatis重要文件详解:配置文件与映射文件

1 mybatis-config.xml-配置文件详解 1.1 说明 &#xff08;1&#xff09;mybatis 的核心配置文件(mybatis-config.xml)&#xff0c;比如配置 jdbc 连接信息&#xff0c;注册 mapper 等等都是在这个文件中进行配置,我们需要对这个配置文件有详细的了解 &#xff08;2&#x…