数据库管理-第157期 Oracle Vector DB & AI-08(20240301)

数据库管理157期 2024-03-01

  • [数据库管理-第157期 Oracle Vector DB & AI-08(20240301)](#数据库管理-第157期 Oracle Vector DB & AI-08(20240301))
    • [1 创建示例向量](#1 创建示例向量)
    • [2 查找最近向量](#2 查找最近向量)
    • [3 基于向量簇组的最近向量查询](#3 基于向量簇组的最近向量查询)
    • 总结

数据库管理-第157期 Oracle Vector DB & AI-08(20240301)

作者:胖头鱼的鱼缸(尹海文)

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月29日来到了3月1日,挺好玩的。

本期内容,模拟在一个二维平面上进行近似查询。

1 创建示例向量

按照下图内容,以X和Y轴创建对应的向量信息:

sql 复制代码
CREATE TABLE IF NOT EXISTS vt1
         (id   NUMBER NOT NULL,
          v    VECTOR(2, FLOAT32),
               PRIMARY KEY (id)
         );

DESC vt1;
sql 复制代码
INSERT INTO vt1 VALUES (1, '[3, 3]'),  (2, '[5, 3]'),  (3, '[7, 3]'),
                       (4, '[3, 5]'),  (5, '[5, 5]'),  (6, '[7, 5]'),
                       (7, '[3, 7]'),  (8, '[5, 7]'),  (9, '[7, 7]');

COMMIT;

SELECT * FROM vt1 ORDER BY id;

2 查找最近向量

1.以下图方式,查找q点(0,5)最近的3个向量点:

从图中实际情况来看最近的为2,1,3或者2,3,1。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY  vector_distance(vector('[5, 0]'), v)
FETCH FIRST 3 ROWS ONLY;

2.以下图方式,查找q点(3,0)最近的3个向量点:

从图中实际情况来看最近的为1,2,3。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY  vector_distance(vector('[3, 0]'), v)
FETCH FIRST 3 ROWS ONLY;

3.以下图方式,查找q点(3,9)最近的3个向量点:

从图中实际情况来看最近的为7,8,4。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY  vector_distance(vector('[3, 9]'), v)
FETCH FIRST 3 ROWS ONLY;

4.以下图方式,查找q点(3.1,6.9)最近的4个向量点:

从图中实际情况来看最近的为7,4,8,5或者7,8,4,5。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY vector_distance(vector('[3.1, 6.9]'), v)
FETCH FIRST 4 ROWS ONLY;

3 基于向量簇组的最近向量查询

目前,vector_distance的结果依赖于两个内容:

  • 对于向量簇来说,查询向量所在的位置,以特定向量或坐标为中心,比如(5,5)
  • 结果集有多少行

然而,向量数据通常由一组向量簇组成,并且数据往往不是均匀分布的。也可能存在零个或多个数据簇。因此,向量簇往往表示相似数据的组。例如:地址、汽车类型、人名、报告或书籍等。

1.下面的示例有5个向量簇。因此我们会在vt1表中添加其他4组向量簇。这里你会发现一个向量簇中有负值(或坐标)。

sql 复制代码
INSERT INTO vt1 VALUES (21, '[9, -1]'),
                       (22, '[10, -1]'),
                       (23, '[11, -1]'),
                       (24, '[9, -3]'),
                       (25, '[10, -4]'),
                       (26, '[12, -3]') ;
INSERT INTO vt1 VALUES (31, '[13, 6]'),
                       (32, '[14, 7]'),
                       (33, '[14, 4]'),
                       (34, '[16, 6]') ;
INSERT INTO vt1 VALUES (41, '[0, 7]'),
                       (42, '[1, 7]'),
                       (43, '[1, 6]'),
                       (44, '[0, 5]'),
                       (45, '[1, 5]') ;
INSERT INTO vt1 VALUES (51, '[5, 9]'),
                       (52, '[7, 9]'),
                       (53, '[6, 10]'),
                       (54, '[5, 11]'),
                       (55, '[7, 11]') ;

COMMIT ;

SELECT * FROM vt1;


2.以下图方式,查找q点(16,4)最近的3个向量点:

从图中实际情况来看,我们希望结果是3x。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY vector_distance(vector('[16, 4]'), v)
FETCH FIRST 3 ROWS ONLY;

3.以下图方式,查找q点(7,-5)最近的5个向量点:

从图中实际情况来看,我们希望结果是2x。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY vector_distance(vector('[7, -5]'), v)
FETCH FIRST 5 ROWS ONLY;

4.以下图方式,查找q点(6,10)最近的5个向量点:

从图中实际情况来看,我们希望结果是5x。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY vector_distance(vector('[6, 10]'), v)
FETCH FIRST 5 ROWS ONLY;

5.以下图方式,查找q点(6,8)最近的4个向量点:

从图中实际情况来看,我们希望结果是8,9,51,52。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY vector_distance(vector('[6, 8]'), v)
FETCH FIRST 4 ROWS ONLY;

6.以下图方式,查找q点(2.5,8.5)最近的4个向量点:

从图中实际情况来看,我们希望结果是x,4x,5x。

sql 复制代码
SELECT id
FROM   vt1
ORDER  BY vector_distance(vector('[2.5, 8.5]'), v)
FETCH FIRST 4 ROWS ONLY;

总结

本期通过多个实际案例演示了Oracle Vector DB中如何实现近似查询。

老规矩,知道写了些啥。

相关推荐
全栈技术负责人2 小时前
AI驱动开发 (AI-DLC) 实战经验分享:重构人机协作的上下文工程
人工智能·重构
Wu_Dylan2 小时前
智能体系列(二):规划(Planning):从 CoT、ToT 到动态采样与搜索
人工智能·算法
一招定胜负2 小时前
OpenCV轮廓检测完全指南:从原理到实战
人工智能·opencv·计算机视觉
知乎的哥廷根数学学派2 小时前
基于多尺度注意力机制融合连续小波变换与原型网络的滚动轴承小样本故障诊断方法(Pytorch)
网络·人工智能·pytorch·python·深度学习·算法·机器学习
xiatianxy2 小时前
云酷科技用智能化方案破解行业难题
人工智能·科技·安全·智能安全带
星云数灵2 小时前
大模型高级工程师考试练习题8
人工智能·机器学习·大模型·大模型考试题库·阿里云aca·阿里云acp大模型考试题库·大模型高级工程师acp
A先生的AI之旅2 小时前
2025顶会TimeDRT快速解读
人工智能·pytorch·python·深度学习·机器学习
2301_800256112 小时前
【人工智能引论期末复习】第3章 搜索求解2 - 对抗搜索
人工智能·算法·深度优先
温柔只给梦中人2 小时前
深度学习:正则化
人工智能·深度学习
狮子座明仔2 小时前
DocDancer:北大联合腾讯提出端到端训练的文档问答Agent,将DocQA形式化为信息寻求过程
人工智能·深度学习·语言模型·自然语言处理