首页 > 数据库 >数据库-SQL_duckdb向量化计算-vector

数据库-SQL_duckdb向量化计算-vector

时间:2024-07-15 19:42:22浏览次数:9  
标签:Vector duckdb DuckDB 索引 算法 vector SQL 向量

duckdb

DuckDB 0.10.0引入了新的数据类型Array
   Array 不同于Postgres的数组类型(Postgres的是可变长度的),DuckDB的 Array 列存储固定大小的数组
      目前相似度计算支持 单精度浮点数(4 字节)
     DuckDB的 FLOAT4  = numpy.float3
目前vss功能还有待丰富--持续关注

Vector

向量(Vector)是连接知识库和LLMs的关键媒介,未来的一切都是向量化的,
通过向量嵌入(Vector Embedding)来实现一切对象的向量化表示,而向量嵌入、向量计算与大模型一起构建智能应用的技术	
向量(Vector)的存储和搜索是向量数据库的基本功能,也是构建智能应用的关键技术	

插件

VSS(Vector Similarity Search (VSS) Extension)扩展插件,支持vss 搜
  SELECT extension_name, installed, description FROM duckdb_extensions();	
    安装和加载VSS插件
 duckdb为支持向量搜索,引入VSS (Vector Similarity Search (VSS) Extension) 插件扩展,
    VSS插件扩展引入一个新的索引类型:
	  HNSW(Hierarchical Navigable Small Worlds),这是一种基于图的索引结构,特别适用于高维向量相似性搜索

duckdb数据类型

   DuckDB's new fixed-size ARRAY type
duckdb 支持ARRAY 数据类型,Array列存储固定大小的数组。
  列中的所有字段必须具有相同的长度和相同的基础类型。
  数组通常用于存储数字数组,但可以包含任何统一的数据类型,包括ARRAY、LIST和STRUCT类型。
  Array 数据类型可用于存储诸如词嵌入(word embeddings )或图像嵌入(image embeddings)之类的向量(vectors )

HNSW索引创建语句中传递一个度量参数来决定使用何种距离度量。支持的度量有l2sq、cosine和inner_product,
分别对应三种内置的距离函数
  :array_distance、array_cosine_similarity和array_inner_product。默认值是l2sq,它使用欧氏距离(array_distance)
命令
   array_value(index):创建一个包含参数值的数组	
   array_cosine_similarity(array1, array2):计算大小相同的两个数组之间的余弦相似度
 
loading the vss extension and then ATTACHing the database file, 
   which ensures that the HNSW index functionality is available during WAL-playback 
 hnsw_enable_experimental_persistence   

PostgreSQL

PostgreSQL中使用开源pg_vector扩展来查询向量数据	 
     生成向量嵌入是一个计算密集型过程
	   存储方面:PostgreSQL的TOAST系统允许大型列值跨多个页面存储,而不是内联存
	   索引方面:HNSW 索引是基于图的 Hierarchical Navigable Small Worlds
 
    PostgreSQL中的快速最近邻连接(Fast Nearest Neighbor Search)是一种用于在数据库中高效地查找最近邻数据点的技术。
      它可以帮助我们在大规模数据集中快速找到与给定数据点最接近的数据点。
    快速最近邻连接的分类:
       基于索引的方法:通过构建索引结构来加速最近邻搜索,常见的索引结构包括KD-Tree、R-Tree等。
       基于图的方法:将数据点之间的关系表示为图结构,利用图算法来进行最近邻搜索,常见的图算法包括最短路径算法、最小生成树算法等
	   
    pgvector 支持两种主要类型的搜索:精确最近邻搜索(ENN)和近似最近邻搜索(ANN)
	   索引技术:不同的 ANN 算法(如 HNSW 和 IVF)提供了不同的性能和准确性权衡。

 K-means本质上是无监督学习,而KNN是监督学习;
   K-means是聚类算法,KNN是分类(或回归)算法
 The k-nearest neighbors (KNN) 
   最近邻算法是「基于实例的」,这就意味着其需要保留每一个训练样本观察值。最近邻算法通过搜寻最相似的训练样本来预测新观察样本的值
      KNN是有监督学习的分类算法,有对应的类别输出-
	    由于KNN是一种基于实例的学习方法,‌它不需要显式的训练阶段,‌只需在检测时计算距离
	 依次计算每个样本点与它最近的K个样本的平均距离,再利用计算的距离与阈值进行比较,如果大于阈值,则认为是异常点
K 均值聚类 
   k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法	

参考

https://duckdb.org/docs/extensions/vss	  
https://github.com/duckdb/duckdb_vss
使用SNB 探索DuckDB的向量相似性搜索(Vector Similarity Search):发挥GenAI潜能  https://zhuanlan.zhihu.com/p/698477442	
DuckDB也要加入向量数据库的战局? https://www.modb.pro/db/1760486338210123776
 国内用户如何使用 DuckDB 访问 Hugging Face 上超15万 数据集?  https://www.modb.pro/db/1811574404587020288	

标签:Vector,duckdb,DuckDB,索引,算法,vector,SQL,向量
From: https://www.cnblogs.com/ytwang/p/18303850

相关文章

  • MySQL时间戳转成日期格式
    将时间戳转换为日期格式:--如果时间戳为毫秒级长度为13位,需要先除以1000SELECTid,`task_name`,FROM_UNIXTIME(`task_register_begin_time`/1000,'%Y-%m-%d%H:%i:%s')astask_register_begin_time,FROM_UNIXTIME(`task_register_end_time`/1000,'%Y-%m-%d%H:%i:%s')ast......
  • 基于Java+ Java Swing Mysql 实现的学生宿舍管理系统设计与实现
    一、前言介绍:1.1项目摘要随着高校招生规模的不断扩大,学生宿舍管理面临着越来越多的挑战。传统的学生宿舍管理方式往往依赖于人工记录、纸质档案和口头通知,这种方式不仅效率低下,而且容易出错,给宿舍管理带来了诸多不便。因此,开发一套高效、便捷、准确的学生宿舍管理系统成......
  • 基于Java+Ssm+Mysql实现的Java Web酒店管理项目系统设计与实现
    一、前言介绍:1.1项目摘要随着信息技术的快速发展和互联网的普及,传统酒店行业面临着转型升级的压力。为了提高酒店的经营管理水平,提升客户体验,酒店管理系统应运而生。酒店管理系统通过整合酒店内部资源,实现信息的快速传递和处理,为酒店提供了高效、便捷的管理手段。课题“......
  • Day1_1--通过jdbc驱动程序连接mysql数据库+测试(hamcrest+junit)
    idea项目导入mysql对应版本jar包驱动File->ProjectStructure->Libraries点击加号添加驱动并Apply参考代码importorg.junit.Test;importjava.sql.*;/***@authornanzhi*@date2024/7/159:52*/publicclassk1_jdbc{publicstaticvoidmain(String[]ar......
  • 14 mysql 函数
    在mysql中,函数主要分为内置函数(系统函数)和自定义函数不管是内置函数还是自定义函数,都是使用select函数名(参数列表);字符串函数char_length():判断字符串的字符数length():判断字符串的字节数(字符集有关)SELECTchar_length('你好,中国'),length('你好,中国');--返回结果:51......
  • MySQL PXC集群多个节点同时大量并发update同一行
    如本文标题,MySQLPXC集群多个节点同时大量并发update同一行数据,会怎样?为此,本人做了一个测试,来验证到底会怎样!一、生成测试数据mysql>CREATETABLEtest(->`a`int(11)NOTNULLDEFAULT0,->`b`int(11)DEFAULTNULL,->`c`int(11)DEFAULTNULL,......
  • 文生SQL
    主页个人微信公众号:密码应用技术实战个人博客园首页:https://www.cnblogs.com/informatics/缘起2022年12月ChatGPT的横空出世,掀起了LLM大模型的科技热潮,一时间文胜文,文胜图,文生视频为大众所周知。SQL(StructuredQueryLanguage)是一种用于管理和操作关系型数据库的标准化语......
  • 为什么MySQL会选择B+树作为索引
    为什么MySQL会选择B+树作为索引在数据库管理系统中,索引是提升查询效率的关键技术之一。MySQL作为广泛使用的关系型数据库管理系统,其核心存储引擎InnoDB选择B+树作为其索引结构,这一选择背后蕴含了深刻的性能和存储效率考量。本文将简要介绍B+树的基本概念,阐述MySQL选择B+树......
  • 来聊一聊MySQL InnoDB的LSN
    前言在MySQL的InnoDB存储引擎中,LSN(日志序列号)其实是一个非常重要的概念。它用来标识数据库某一特点时间点和状态。并在事务管理,崩溃恢复和数据一致性维护中发生重要作用。下面,我们来讲下LSN的实现机制。包括其生成、管理和使用方式。什么是LSNLSN是全局递增的序列号。......
  • mysql备份还原——binlog查看工具之show binlog的使用
    (4.8)mysql备份还原——binlog查看工具之mysqlbinlog及showbinlog的使用关键词:showbinlog,mysqlbinlog查看,二进制文件查看,binlog查看工具,binlog查看方法 0、使用showmasterstatus; 使用它可以直接查看binlog日志信息;总结:指定文件:showbinlogeventsin'b......