CN111309985B - 基于PostgreSQL数据库的高维向量存储方法和装置 - Google Patents
基于PostgreSQL数据库的高维向量存储方法和装置 Download PDFInfo
- Publication number
- CN111309985B CN111309985B CN202010163627.4A CN202010163627A CN111309985B CN 111309985 B CN111309985 B CN 111309985B CN 202010163627 A CN202010163627 A CN 202010163627A CN 111309985 B CN111309985 B CN 111309985B
- Authority
- CN
- China
- Prior art keywords
- data
- data page
- vector
- page
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供一种基于PostgreSQL数据库的高维向量存储方法和装置。该数据库包括多个节点向量,数据库的索引包括多个数据页,数据页用于存储节点向量,且一个节点向量的数据量大于一个数据页的容量。在对第一节点向量进行存储时,生成与第一节点向量对应的第一数据元组,第一数据元组包括向量位置区段和向量数据区段,向量数据区段存储第一节点向量的向量数据;获取索引中待存储数据的第一数据页,从第一数据页的空闲存储区域的开端开始存储第一数据元组,根据剩余数据量至少生成一个第二数据页,并将剩余数据存储至第二数据页;基于第一数据页和第二数据页确定第一节点向量的位置信息,将第一节点向量的位置信息存储至向量位置区段。
Description
技术领域
本说明书一个或多个实施例涉及数据存储技术领域,尤其涉及基于PostgreSQL数据库的高维向量存储方法和装置。
背景技术
PostgreSQL是一款支持向量检索的开源数据库,其具有高可用性、高扩展性。该数据库可以用于存储对象的向量特征,向量形式的特征可以包含对象较多的特征信息。例如,图像、用户特征、事件特征等对象特征,均可以采用向量形式表示。在对数据库中的数据进行检索时,可以使用索引对向量特征进行检索。随着计算机技术的发展,信息量爆炸式增长,向量特征的维数也越来越高。目前,存在基于PostgreSQL数据库,实现在索引中对高维向量进行存储的需求。
因此,希望能有改进的方案,可以基于PostgreSQL数据库,实现在索引中对高维向量进行存储。
发明内容
本说明书一个或多个实施例描述了基于PostgreSQL数据库的高维向量存储方法和装置,以基于PostgreSQL数据库,实现在索引中对高维向量进行存储。具体的计算方案如下。
第一方面,实施例提供了一种基于PostgreSQL数据库的高维向量存储方法,通过计算机执行,所述数据库至少包括多个节点向量,所述数据库的索引包括多个数据页,所述数据页用于存储节点向量,一个节点向量的数据量大于一个数据页的容量;所述方法包括:
从所述数据库中获取待存储至所述索引的第一节点向量;
生成与所述第一节点向量对应的第一数据元组;其中,所述第一数据元组包括向量位置区段和向量数据区段,所述向量数据区段存储所述第一节点向量的向量数据;
获取所述索引中待存储数据的第一数据页;
从所述第一数据页的空闲存储区域的开端开始存储所述第一数据元组,根据剩余数据量至少生成一个第二数据页,并将剩余数据存储至生成的所述第二数据页;
基于所述第一数据页和所述第二数据页,确定所述第一节点向量的位置信息,将所述第一节点向量的位置信息存储至所述向量位置区段。
在一种实施方式中,所述生成与所述第一节点向量对应的第一数据元组的步骤,还包括,采用初始化位置信息填充所述向量位置区段;
所述将所述第一节点向量的位置信息存储至所述向量位置区段的步骤,包括,用所述第一节点向量的位置信息替换所述第一数据元组中的初始化位置信息。
在一种实施方式中,所述从所述第一数据页的空闲存储区域的开端开始存储所述第一数据元组,根据剩余数据量至少生成一个第二数据页,并将剩余数据存储至生成的所述第二数据页的步骤,包括:
将所述第一数据页作为当前数据页,从所述当前数据页的空闲存储区域的开端开始存储所述第一数据元组;
当检测到所述当前数据页已存满,且所述第一数据元组未存储完成时,生成第二数据页,将所述第二数据页作为当前数据页,返回执行所述从所述当前数据页的空闲存储区域的开端开始存储所述第一数据元组的步骤。
在一种实施方式中,在生成第二数据页之后,还包括,在所述第二数据页的页头区域中存储所述第二数据页的前一数据页的数据页标识;
在所述前一数据页的页尾区域中存储所述第二数据页的数据页标识。
在一种实施方式中,所述基于所述第一数据页和所述第二数据页,确定所述第一节点向量的位置信息的步骤,包括:
将所述第一数据页作为起始数据页,并将最后一个第二数据页作为末尾数据页,确定所述第一节点向量在所述起始数据页中的偏移量,以及所述第一节点向量在所述末尾数据页中的偏移量;
将所述起始数据页的数据页标识和对应的偏移量、所述末尾数据页的数据页标识和对应的偏移量,确定为所述第一节点向量的位置信息。
在一种实施方式中,在将剩余数据存储至生成的所述第二数据页之后,还包括,记录最后一个第二数据页的空闲存储区域的开端。
在一种实施方式中,第一数据页和所述第二数据页连续,或者不连续。
第二方面,实施例提供了一种基于PostgreSQL数据库的高维向量存储装置,部署在计算机中,所述数据库至少包括多个节点向量,所述数据库的索引包括多个数据页,所述数据页用于存储节点向量,一个节点向量的数据量大于一个数据页的容量;所述装置包括:
向量获取模块,配置为从所述数据库中获取待存储至所述索引的第一节点向量;
元组生成模块,配置为生成与所述第一节点向量对应的第一数据元组;其中,所述第一数据元组包括向量位置区段和向量数据区段,所述向量数据区段存储所述第一节点向量的向量数据;
数据页获取模块,配置为获取所述索引中待存储数据的第一数据页;
元组存储模块,配置为从所述第一数据页的空闲存储区域的开端开始存储所述第一数据元组,根据剩余数据量至少生成一个第二数据页,并将剩余数据存储至生成的所述第二数据页;
位置存储模块,配置为基于所述第一数据页和所述第二数据页,确定所述第一节点向量的位置信息,将所述第一节点向量的位置信息存储至所述向量位置区段。
在一种实施方式中,所述元组生成模块,还配置为,采用初始化位置信息填充所述向量位置区段;
所述位置存储模块,将所述第一节点向量的位置信息存储至所述向量位置区段时,包括,用所述第一节点向量的位置信息替换所述第一数据元组中的初始化位置信息。
在一种实施方式中,所述元组存储模块,具体配置为:
将所述第一数据页作为当前数据页,从所述当前数据页的空闲存储区域的开端开始存储所述第一数据元组;
当检测到所述当前数据页已存满,且所述第一数据元组未存储完成时,生成第二数据页,将所述第二数据页作为当前数据页,返回执行从所述当前数据页的空闲存储区域的开端开始存储所述第一数据元组。
在一种实施方式中,所述元组存储模块,还配置为:
在生成第二数据页之后,在所述第二数据页的页头区域中存储所述第二数据页的前一数据页的数据页标识,在所述前一数据页的页尾区域中存储所述第二数据页的数据页标识。
在一种实施方式中,所述位置存储模块,基于所述第一数据页和所述第二数据页,确定所述第一节点向量的位置信息时,包括:
将所述第一数据页作为起始数据页,并将最后一个第二数据页作为末尾数据页,确定所述第一节点向量在所述起始数据页中的偏移量,以及所述第一节点向量在所述末尾数据页中的偏移量;
将所述起始数据页的数据页标识和对应的偏移量、所述末尾数据页的数据页标识和对应的偏移量,确定为所述第一节点向量的位置信息。
在一种实施方式中,装置还包括:
位置记录模块,配置为在将剩余数据存储至生成的所述第二数据页之后,记录最后一个第二数据页的空闲存储区域的开端。
在一种实施方式中,第一数据页和所述第二数据页连续,或者不连续。
第三方面,实施例提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面中任一项所述的方法。
第四方面,实施例提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面中任一项所述的方法。
本说明书实施例提供的基于数据库的高维向量存储方法和装置,可以生成与待存储的节点向量对应的数据元组,并从索引中待存储数据的数据页的空闲存储区域的开端开始存储数据元组,将剩余数据存储在生成的新数据页中,基于存储数据元组的各个数据页,确定节点向量的位置信息,并将节点向量的位置信息存储在数据元组的向量位置区段中。这种存储方式,在节点向量的数据量大于数据页的容量时,能够针对节点向量实现跨数据页存储,并有效地记录存储节点向量的位置信息,因此基于PostgreSQL数据库,实现了在索引中对高维向量进行存储。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书披露的数据库和索引在存储数据时的一种示意图;
图2为实施例提供的基于PostgreSQL数据库的高维向量存储方法的一种流程示意图;
图3为实施例提供的第一数据元组及其存储位置的一种示意图;
图4为实施例提供的存储同一数据元组的各个数据页之间相互连接的一种示意图;
图5为实施例提供的基于PostgreSQL数据库的高维向量存储装置的一种示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
PostgreSQL是一款可以存储向量并支持向量检索的开源数据库,其具有高可用性、高扩展性。该数据库可以存储各种数据。例如,该数据库可以存储图像、用户数据或行为事件数据等。数据库中的每条数据可以称为一个节点,节点的数据可以包括向量字段和非向量字段,向量字段可以是基于对节点的大量信息得到的特征,非向量字段可以包括地域字段、年龄字段、姓名字段等等,非向量字段也可以称为文本字段。节点的向量可以由多维数据组成。例如,图像对应的向量,可以是将图像中的各个像素点作为了向量的多维数据;用户数据对应的向量,可以基于对用户信息进行的某种计算而得到。并且,向量字段是节点的重要特征,也是重点检索字段。
PostgreSQL数据库本身支持对高维向量的检索。基于向量的检索,是从数据库中找到与待检索向量最匹配的一个或多个向量的过程。通常采用数据库对应的索引进行节点向量检索。在创建索引时,可以将数据库中各个节点的向量存储至索引中,这样能够更方便地利用索引进行节点向量检索。
例如,PostgreSQL数据库在存储各个节点的数据时,一般采用字符串形式或者浮点型、整数型等方式。参见图1所示,PostgreSQL数据库内部采用字符串形式存储多个节点数据的一个例子。其中,每个节点的向量字段和非向量字段以字符串的形式存储,例如,针对1xxxxxxxxxxxxx,1为节点编号,xxxxxxxxxxxxx包含节点1的向量字段值和非向量字段值。而索引对向量的存储单元是“页”,即数据页,并以大量的数据页来存储大量节点向量。可见,利用索引更利于对节点向量进行检索。
数据页的容量是一定的。例如,一个数据页的默认容量可以是8kB,一个8kB的数据页最大可以存储一个一定维数的向量。当向量的维数小于该维数时,一个数据页可以存储一个或多个向量。当向量的维数大于该维数时,可以重新编译PostgreSQL数据库的源代码,来调大数据页的默认容量。
为了避免重新编译数据库源代码,本说明书实施例基于PostgreSQL数据库的已有结构,提供了一种高维向量存储方法,即采用跨数据页的形式,将数据库中的节点向量存储至索引的数据页中。在本说明书实施例中,高维向量,可以理解为数据量大于一个数据页的容量的节点向量。
图2为实施例提供的基于PostgreSQL数据库的高维向量存储方法的一种流程示意图。该方法通过计算机执行。具体的,该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。其中,数据库至少包括多个节点向量,数据库的索引包括多个数据页,数据页用于存储节点向量。并且,数据库中的多个节点向量中,一个节点向量的数据量大于一个数据页的容量。一个节点向量的数据量,是该节点向量中所有维度数据的总数据量。本实施例提供的方法包括以下步骤S210~S250。步骤S210,从数据库中获取待存储至索引的第一节点向量X1。步骤S220,生成与第一节点向量X1对应的第一数据元组Y1。步骤S230,获取索引中待存储数据的第一数据页Pa1。步骤S240,从第一数据页Pa1的空闲存储区域的开端开始存储第一数据元组Y1,根据剩余数据量至少生成一个第二数据页Pa2,并将剩余数据存储至生成的第二数据页Pa2。步骤S250,基于第一数据页Pa1和第二数据页Pa2,确定第一节点向量X1的位置信息,将第一节点向量X1的位置信息存储至向量位置区段。针对各个步骤的具体说明如下。
在步骤S210中,从数据库中获取待存储至索引的第一节点向量X1。第一节点向量X1可以是数据库中多个节点向量中的任意一个。
在步骤S220中,生成与第一节点向量X1对应的第一数据元组Y1。其中,第一数据元组Y1包括向量位置区段和向量数据区段,向量数据区段存储第一节点向量X1的向量数据。向量位置区段用于存储第一节点向量X1的位置信息,但在第一节点向量X1还未实现存储时,并没有第一节点向量X1的位置信息,因此该向量位置区段可以是空数据,也可以采用初始化位置信息填充该向量位置区段。初始化位置信息可以采用指定字符表示。
向量位置区段和向量数据区段中,每个区段的大小和区段之间在数据元组中的相对位置可以预先设定。例如,向量位置区段可以位于向量数据区段之前或者之后,向量位置区段可以为0.5kB,向量数据区段可以为16kB。每个数据元组的数据量可以基于向量位置区段和向量数据区段的大小预先设定。
在步骤S230中,获取索引中待存储数据的第一数据页Pa1。
在步骤S240中,从第一数据页Pa1的空闲存储区域的开端开始存储第一数据元组Y1,根据剩余数据量至少生成一个第二数据页Pa2,并将剩余数据存储至生成的第二数据页Pa2。
其中,第一数据页Pa1可以是索引中的第一个数据页,也可以是第一个数据页之后的任意一个数据页。第一数据页Pa1的空闲存储区域的开端,可以从预先记录的空闲存储区域的开端中获取。第一数据页Pa1,可以是已存储了一部分数据但未存满的数据页,也可以是完全空的数据页。因此,空闲存储区域的开端可以是第一数据页Pa1中间的某个位置,也可以是起始存储位置。
由于第一节点向量X1的数据量大于第一数据页Pa1的剩余存储空间,因此在存储第一数据元组Y1的过程中,当第一数据页Pa1存满时,可以生成新的数据页。因此,步骤S240具体可以按照以下步骤循环执行:将第一数据页Pa1作为当前数据页,从当前数据页的空闲存储区域的开端开始存储第一数据元组Y1,当检测到当前数据页已存满,且第一数据元组Y1未存储完成时,生成第二数据页Pa2,将第二数据页Pa2作为当前数据页,返回执行从当前数据页的空闲存储区域的开端开始存储第一数据元组Y1的步骤,直至第一数据元组Y1存储完成。如果第一节点向量X1的数据量比较大,在该存储过程中可能会生成多个第二数据页Pa1。
例如,参见图3,其中数据页5为索引中当前待存储数据的数据页,数据页5中从箭头向右的位置为空闲存储区域,当第一数据元组Y1的部分数据将数据页5存满之后,生成数据页6,继续向数据页6中存储第一数据元组Y1的剩余数据;当第一数据元组Y1的剩余数据将数据页6存满之后,生成数据页7,继续向数据页7中存储第一数据元组Y1的剩余数据,直至将第一数据元组Y1的所有数据存储完成。在该图3中,数据页5可以认为是第一数据页Pa1,数据页6和7可以认为是第二数据页Pa2。
在存储过程中,可以在待存储的数据量大于当前数据页的剩余存储空间时,触发生成新的数据页。在生成数据页时,第一数据页Pa1和第二数据页Pa2可以连续,也可以不连续。也就是说,用于存储一个节点向量的数据页,可以是连续的数据页,也可以是不连续的数据页。数据页是否连续,可以理解为数据页标识是否连续。数据页标识可以为数据页的编号、页码或序号等。
在步骤S250中,基于第一数据页Pa1和第二数据页Pa2,确定第一节点向量X1的位置信息时,可以将第一数据页Pa1作为起始数据页,并将最后一个第二数据页Pa2作为末尾数据页,确定第一节点向量X1在起始数据页中的偏移量,以及第一节点向量X1在末尾数据页中的偏移量,将起始数据页的数据页标识和对应的偏移量、末尾数据页的数据页标识和对应的偏移量,确定为第一节点向量X1的位置信息。
其中,第一节点向量X1在起始数据页中的偏移量,可以是第一节点向量X1在起始数据页中存储的数据量,即第一节点向量X1在起始数据页中的起始存储位置到末尾存储位置之间的数据量。例如,起始数据页的存储空间为0~8kB,第一节点向量X1从起始数据页的5kB位置开始存储,则偏移量可以是5kB到8kB之间的3kB。第一节点向量X1在末尾数据页中的偏移量,与上述方式类同,不再赘述。
在确定第一节点向量X1在起始数据页中的偏移量,以及第一节点向量X1在末尾数据页中的偏移量时,可以基于数据元组中向量位置区段和向量数据区段的大小和相对位置进行确定。例如,如图3所示,当向量位置区段位于向量数据区段之前时,可以将第一数据元组Y1在数据页5中的偏移量减去向量位置区段的大小,得到第一节点向量X1在起始数据页中的偏移量。第一节点向量X1在末尾数据页中的偏移量,即是第一数据元组Y1在数据页7中存储的数据量。采用类似方法,可以确定当向量位置区段位于向量数据区段之后时的各个偏移量。
在步骤S250中,将第一节点向量X1的位置信息存储至向量位置区段时,如果向量位置区段的数据为空,则可以直接将第一节点向量X1的位置信息存储至该向量位置区段。如果在步骤S220生成第一数据元组Y1时,采用了初始化位置信息填充向量位置区段,则可以用第一节点向量X1的位置信息替换第一数据元组Y1中的初始化位置信息。
再回顾一下步骤S240。每个数据页可以存在页头区域和页尾区域,这些区域不用于存储节点向量的向量数据。在生成第二数据页Pa2之后,还可以在第二数据页Pa2的页头区域中存储第二数据页Pa2的前一数据页的数据页标识,在前一数据页的页尾区域中存储第二数据页Pa2的数据页标识。第二数据页Pa2的前一数据页,是指用于存储第一数据元组Y1的各个数据页中位于第二数据页Pa2之前的一个数据页。第二数据页Pa2与其前一数据页的标识可能是不连续的。
参见图4,第一数据元组Y1存储在不连续的数据页7、数据页11和数据页26中,在生成数据页11时,数据页11的前一数据页为数据页7,因此可以将数据页11的标识p11存储在数据页7的页尾区域,将数据页7的标识p7存储在数据页11的页头区域,并在数据页11的页尾区域存储数据页26的标识p26,在数据页26的页头区域存储数据页11的标识p11。这样,可以将用于存储第一数据元组Y1的数据页连接成一条链,方便于通过一个数据页找到存储同一节点向量的下一个数据页,进而便于对向量数据进行获取。
当将第一数据元组的剩余数据完全存储至生成的第二数据页Pa2之后,还可以记录最后一个第二数据页Pa2的空闲存储区域的开端,以便于对下一个待存储的节点向量进行存储时。
由上述内容可见,上述实施例,可以生成与待存储的节点向量对应的数据元组,并从索引中待存储数据的数据页的空闲存储区域的开端开始存储数据元组,将剩余数据存储在生成的新数据页中,基于存储数据元组的各个数据页,确定节点向量的位置信息,并将节点向量的位置信息存储在数据元组的向量位置区段中。这种存储方式,在节点向量的数据量大于数据页的容量时,能够针对节点向量实现跨数据页存储,并有效地记录存储节点向量的位置信息,因此基于PostgreSQL数据库,实现了在索引中对高维向量进行存储。同时,这种跨数据页的向量存储方式,可以无损地使得PostgreSQL数据库支持对高维甚至超高维向量的存储。
上述内容对本说明书的特定实施例进行了描述,其他实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行,并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要按照示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的,或者可能是有利的。
图5为实施例提供的基于PostgreSQL数据库的高维向量存储装置的一种示意性框图。该装置500部署在计算机中,该装置实施例与图2所示方法实施例相对应。其中,数据库至少包括多个节点向量,数据库的索引包括多个数据页,数据页用于存储节点向量,一个节点向量的数据量大于一个数据页的容量。该装置500包括:
向量获取模块510,配置为从数据库中获取待存储至索引的第一节点向量;
元组生成模块520,配置为生成与第一节点向量对应的第一数据元组;其中,第一数据元组包括向量位置区段和向量数据区段,向量数据区段存储第一节点向量的向量数据;
数据页获取模块530,配置为获取索引中待存储数据的第一数据页;
元组存储模块540,配置为从第一数据页的空闲存储区域的开端开始存储第一数据元组,根据剩余数据量至少生成一个第二数据页,并将剩余数据存储至生成的第二数据页;
位置存储模块550,配置为基于第一数据页和第二数据页,确定第一节点向量的位置信息,将第一节点向量的位置信息存储至向量位置区段。
在一种实施方式中,元组生成模块520,还配置为,采用初始化位置信息填充向量位置区段;
位置存储模块,将第一节点向量的位置信息存储至向量位置区段时,包括,用第一节点向量的位置信息替换第一数据元组中的初始化位置信息。
在一种实施方式中,元组存储模块540具体配置为:
将第一数据页作为当前数据页,从当前数据页的空闲存储区域的开端开始存储第一数据元组;
当检测到当前数据页已存满,且第一数据元组未存储完成时,生成第二数据页,将第二数据页作为当前数据页,返回执行从当前数据页的空闲存储区域的开端开始存储第一数据元组。
在一种实施方式中,元组存储模块540还配置为:
在生成第二数据页之后,在第二数据页的页头区域中存储第二数据页的前一数据页的数据页标识,在前一数据页的页尾区域中存储第二数据页的数据页标识。
在一种实施方式中,位置存储模块550,基于第一数据页和第二数据页,确定第一节点向量的位置信息时,包括:
将第一数据页作为起始数据页,并将最后一个第二数据页作为末尾数据页,确定第一节点向量在起始数据页中的偏移量,以及第一节点向量在末尾数据页中的偏移量;
将上述起始数据页的数据页标识和对应的偏移量、末尾数据页的数据页标识和对应的偏移量,确定为第一节点向量的位置信息。
在一种实施方式中,该装置500还包括:
位置记录模块(图中未示出),配置为在将剩余数据存储至生成的第二数据页之后,记录最后一个第二数据页的空闲存储区域的开端。
在一种实施方式中,第一数据页和第二数据页连续,或者不连续。
上述装置实施例与方法实施例相对应,具体说明可以参见方法实施例部分的描述,此处不再赘述。装置实施例是基于对应的方法实施例得到,与对应的方法实施例具有同样的技术效果,具体说明可参见对应的方法实施例。
本说明书实施例提供了一种计算机可读存储介质,其上存储有计算机程序,当计算机程序在计算机中执行时,令计算机执行图2至图4任一项所述的方法。
本说明书实施例提供了一种计算设备,包括存储器和处理器,存储器中存储有可执行代码,处理器执行所述可执行代码时,实现图2至图4中任一项所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于存储介质和计算设备实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明实施例的目的、技术方案和有益效果进行了进一步的详细说明。所应理解的是,以上所述仅为本发明实施例的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (16)
1.一种基于PostgreSQL数据库的高维向量存储方法,通过计算机执行,所述数据库至少包括多个节点向量,所述数据库的索引包括多个数据页,所述数据页用于存储节点向量,一个节点向量的数据量大于一个数据页的容量;所述方法包括:
从所述数据库中获取待存储至所述索引的第一节点向量;
生成与所述第一节点向量对应的第一数据元组;其中,所述第一数据元组包括向量位置区段和向量数据区段,所述向量数据区段存储所述第一节点向量的向量数据;
获取所述索引中待存储数据的第一数据页;
从所述第一数据页的空闲存储区域的开端开始存储所述第一数据元组,根据剩余数据量至少生成一个第二数据页,并将剩余数据存储至生成的所述第二数据页;
基于所述第一数据页和所述第二数据页,确定所述第一节点向量的位置信息,将所述第一节点向量的位置信息存储至所述向量位置区段。
2.根据权利要求1所述的方法,所述生成与所述第一节点向量对应的第一数据元组的步骤,还包括:
采用初始化位置信息填充所述向量位置区段;
所述将所述第一节点向量的位置信息存储至所述向量位置区段的步骤,包括:
用所述第一节点向量的位置信息替换所述第一数据元组中的初始化位置信息。
3.根据权利要求1所述的方法,所述从所述第一数据页的空闲存储区域的开端开始存储所述第一数据元组,根据剩余数据量至少生成一个第二数据页,并将剩余数据存储至生成的所述第二数据页的步骤,包括:
将所述第一数据页作为当前数据页,从所述当前数据页的空闲存储区域的开端开始存储所述第一数据元组;
当检测到所述当前数据页已存满,且所述第一数据元组未存储完成时,生成第二数据页,将所述第二数据页作为当前数据页,返回执行所述从所述当前数据页的空闲存储区域的开端开始存储所述第一数据元组的步骤。
4.根据权利要求3所述的方法,在生成第二数据页之后,还包括:
在所述第二数据页的页头区域中存储所述第二数据页的前一数据页的数据页标识;
在所述前一数据页的页尾区域中存储所述第二数据页的数据页标识。
5.根据权利要求3所述的方法,所述基于所述第一数据页和所述第二数据页,确定所述第一节点向量的位置信息的步骤,包括:
将所述第一数据页作为起始数据页,并将最后一个第二数据页作为末尾数据页,确定所述第一节点向量在所述起始数据页中的偏移量,以及所述第一节点向量在所述末尾数据页中的偏移量;
将所述起始数据页的数据页标识和对应的偏移量、所述末尾数据页的数据页标识和对应的偏移量,确定为所述第一节点向量的位置信息。
6.根据权利要求1所述的方法,在将剩余数据存储至生成的所述第二数据页之后,还包括:
记录最后一个第二数据页的空闲存储区域的开端。
7.根据权利要求1所述的方法,所述第一数据页和所述第二数据页连续,或者不连续。
8.一种基于PostgreSQL数据库的高维向量存储装置,部署在计算机中,所述数据库至少包括多个节点向量,所述数据库的索引包括多个数据页,所述数据页用于存储节点向量,一个节点向量的数据量大于一个数据页的容量;所述装置包括:
向量获取模块,配置为从所述数据库中获取待存储至所述索引的第一节点向量;
元组生成模块,配置为生成与所述第一节点向量对应的第一数据元组;其中,所述第一数据元组包括向量位置区段和向量数据区段,所述向量数据区段存储所述第一节点向量的向量数据;
数据页获取模块,配置为获取所述索引中待存储数据的第一数据页;
元组存储模块,配置为从所述第一数据页的空闲存储区域的开端开始存储所述第一数据元组,根据剩余数据量至少生成一个第二数据页,并将剩余数据存储至生成的所述第二数据页;
位置存储模块,配置为基于所述第一数据页和所述第二数据页,确定所述第一节点向量的位置信息,将所述第一节点向量的位置信息存储至所述向量位置区段。
9.根据权利要求8所述的装置,所述元组生成模块,还配置为,采用初始化位置信息填充所述向量位置区段;
所述位置存储模块,将所述第一节点向量的位置信息存储至所述向量位置区段时,包括,用所述第一节点向量的位置信息替换所述第一数据元组中的初始化位置信息。
10.根据权利要求8所述的装置,所述元组存储模块,具体配置为:
将所述第一数据页作为当前数据页,从所述当前数据页的空闲存储区域的开端开始存储所述第一数据元组;
当检测到所述当前数据页已存满,且所述第一数据元组未存储完成时,生成第二数据页,将所述第二数据页作为当前数据页,返回执行从所述当前数据页的空闲存储区域的开端开始存储所述第一数据元组。
11.根据权利要求10所述的装置,所述元组存储模块,还配置为:
在生成第二数据页之后,在所述第二数据页的页头区域中存储所述第二数据页的前一数据页的数据页标识,在所述前一数据页的页尾区域中存储所述第二数据页的数据页标识。
12.根据权利要求10所述的装置,所述位置存储模块,基于所述第一数据页和所述第二数据页,确定所述第一节点向量的位置信息时,包括:
将所述第一数据页作为起始数据页,并将最后一个第二数据页作为末尾数据页,确定所述第一节点向量在所述起始数据页中的偏移量,以及所述第一节点向量在所述末尾数据页中的偏移量;
将所述起始数据页的数据页标识和对应的偏移量、所述末尾数据页的数据页标识和对应的偏移量,确定为所述第一节点向量的位置信息。
13.根据权利要求8所述的装置,还包括:
位置记录模块,配置为在将剩余数据存储至生成的所述第二数据页之后,记录最后一个第二数据页的空闲存储区域的开端。
14.根据权利要求8所述的装置,所述第一数据页和所述第二数据页连续,或者不连续。
15.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-7中任一项所述的方法。
16.一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010163627.4A CN111309985B (zh) | 2020-03-10 | 2020-03-10 | 基于PostgreSQL数据库的高维向量存储方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010163627.4A CN111309985B (zh) | 2020-03-10 | 2020-03-10 | 基于PostgreSQL数据库的高维向量存储方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111309985A CN111309985A (zh) | 2020-06-19 |
CN111309985B true CN111309985B (zh) | 2023-08-25 |
Family
ID=71145461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010163627.4A Active CN111309985B (zh) | 2020-03-10 | 2020-03-10 | 基于PostgreSQL数据库的高维向量存储方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111309985B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411632A (zh) * | 2011-12-27 | 2012-04-11 | 北京人大金仓信息技术股份有限公司 | 基于链表的内存数据库页式存储方法 |
CN103699544A (zh) * | 2012-09-27 | 2014-04-02 | 金蝶软件(中国)有限公司 | 跨页选择数据的方法和系统 |
CN104090954A (zh) * | 2014-07-04 | 2014-10-08 | 用友软件股份有限公司 | 只读表的连接方法和只读表的连接系统 |
CN105550345A (zh) * | 2015-12-25 | 2016-05-04 | 百度在线网络技术(北京)有限公司 | 文件操作方法和装置 |
CN106156301A (zh) * | 2016-06-30 | 2016-11-23 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
CN110196847A (zh) * | 2018-08-16 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 数据处理方法和装置、存储介质及电子装置 |
-
2020
- 2020-03-10 CN CN202010163627.4A patent/CN111309985B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102411632A (zh) * | 2011-12-27 | 2012-04-11 | 北京人大金仓信息技术股份有限公司 | 基于链表的内存数据库页式存储方法 |
CN103699544A (zh) * | 2012-09-27 | 2014-04-02 | 金蝶软件(中国)有限公司 | 跨页选择数据的方法和系统 |
CN104090954A (zh) * | 2014-07-04 | 2014-10-08 | 用友软件股份有限公司 | 只读表的连接方法和只读表的连接系统 |
CN105550345A (zh) * | 2015-12-25 | 2016-05-04 | 百度在线网络技术(北京)有限公司 | 文件操作方法和装置 |
CN106156301A (zh) * | 2016-06-30 | 2016-11-23 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
CN110196847A (zh) * | 2018-08-16 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 数据处理方法和装置、存储介质及电子装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111309985A (zh) | 2020-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9678969B2 (en) | Metadata updating method and apparatus based on columnar storage in distributed file system, and host | |
JP6141305B2 (ja) | 画像検索 | |
US7743013B2 (en) | Data partitioning via bucketing bloom filters | |
US8468146B2 (en) | System and method for creating search index on cloud database | |
CN111831581B (zh) | 数据读取方法、装置及数据存储设备 | |
CN107783770B (zh) | 页面配置更新方法、装置、服务器和介质 | |
CN109976743B (zh) | 一种代码提示的方法及装置 | |
CN111309985B (zh) | 基于PostgreSQL数据库的高维向量存储方法和装置 | |
US20180101312A1 (en) | Techniques for generating and operating on in-memory datasets | |
CN110059214B (zh) | 一种图像资源处理方法及装置 | |
CN115858473B (zh) | 基于训练系统与对象存储系统的数据交互方法及装置 | |
CN112463734A (zh) | 一种文件检索方法、系统及相关装置 | |
CN111190895B (zh) | 列式存储数据的组织方法、装置及存储介质 | |
CN110765125B (zh) | 一种存储数据的方法及装置 | |
EP3663936A2 (en) | Text-domain-based image retrieval | |
US20230068272A1 (en) | Information processing apparatus, information processing method, and storage medium for classifying object of interest | |
CN110569396B (zh) | 一种数据搜索方法、电子设备和计算机可读存储介质 | |
CN114489481A (zh) | 硬盘存储数据并访问的方法及系统 | |
CN111078157A (zh) | 一种分布式存储系统的卷信息查询方法、系统及相关组件 | |
CN114117992A (zh) | 一种序列化和反序列化方法、装置和电子设备 | |
CN112668659A (zh) | 模型训练方法、平台和电子设备 | |
CN106682221B (zh) | 问答交互的响应方法、装置及问答系统 | |
CN110795297B (zh) | 一种电子设备的测试方法及装置 | |
CN114003228B (zh) | 界面更新方法、装置、计算机设备以及存储介质 | |
KR102075709B1 (ko) | 컨텐츠 검색 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |