数据库管理151期 2024-02-18
- 数据库管理-第151期 Oracle Vector DB & AI-03(20240218)
- 1 向量数据库应用场景
- 2 Oracle Vector DB
- 3 Vector数据类型
- 4 Vector运算
- 5 Vector DML
- 插入向量
- 获取向量
- 总结
数据库管理-第151期 Oracle Vector DB & AI-03(20240218)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Associate: Database(Oracle与MySQL)
网思科技 DBA总监
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家,ITPUB认证专家,OCM讲师
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭。
春节假期卷了2天,后面还是选择不卷了,开开心心的玩耍着把假期过完。这里在春节假期后的第一个工作日也祝大家开工大吉,同时又是悲催的6天班。
1 向量数据库应用场景
前面我们讲过向量数据库主要是用来存放AI机器学习向量信息,同时根据由输入内容转化成的向量信息与原有向量库内容进行匹配,得到最接近的结果进行反馈。而使用专用向量数据库最大的问题就是只能存放向量信息(包含其ID),进一步查询匹配需要去其他数据库查询关联信息,同时不能很好的update原有数据,很难对已有向量进行调整,到底一定程度后大概率需要全量更新向量库信息;而类似于PGVector这种基于传统数据库就目前的发展情况而言在较大压力面前又不能做到很好的性能(当然一般使用是没有问题的,性能问题也不是我说的)。
2 Oracle Vector DB
在2023年的OCW(Oracle CloudWorld,即以前的OOW,Oracle OpenWorld),甲骨文也在其Oracle Database 23c中引入了Vector DB、AI Vector Search等一组新功能设计:
- 简单易用且易于理解
- 新的SQL Embedding函数用于生成向量数据
- 新的VECTOR数据类型用于存储向量数据
- 新的SQL语法和函数轻松表达相似性搜索
- 新的近似搜索索引经过打包和调优以实现高性能和高质量搜索
- 在查询中与相关客户和产品的业务数据一起执行向量搜索
- 在同一数据库中处理向量和其他工作负载
这算是Oracle融合数据库的又一进步。
3 Vector数据类型
为了存放向量信息,Oracle引入了Vector数据类型,其底层采用BLOB存储以实现长期可扩展性。
VECTOR (<optional NUM of dimensions>, <optional format for dimension values>)
维度值的类型可以是FLOAT32, FLOAT64, 或者 INT8
create table my_images (id number, image BLOB, img_vec VECTOR(768, FLOAT32))
由于维度值和维度类型是可选配置内容,因此Vector数据类型支持灵活的维度数量和格式类型:
create table my_images (id number, image BLOB, img_vec VECTOR);
嵌入模型随着技术的发展而变化,但架构可以保持不变。
4 Vector运算
- VECTOR_DISTANCE(VECTOR1, VECTOR2, )
使用欧几里得、余弦相似度、点积等指标(metric)来比较向量的相似度 - VECTOR_AVG(VECTOR)
向量平均值。例如,计算一个句子中所有单词的平均向量,作为该句子的向量 - VECTOR_DIMENSIONS_COUNT(VECTOR)
计算向量的维数 - VECTOR_NORM(VECTOR)
计算向量的欧几里得范数/长度 - 支持更多向量运算……
5 Vector DML
插入向量
TO_VECTOR( ) 将表示向量维度数组的字符串转换为 VECTOR:
create table vec_tab(id number, dataVec VECTOR(3, 'FLOAT32'));
insert into vec_tab values (1, TO_VECTOR('[1.1, 2.2, 3.3]');
update vec_tab set dataVec=TO_VECTOR('[4.4, 2.2, 3.3]') where id=1;
Javascript和Python的23c客户端支持VECTOR类型,因此可以直接插入Vector。
获取向量
FROM_VECTOR( ) 将向量转换为 CLOB/VARCHAR – 23c 之前的客户端的默认方式:
select dataVec from tab-> select FROM_VECTOR(dataVec) from tab; -> '[1.1, 2.2, 3.3]'
Javascript和Python的23c客户端支持VECTOR类型,因此可以直接读取向量数据。
同传统数据类型一样支持DML操作也意味着Oracle Vector DB可以对已有向量数据进行非常方便的调整,以增强向量库信息准确度与及时性;同时可以根据AI机器学习程度对自身的向量信息进行调整,以实现更加强的的AI功能。
总结
本期简单介绍了一下Oracle Vector BD的基本概念和一些简单功能与操作。
老规矩,知道写了些啥。