PgSQL-向量数据库插件-lantern

2023-09-21 22:45:14

PgSQL-向量数据库插件-lantern

即pgvector、pg_embedding 后又一向量数据库扩展Lantern问世了。当然也为向量列提供了hnsw索引以加速ORDER BY... LIMIT查询。Lantern使用usearch实现hnsw

使用方法

保留了标准PgSQL接口,兼容其生态工具。首先需要安装该插件:

CREATE EXTENSION lantern;

创建一个包含向量列的表,并添加数据:

CREATE TABLE small_world (id integer, vector real[3]);
INSERT INTO small_world (id, vector) VALUES (0, '{0,0,0}'), (1, '{0,0,1}');

在表上创建hnsw索引:

CREATE INDEX ON small_world USING hnsw (vector);

根据向量数据自定义hnsw索引参数,例如距离函数(dist_l2sq_ops)、索引构建参数和索引搜索参数:

CREATE INDEX ON small_world USING hnsw (vector dist_l2sq_ops)
WITH (M=2, ef_construction=10, ef=4, dim=3);

开始查询:

SET enable_seqscan = false;
SELECT id, l2sq_dist(vector, ARRAY[0,0,0]) AS dist
FROM small_world ORDER BY vector <-> ARRAY[0,0,0] LIMIT 1;

关于运算符

Lantern在索引上支持的多种距离函数。只需要创建索引时指定用于列的距离函数,Lantern会自动推断用于搜索的距离函数进行查询,因此查询中使用<->操作符。

请注意,该运算符<->专门用于索引查找。如果您希望在查询中不使用索引,则直接使用距离函数(例如l2sq_dist(v1, v2))

在创建索引期间可以使用四个已定义的运算符类:

1)dist_l2sq_ops:类型的默认值real[]

2)dist_vec_l2sq_ops:类型的默认值vector

3)dist_cos_ops:适用类型real[]

4)dist_hamming_ops: 适用类型integer[]

索引构建参数

M, ef, 和ef_construction参数控制hnsw算法的性能:

1)通常以召回代价降低M和ef_construction值来加快索引创建速度

2)较低的M和ef值可以提高查询性能,以召回为代价减少共享缓冲区命中率。

特点

1)流行用例(CLIP 模型、Hugging Face 模型、自定义模型)的嵌入生成

2)与 pgvector 数据类型的互操作性,因此任何使用 pgvector 的人都可以切换到 Lantern

3)通过外部索引器创建并行索引

4)够在数据库服务器外部生成索引图

5)支持在数据库外部和另一个实例内部创建索引,使您可以在不中断数据库工作流程的情况下创建索引

6)查看所有helper函数以了解使用方法

性能

1)我们跟踪三个关键指标。CREATE INDEX时间、SELECT吞吐量和SELECT延迟。

2)我们在所有这些指标上都匹配或优于 pgvector 和 pg_embedding (Neon)。

3)我们计划继续进行性能改进,以确保我们是性能最佳的数据库。

b8be1a20bf029b47e2aefd87b11f5680.png

733e3143ff9ba6dfe35e7d627f597432.png

b9b63a6d1cf2b7a8bb56db8fe91e4d16.png

路线图

1)Lantern 的云托管版本 -注册更新

2)为您的 CPU 量身定制的硬件加速距离指标,可实现更快的查询

3)用于构建不同行业应用程序的模板和指南

4)更多用于生成嵌入的工具(支持第三方模型 API、更多本地模型)

5)支持版本控制和 A/B 测试嵌入

6)自动调整的索引类型将选择适当的创建参数

7)支持 1 字节和 2 字节向量元素,以及最多 8000 个维度向量 ( PR #19 )

8)请通过support@lantern.dev请求功能

原文及代码

https://github.com/lanterndata/lantern

更多推荐

WebMvcConfigurerAdapter、WebMvcConfigurer、WebMvcConfigurationSupport

WebMvcConfigurerAdapter、WebMvcConfigurer、WebMvcConfigurationSupport的关系?WebMvcConfigurerAdapter、WebMvcConfigurer和WebMvcConfigurationSupport是SpringMVC框架中用于配置Web应用

android系统目录结构

文章目录android系统目录结构问答偏好设置保存在哪里在应用设置中点击清除数据,清除的是什么在应用设置中点击清除缓存,清除的是什么参考android系统目录结构/-system(一般只有root权限才能访问)-data-app(存放应用程序的APK文件)-data(内部存储)-<安装的应用包名>-app_textur

lock和synchronized的区别

lock和synchronized都是在多线程环境下用于保护共享资源的机制,但它们有一些重要的区别:实现方式:synchronized是Java语言内置的关键字,可以用于方法或代码块级别的同步。Lock是一个接口,位于java.util.concurrent.locks包下,提供了更灵活的锁定机制。灵活性:Lock提供

SQL-4大板块(存储过程、函数、视图、触发器)

一、存储过程(做复杂运算)1.做复杂运算,是对变量做运算;2.可以对多个表进行update、insert、delete、select、query;3.可以在最终结果返回多个表,但是对对接环境有苛刻要求,比如:VB不支持接收返回多个表4.当一个查询语句无法实现,或者语句查询速度很慢时,想提高效率就会用到存储过程。先把需要

MongoDB——将时间戳转换为日期

在MongoDB中将时间戳转换为日期从timestamp转换为日期取决于我们保存时间戳的类型。它是对象、数字还是字符串类型?我们可以在mongoshell上使用以下命令检查字段的类型。在本教程中,我们将学习如何将时间戳转换为数字、字符串或对象类型的日期。检查字段类型://MongoDB5.0.8>typeofdb.co

滑动时间窗口的思想和实现,环形数组,golang

固定时间窗口在开发限流组件的时候,我们需要统计一个时间区间内的请求数,比如以分钟为单位。所谓固定时间窗口,就是根据时间函数得到当前请求落在哪个分钟之内,我们在统计的时候只关注当前分钟之内的数量,即[0s,60s],因为流量并不是均匀的,所以就会出现,在两个分钟之间超过阈值,1分50秒时来了150个请求,在2分10秒时来

图像语义分割概述

图像语义分割概述一、图像语义分割概念图像语义分割(ImageSemanticSegmentation)是一项计算机视觉任务,其目标是将输入的图像分割成多个区域,并为每个像素分配一个语义类别标签,以表示该像素属于图像中的哪个物体或区域。与其他图像分割任务不同,图像语义分割不仅关注于分割图像,还要理解图像中不同部分的语义含

【C++】面向对象编程示例 ( 案例需求 | Visual Studio 创建类 | 类的声明 | 类的实现 | 类的调用 )

文章目录一、案例需求二、VisualStudio创建类三、类的声明四、类的实现五、类的调用一、案例需求使用C++面向对象,抽象出一个立方体类;立方体有长/宽/高/面积/体积私有成员变量,以及访问这些成员变量的公共成员方法;还提供立方体的对比函数,对比2个立方体对象是否相等;二、VisualStudio创建类在Visua

【C++】类的声明 与 类的实现 分开 ① ( 类的声明 与 类的实现 常用用法 | Visual Studio 2019 中创建类的头文件和源文件 | 确保头文件包含一次 )

文章目录一、类的声明与类的实现分开1、类的声明与类的实现常用用法2、VisualStudio2019中创建类的头文件和源文件3、Student.h类头文件解析4、确保头文件包含一次一、类的声明与类的实现分开1、类的声明与类的实现常用用法在之前的博客中,定义的class类,定义类时同时也完成了实现;但是在C++语言实际开

“源启2.0”:从自上而下的解构,到自下而上的重构

从垂直打穿、到应用重构,中电金信赋能行业数字化转型之路既“向下走”、也“向上看”。“向上”先理解和吃透客户的企业战略,进而自上而下地将企业战略拆解为业务架构,“向下”再将业务架构拆解为应用架构和数据架构,并进一步对齐技术架构。而在此过程中,上至“应用重构”,下至“数字基础设施重构”就都已不是问题。这就是“源启2.0”的

【校招VIP】测试方案分析之压力测试

考点介绍:软件压力测试是校招面试里面经常会碰到的题型。基本思路是在计算机数量较少或系统资源匮乏的条件下运行测试。要求面试者了解压力测试的基本概念,压测的目的,压测的要求以及说出实例。测试方案分析之压力测试-相关题目及解析内容可点击文章末尾链接查看!一、考点试题1.软件质量管理(QM)应有质量保证(QA)和质量控制(QC

热文推荐