一文带你了解 Oracle 23ai 新特性 Vector 的基础用法

alt

Oracle Database 23ai 来了,虽然目前只是云上可商用,但是 OP 有 FREE 版本可以进行开发。

本文将介绍 Oracle 23ai 的新特性之一: AI 向量搜索,的部分内容。

向量数据类型

23ai 新增向量数据类型,可以用于表示一系列的数值,这些数值可以代表不同的含义,比如在几何学中代表点的坐标,在机器学习中代表特征向量等。

示例:

创建一张订单表,并使用 VECTOR 字段类型。

-- vector data type
CREATE TABLE orders 
(order_id INT, order_vector VECTOR);

查看表定义:

SQL> select dbms_metadata.get_ddl('TABLE','ORDERS');

DBMS_METADATA.GET_DDL('TABLE','ORDERS')
--------------------------------------------------------------------------------

  CREATE TABLE "SYS"."ORDERS"
   (    "ORDER_ID" NUMBER(*,0),
        "ORDER_VECTOR" VE

这里被截断了,换个窗口查看。

alt

插入数据:

insert into orders values (1'[1, 2]'), (2'[2, 2]'), (3'[3, 3]');

查看数据:

SELECT * FROM ORDERS;
SQL> SELECT * FROM ORDERS;

   ORDER_ID ORDER_VECTOR
___________ ______________________ 
          1 [1.0E+000,2.0E+000]    
          2 [2.0E+000,2.0E+000]    
          3 [3.0E+000,3.0E+000]    

向量内存池

向量内存池(Vector Memory Pool) 是在 SGA 中分配的内存,用于存储 HNSW (Hierarchical Navigable Small World) 向量索引和所有相关的元数据。它还用于加速倒置平面文件(IVF)索引的创建以及对具有IVF索引的基表的DML操作。

alt

可以通过如下命令修改向量内存池的大小。

ALTER SYSTEM SET vector_memory_size=1SCOPE=SPFILE;

show parameter vector_memory_size;

VECTOR_MEMORY_POOL 用于监视 向量内存池 的使用情况。

select CON_ID, POOL, ALLOC_BYTES/1024/1024 as ALLOC_BYTES_MB, 
USED_BYTES/1024/1024 as USED_BYTES_MB
from V$VECTOR_MEMORY_POOL order by 1,2;
alt

此外,启动数据库实例时,也可以看到向量内存区域的大小。

SQL> startup;
ORACLE instance started.
...
Vector Memory Area       1073741824 bytes

向量索引

向量索引是一类专门的索引数据结构,旨在使用高维向量加速相似度搜索。使用诸如聚集、分区和邻居图之类的技术来对表示相似项的向量进行分组,这大大减少了搜索空间,从而使搜索过程非常高效。

Oracle AI 向量搜索支持以下几种基于近似最近邻(ANN)搜索的向量索引方法:

  • 内存中的邻居图向量索引 (In-Memory Neighbor Graph Vector Index)
  • 邻居分区矢量索引 (Neighbor Partition Vector Index)

两者语法也有所区别:

-- INMEMORY NEIGHBOR GRAPH
CREATE VECTOR INDEX vector_index_name 
ON table_name ( vector_column )
GLOBAL ] ORGANIZATION INMEMORY NEIGHBOR GRAPH
WITH ] [ DISTANCE metric name ]
WITH TARGET ACCURACY percentage_value ]
PARAMETERS ( TYPE             
{ HNSW , { NEIGHBORS max_closest_vectors_connected 
  |  M max_closest_vectors_connected }         
  ,  EFCONSTRUCTION max_candidates_to_consider  
  |
  IVF , { NEIGHBOR PARTITIONS number_of_partitions 
  | SAMPLE_PER_PARTITION number_of_samples
  | MIN_VECTORS_PER_PARTITION min_number_of_vectors_per_partition }
}]
PARALLEL degree_of_parallelism ]


-- NEIGHBOR PARTITIONS
CREATE VECTOR INDEX <vector index name>
ON <table name> ( <vector column> )
[GLOBALORGANIZATION NEIGHBOR PARTITIONS
[WITH] [DISTANCE <metric name>]
[WITH TARGET ACCURACY <percentage value
[PARAMETERS ( TYPE IVF, { NEIGHBOR PARTITIONS <number of partitions> | SAMPLE_PER_PARTITION
    <number of samples> | MIN_VECTORS_PER_PARTITION <minimum number of vectors per partition>
})]]
[PARALLEL <degree of parallelism>];

示例:

在 ORDER 表的向量字段上创建索引。

CREATE VECTOR INDEX VIDX_ORDERS_1
ON orders ( order_vector )
ORGANIZATION INMEMORY NEIGHBOR GRAPH;

查看向量索引

Oracle Database 23ai 新增 Vector 系统视图,用于查看索引。

示例:

查看上面创建的索引 VIDX_ORDERS_1

SELECT IDX_NAME, IDX_PARAMS FROM VECSYS.VECTOR$INDEX;
alt

关于向量的参数

23ai 中新增 3 个向量相关参数,分别是:

  • vector_memory_size

初始化参数 VECTOR_MEMORY_SIZE 指定向量池的当前大小(在 CDB 级别)或 PDB 允许的最大向量池使用量(在 PDB 级别)。

  • vector_index_neighbor_graph_reload

初始化参数 VECTOR_INDEX_NEIGHBOR_GRAPH_RELOAD 会在实例重启后通过后台任务自动逐一加载 HNSW 索引。

  • vector_query_capture

初始化参数 VECTOR_QUERY_CAPTURE 用于启用和禁用查询向量的捕获。

alt

总结

关于 23ai 中 AI Vector Search 的基础知识,先介绍到这里,希望对你有所帮助。

往期回顾

  • Oracle 数据库全面升级为 23ai
  • MySQL 8.4.0 LTS 发布 (MySQL 第一个长期支持版本)

-- END --

alt

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布

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

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

相关文章

【LeetCode刷题】875. 爱吃香蕉的珂珂

1. 题目链接 875. 爱吃香蕉的珂珂 2. 题目描述 3. 解题方法 简单的用我自己的理解来解释一下这道题的意思。 所以也就是说找到一个速度k&#xff0c;看还有没有比k更小的速度能吃完数组中的香蕉&#xff0c;如果有则继续寻找&#xff0c;没有则是k这个速度。就好比上面的解释…

成人职场英语口语柯桥外语培训之Big deal不是“大事”!别再翻译错啦!

关于deal&#xff0c; 其实有很多容易被人误解的表达&#xff0c; 小编今天就来给大家一一盘点~ 1, deal n. deal 作名词的时候意思是“交易&#xff1b;买卖”。 ❖ She got a new car for $1000! That was really a good deal! 她一千美金买了辆车&#xff01;真是158575…

图片编辑工具-Gimp

一、前言 GIMP&#xff08;GNU Image Manipulation Program&#xff09;是一款免费开源的图像编辑软件&#xff0c;具有功能强大和跨平台的特性。 GIMP作为一个图像编辑器&#xff0c;它提供了广泛的图像处理功能&#xff0c;包括但不限于照片修饰、图像合成以及创建艺术作品…

新的循环体和define

目录 do while讲解 练习&#xff1a; 结果&#xff1a; 分析&#xff1a; 定义&#xff1a;宏&#xff08;define&#xff09; 练习&#xff1a; 结果&#xff1a; 分析&#xff1a; define的优缺点 优点&#xff1a; 缺点&#xff1a; 作业&#xff1a; 大家假期…

搭建父模块和工具子模块

第一章 项目父模块搭建 1.1 nancal-idsa 作为所有工程的父工程&#xff0c;用于管理项目的所有依赖版本。 1.2 指定 pom 类型模块&#xff0c;删除 src 目录&#xff0c;点击Reload project 1.3 添加依赖 pom.xml <parent> <groupId>org.springframework.…

很快就可以试用Domino 15了

大家好&#xff0c;才是真的好。 前几天在比利时的安普卫特举办的Engage2024大会已经结束&#xff0c;流出的现场照片很多&#xff0c;主要是会议场地照片很多&#xff0c;说是令人震撼&#xff1b;可惜这次一手的PPT和会议内容不多.是的&#xff0c;本来我也是在等与会者写的…

人脸识别开源算法库和开源数据库

目录 1. 人脸识别开源算法库 1.1 OpenCV人脸识别模块 1.2 Dlib人脸识别模块 1.3 SeetaFace6 1.4 DeepFace 1.5 InsightFace 2. 人脸识别开源数据库 2.1 CelebA 2.2 LFW 2.3 MegaFace 2.4 Glint360K 2.5 WebFace260M 人脸识别 (Face Recognition) 是一种基于人的面部…

2022 年全国职业院校技能大赛高职组云计算赛项试卷(私有云)

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包…

代码随想录刷题随记30-贪心4

代码随想录刷题随记30-贪心4 860.柠檬水找零 leetcode链接 比较显然 class Solution {public boolean lemonadeChange(int[] bills) {int []accountnew int[3];for(int cur:bills){if(cur5)account[0];else if(cur10){account[0]--;if(account[0]<0)return false;account…

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…

【论文阅读】Fuzz4All: Universal Fuzzing with Large Language Models

文章目录 摘要一、介绍二、Fuzz4All的方法2.1、自动提示2.1.1、自动提示算法2.1.2、自动提示的例子2.1.3、与现有自动提示技术的比较 2.2、fuzzing循环2.2.1、模糊循环算法2.2.2、Oracle 三、实验设计3.1、实现3.2、被测系统和baseline3.3、实验设置以及评估指标 四、结果分析4…

iPhone查看本机号码只需要这3招,不再为号码忘记犯愁!

在日常生活中&#xff0c;我们经常需要使用手机号码进行各种通讯活动&#xff0c;但有时候会忘记自己的手机号码&#xff0c;让人感到非常尴尬。不过&#xff0c;如果您是iPhone用户&#xff0c;那么您可以放心了&#xff01;因为在iphone查看本机号码只需要简单的几个步骤&…

linux系统 虚拟机的安装详细步骤

window&#xff1a; (1) 个人&#xff1a;win7 win10 win11 winxp (2)服务器&#xff1a;windows server2003 2008 2013 linux&#xff1a; (1)centos7 5 6 8 (2)redhat (3)ubuntu (4)kali 什么是linux: 主要是基于命令来完成各种操作&#xff0c;类似于DO…

使用STM32F103C8T6与蓝牙模块HC-05连接实现手机蓝牙控制LED灯

导言: 在现代智能家居系统中,远程控制设备变得越来越普遍和重要。本文将介绍如何利用STM32F103C8T6单片机和蓝牙模块HC-05实现远程控制LED灯的功能。通过这个简单的项目,可以学会如何将嵌入式系统与蓝牙通信技术相结合,实现远程控制的应用。 目录 导言: 准备工作: 硬…

Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 前言 通过前三篇Sprin…

GNU Radio创建FFT、IFFT C++ OOT块

文章目录 前言一、GNU Radio官方FFT弊端二、创建自定义的 C OOT 块1、创建 OOT 模块2、创建 OOT 块3、修改 C 和 CMAKE 文件4、编译及安装 OOT 块 三、测试1、grc 图2、运行结果①、时域波形对比②、频谱图对比 四、资源自取 前言 GNU Radio 自带的 FFT 模块使用起来不是很方便…

RT-DETR-20240507周更说明|更新Inner-IoU、Focal-IoU、Focaler-IoU等数十种IoU计算方式

RT-DETR改进专栏|包含主干、模块、注意力、损失函数等改进 专栏介绍 本专栏包含模块、卷积、检测头、损失等深度学习前沿改进,目前已有改进点70&#xff01;每周更新。 20240507更新说明&#xff1a; ⭐⭐ 更新CIoU、DIoU、MDPIoU、GIoU、EIoU、SIoU、ShapeIou、PowerfulIoU、…

04-28 周日 FastAPI Post请求同时传递文件和普通参数

04-28 周日 FastAPI Post请求同时传递文件和普通参数 时间版本修改人描述04-28 周日V0.1宋全恒新建文档2024年5月6日14:20:05V1.0宋全恒完成文档的传递 简介 由于在重构FastBuild的时候&#xff0c;为了支持TLS是否启用&#xff0c;在接口中需要同时传递文件参数和其他参数&am…

【Vue3】Ref与Reactive

3.1【ref 创建&#xff1a;基本类型的响应式数据】 作用&#xff1a;定义响应式变量。语法&#xff1a;let xxx ref(初始值)。返回值&#xff1a;一个RefImpl的实例对象&#xff0c;简称ref对象或ref&#xff0c;ref对象的value属性是响应式的。注意点&#xff1a; JS中操作数…