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

2024-05-07 20:28

本文主要是介绍一文带你了解 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 多平台发布

这篇关于一文带你了解 Oracle 23ai 新特性 Vector 的基础用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968308

相关文章

Oracle迁移PostgreSQL隐式类型转换配置指南

《Oracle迁移PostgreSQL隐式类型转换配置指南》Oracle迁移PostgreSQL时因类型差异易引发错误,需通过显式/隐式类型转换、转换关系管理及冲突处理解决,并配合验证测试确保数据一致... 目录一、问题背景二、解决方案1. 显式类型转换2. 隐式转换配置三、维护操作1. 转换关系管理2.

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引