CN112035522B - 数据库数据获取方法和装置 - Google Patents
数据库数据获取方法和装置 Download PDFInfo
- Publication number
- CN112035522B CN112035522B CN202010686897.3A CN202010686897A CN112035522B CN 112035522 B CN112035522 B CN 112035522B CN 202010686897 A CN202010686897 A CN 202010686897A CN 112035522 B CN112035522 B CN 112035522B
- Authority
- CN
- China
- Prior art keywords
- data
- data table
- cpu
- hardware
- linked list
- 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
Images
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/24569—Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据库数据获取方法和装置,所述方法包括:在CPU中构建用于记录对数据库中数据表的调用顺序信息的CPU链表,并基于创建的CPU链表加载数据库中相应数据表的数据到所述CPU的缓冲器中,其中所述CPU链表中包括多个数据表节点,CPU链表的数据表节点中已加载数据表的数据包括对应数据表的结构信息和指向对应数据表的数据信息的内存地址的指针;读取CPU缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件中,并利用硬件链表记录加载到硬件的数据表的结构信息;在用户输入的SQL语句为查询语句的情况下,基于CPU链表和/或硬件链表中的数据执行数据表的查询。本发明实施例能够加速硬件获取数据表资源。
Description
技术领域
本发明涉及大数据应用中的数据库技术,尤其涉及一种数据库数据获取方法和装置。
背景技术
大数据时代的到来加速了数据库技术的发展,使得数据库的使用越来越普及,并且使得需要处理的数据规模逐年呈***式增长。而随着智能终端的普及,物联网(Internetof things,IOT)的应用,乃至5G时代的到来,不仅数据规模将更加庞大,而且对于低时延特性的要求迫使如何实时高效地处理数据成为一个亟需解决的问题。
当前大部分数据库仍然使用CPU进行处理,然而CPU高复杂、低并行的特点明显与大规模数据所需的低复杂、高并行的处理相性不合。因此使用GPU乃至专用芯片这样高并行的硬件来加速数据库的处理是大势所趋。
然而即使是专用芯片,其内存较于大数据之规模仍然相形见绌,因此,运行时从硬盘读取数据不可避免,那么在硬盘IO操作速度慢的前提下,如何加速硬件获取数据表资源成为了一个关键性的问题。
发明内容
有鉴于此,本发明实施例提供了一种SQL语句复用方法和装置,通过SQL语句的复用来缩短数据库查询时间。
本发明的一个方面,提供了一种数据库数据的获取方法,该方法包括以下步骤:
在CPU中构建用于记录对数据库中数据表的调用顺序信息的CPU链表,并基于创建的CPU链表加载数据库中相应数据表的数据到所述CPU的缓冲器中,其中所述CPU链表中包括多个数据表节点,CPU链表的数据表节点中已加载数据表的数据包括对应数据表的结构信息和指向对应数据表的数据信息的内存地址的指针;
读取CPU缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件中,并利用硬件链表记录加载的数据表的结构信息,其中所述硬件链表中包括多个数据表节点,各数据表节点记录已加载到硬件的数据表的结构信息;
在用户输入的SQL语句为查询语句的情况下,基于CPU链表和/或硬件链表中的数据执行数据表的查询。
可选的,在构建CPU链表之前,所述方法还包括:通过接口调用数据库中数据表的结构信息;所述基于创建的CPU链表加载数据库中相应数据表的数据到所述CPU的缓冲器中,包括:基于调用的数据表的结构信息和设定的硬件数据块大小将所述CPU链表记录的待加载数据表的数据分割成多个数据块并存储在CPU的缓冲器中。
可选地,所述在CPU中构建用于记录对数据库中数据表的调用信息的CPU链表,包括:按照数据表在数据库中的顺序构建所述CPU链表中的数据表节点;所述读取CPU缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件中,包括:按照所述CPU链表中数据表节点的顺序读取CPU的缓冲器已加载数据表的数据,并打包加载至指定硬件中。
可选地,基于所述CPU链表和/或硬件链表中数据表节点的数据表调用时序,预测下一个SQL语句涉及的数据表;在预测的数据表未加载在CPU中或硬件中的情况下,基于预测的数据表进行该数据表数据到CPU或硬件的加载。
可选地,所述方法还包括:在接收SQL语句之前,指定要缓存在CPU的数据表和缓存记录数量,以基于所述指定要缓存的数据库表和缓存记录数量进行所述CPU链表的构建。可选地,利用map结构记录所述CPU链表和/或硬件链表的链表节点的信息,所述map结构中链表节点标识作为value值,以数据表ID作为key值。
可选地,所述方法还包括:将对数据表的查询结果存储于CPU中缓存的查询结果集中,所述查询结果集中包含查询过的数据表相关信息。
可选地,所述基于CPU链表和/或硬件链表中的数据执行数据表的查询,包括:在确定所述查询语句对应的数据表尚未加载在硬件中的情况下,从CPU链表中读取对应的数据表打包加载至所述硬件中。
可选地,所述从CPU链表中读取对应的数据表打包加载至所述硬件中,包括:确定所述查询语句对应的数据表是否已加载在CPU中,在尚未加载在CPU中的情况下,从数据库中读取对应的数据表加载至所述CPU中,并从构建的前CPU链表中读取对应的数据表打包加载至所述硬件中;在确定所述查询语句对应的数据表已加载在CPU中的情况下,直接从构建的CPU链表中读取对应的数据表打包加载至所述硬件中。
可选地,在确定所述查询语句对应的数据表是否已加载在CPU中之前,还包括:基于所述查询语句确定对数据表的查询结果是否存在于CPU中缓存的结果集中,确定在结果集中的情况下,从所述结果集中获取相应数据表的查询结果。
可选地,所述结果集为以先前查询结果的结果指针为value值,以SQL语句相关标识为key值构建的map数据结构。
可选地,所述方法还包括:基于数据表的调用记录和/或为数据表设定的优先级修改所述CPU链表和/或所述硬件链表中数据表节点的顺序。
本发明的另一方面,提供了一种数据库数据的获取装置,该装置包括:处理模块,其用于在CPU中构建用于记录对数据库中数据表的调用信息的CPU链表,并基于创建的CPU链表加载数据库中相应数据表的数据到所述CPU的缓冲器中,其中所述CPU链表中包括多个数据表节点,CPU链表的数据表节点中已加载数据表的数据包括对应数据表的结构信息和指向对应数据表的数据信息的内存地址的指针;所述缓冲器,用于缓存所述CPU链表中已加载数据表的数据;打包模块,其用于读取缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件中,并在所述指定硬件中利用硬件链表记录加载的数据表的结构信息,其中所述硬件链表中包括多个数据表节点,各数据表节点记录已加载到硬件的数据表的结构信息;解析器,其用于接收用户输入的SQL语句,在用户输入的SQL语句为查询语句的情况下,基于所述CPU链表和/或硬件链表中的数据执行数据表的查询。
可选地,所述缓冲器包括元数据模块和结果集;所述元数据模块用于缓存加载的数据表;所述结果集用于存储对数据表的查询结果;所述打包模块的打包加载包括将所述元数据模块中存储的数据表打包成硬件能够识别的格式;所述装置还包括:预测模块,用于基于所述CPU链表和/或硬件链表中数据表节点的顺序指示的数据表调用历史时序,预测下一个SQL语句涉及的数据表;所述处理模块基于所述预测模块预测的数据表进行该数据表数据到CPU链表或硬件链表的加载。
本发明的另一方面,提供了一种数据库数据的获取装置,包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如前所述方法的步骤。
本发明的又一方面,还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如前所述方法的步骤。
本发明实施例提供的数据库数据的获取装置和方法,能够加速硬件获取数据表资源。
此外,在SQL语句执行完毕后,在由CPU向上返回结果并等待下一条指令时,硬件会处于空闲状态,因此通过预测下一条语句可能用到的数据表并提前进行加载。因此,本发明实施例可利用硬件空闲的时间提前加载、打包,同时利用CPU的内存缓存一部分数据表。进一步地,本发明实施例还缓存了结果集以备复用。
本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在书面说明及其权利要求书以及附图中具体指出的结构实现到并获得。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:
图1为本发明一实施例中数据库数据获取方法的流程示意图。
图2为本发明一实施例中CPU链表以及将CPU链表中的数据表节点的数据加载到CPU的示意性示例。
图3为本发明另一实施例中数据库数据获取方法的流程示例。
图4为本发明一实施例中示出了数据库数据获取装置的结构的整体***结构框图。
图5为本发明一实施例中数据库数据的获取装置执行的数据获取方法的流程示意性图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
现有技术获取数据表资源的方式包括:(1)使用最基本的即用即取方式;(2)使用直接内存存取(Direct Memory Access,DMA)绕过CPU直接与硬盘进行交互的方式。
对于没有缓冲器辅助的即用即取方式,其难以在硬件忙碌时从磁盘读取数据,因此浪费总线资源,效率偏低;并且,这种方式需要由硬件设计表替换机制,占用硬件资源的同时还难以迭代;此外,这种方式对于结果没有缓存,因此难以复用,即使是相同的语句,相同的结果,仍然需要硬件重新进行计算,同样造成了效率的低下。
对于DMA方式,其虽然提升了获取数据表的速度,但DMA的读写速度比CPU内存与硬件之间交互的速度要慢,因此同样存在不足与缺陷。
发明人在进行利用硬件对数据库加速的研究时,针对如何加速硬件获取数据表的问题,研究出了一种可以通过使用CPU来加速数据表的获取的方案。该方案在CPU中建立CPU调用顺序链表(下面简称CPU链表),并提供了基于CPU链表的数据获取加速流程,大大加速了硬件获取数据表资源的效率。此外,在硬件忙碌时,可以预测需接下来要使用的数据表,并提前加载、打包成硬件所需的格式,以此来加速数据表数据的获取。
图1为本发明一实施例中数据库数据获取方法的流程示意图。如图1所示,该方法包括以下步骤:
步骤S110,初始化步骤,在CPU中构建用于记录对数据库中数据表的调用顺序信息的CPU链表,并基于创建的CPU链表加载数据库中相应数据表的数据到所述CPU的缓冲器中。
例如,在CPU的缓冲器中构建CPU链表,该CPU链表中可包括多个数据表节点,每个数据表节点对应一个数据表的数据,每个数据表节点中的数据包括数据库中对应数据表的结构信息和指向加载到CPU缓冲器中的对应数据表的数据的内存地址的指针。
在执行本步骤之前,该初始化步骤还可包括:
步骤S100,CPU通过接口调用数据库中数据表的结构信息,该结构信息例如包括表名、列数量、列名、列值类型、列值长度、行数等。
该步骤例如可通过管理模块(如图4中的中间件(Mediator))来执行,其可以实现通过接口对其他模块的调度和控制。基于初始化步骤中调用的数据表的结构信息可在CPU中构建CPU链表,该CPU链表例如可存储在缓存器中,但本发明并不限于此。
此外,管理模块可根据预设的数据块大小,计算数据表需要分割成多少个数据块进行存储,以及每个数据块可以存储多少行。这样,在基于创建的CPU链表加载数据表时,可以根据数据表的结构信息将数据表按照设定的数据块大小,来存储在CPU的缓冲器中。该预设的数据块大小为优选为预先设置好的硬件数据块大小,以便于后面基于CPU链表数据将数据表加载到硬件。
图2中的(a)示出了执行初始化步骤后构建的CPU链表的示意图。CPU链表可为双向链表结构,链表中的每个节点中存储的数据为数据表的结构信息与指向缓存的数据信息的指针。初始化时,可按数据表在数据库中的顺序构建CPU链表的数据表节点(每个节点对应一个数据表),此时对应的数据信息指针为空。加载时,每加载一个数据表的数据到CPU中(例如加载到CPU的元数据(MetaData模块)中),就将对应节点的数据信息指针指向加载好的数据。头指针与尾指针之间的表(包含头指针与尾指针所指的表)为已经加载到CPU内缓存的表,若尾指针为空,则表示CPU内没有缓存任何表数据。图2的(b)中,CPU链表中的头指针和尾指针表示表1至表3的数据已经加载至CPU的缓存中。图2中(a)和(b)示出的CPU链表为包含7个数据表示例,但本发明并不限于此,一个CPU链表中可以含有更多或更少的数据表。
在本发明一实施例中,在构建CPU链表之前,可先指定要缓存在CPU中的数据表和缓存记录数量,以基于指定要缓存的数据库表和缓存记录数量进行CPU链表的构建,来确定CPU链表的长度。
步骤S120,读取CPU链表中已加载的至少部分数据表的数据,打包加载至指定硬件中,并利用硬件调用顺序链表(简称硬件链表)记录加载的数据表的结构信息。
该步骤可以在接收到SQL语句之后执行;也可以在接收的SQL语句之前执行,即预先加载数据表到硬件中。
本实施例中,利用硬件链表记录加载到硬件中的数据表的结构信息。相应地,可预先构建硬件链表。如图2中的(a)和(b)所示。在将表1至数据表3的数据加载至硬件中后,如图2的(c)所示,硬件链表中记录加载的每个数据表节点的结构信息,可以不存储表的数据信息。也即,在硬件链表中,每个数据表节点中的数据包括对应数据表的结构信息,而对应的指针可以是置空的。此外,硬件链表与CPU链表还有一个区别在于:硬件链表的尾指针一定指向链表的尾端,其后不再有任何节点。在本发明实施例中,在读取CPU缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件的步骤中,优先按照CPU链表中数据表节点的顺序读取CPU的缓冲器已加载数据表的数据,并打包加载至指定硬件中。
在本发明实施例中,对硬件链表的构建也可先指定要存储在硬件中的数据表和记录数量,以基于指定的数据表和记录数量进行硬件链表的构建。
在本发明实施例中,CPU链表和硬件链表都可用于记录对数据库中数据表的调用顺序信息。在将数据表信息加载至硬件成功后,或者释放CPU空间时,CPU释放对应表数据信息指针指向的内存块,CPU链表的相应指针置空,如图2中的(c)所示。在将数据表信息加载至硬件成功后或同步地,还可以继续向CPU加载数据表,图2的(d)中的CPU链表表示将表4至表6加载到了CPU中。之后每次从硬件链表或CPU链表调用一张表时,可更改其在硬件链表或CPU链表中的位置,将被调用的数据表放到头节点位置,其余表依次后移,参见图2的(d)、(e)显示的对表3的调用。因此,硬件链表和CPU链表中可记录有数据表节点的调用信息(如体现调用顺序的信息),如硬件链表和CPU链表中节点的顺序本身即存储了数据表的调用记录,尾指针指向的节点一定是最久没有被使用过的表之一。在这种情况下,当CPU内存不够,需要进行数据表的替换时,优先删除CPU链表的尾指针指向的表,来腾出空间加载新的表。同样硬件中需要进行数据表的替换时,优先删除硬件链表的尾指针指向的表,来腾出空间加载新的表。如示例图3中要释放CPU内存并调用表7时,优先释放表6,然后调用表7,并且被调用的表7放到头节点位置,调用过程如图3中的(e)-(f)所示。在要释放硬件内存时,优先删除硬件链表的尾指针指向的表2,以腾出空间加载新的表7,硬件释放的表2重新加载到CPU中,如图3中的(g)-(i),也即,在进行CPU链表和/或硬件链表中数据表的替换时,CPU链表和/或硬件链表中数据表节点的顺序发生变换。
此外,在本发明一实施例中,还可以在CPU中设置数据表的优先级,比如将数据表设为高优先级和低优先级,数据表替换时优先替换掉低优先级的表。在链表中,低优先级的数据表可始终排在高优先级的表之后,同样优先级的数据表按照调用顺序排序。比如在图2中调用表3时,如果在这之前,表1、表2被设置为了高优先级,而表3为低优先级,则调用后硬件链表的顺序不再是表3→表1→表2,而仍然是表1→表2→表3,这时,之后再加载表7时,将删掉表3,这样,高优先级的表1、表2得以保留在硬件中不被替换掉,即使表3刚被调用过。这样,在调整硬件链表和/或CPU链表中数据表的顺数时,可以基于数据表的调用记录和/或为数据表设定的优先级修改CPU链表和/或硬件链表中数据表节点的顺序。前面所说的设置高优先级和低优先级仅为示例,还可以设置更多等级的优先级别,并基于设置的优先级别来调整硬件链表和CPU链表中表的顺序。
此外,在本发明实施例中,在将表数据打包加载到硬件时,为了便于硬件对表数据的识别,可先将数据库中表的数据打包,转换为硬件能够识别的格式,然后再加载。所谓打包,就是要将数据转化成硬件可以识别且易于处理的格式,而打包后的加载,就是将数据块直接通过PCI-E总线等数据线直接传输给硬件。
例如,一般而言数据库中的数据为按行存储的格式,但由于GPU或者KPU(Kernelprocessing unit)等硬件都是高并行的处理器,对于这样的处理器,按列存储的格式更方便进行读取和处理,因此在本发明实施例中,可以在CPU的缓冲器(Buffer模块)获取表数据之后,通过缓冲器(如缓冲器中的数据打包(DataRebuild模块)会将其转化为按列存储的格式。但本发明并不限于此,原则上讲,只要打包成硬件可以识别的格式都可以。
在将表数据打包成方便硬件处理的格式并存储到硬件之后,缓冲器(Buffer)可记录打包后的数据大小,并更新CPU中数据块的数量。CPU的缓冲器从数据库中读取新数据表的数据直至内存空间不够(即CPU中数据块数量加上新数据表所需数据块数量达到预先设定的阈值)或者所有数据表已被读完。
从CPU链表的表头开始,通过CPU的管理模块可将CPU链表中数据表的数据加载到硬件中,直至硬件内存已满,或者CPU中所有数据表都已加载进硬件中。每加载一个数据表进硬件,就将其结构信息从CPU链表移至硬件链表,将其数据信息从CPU中删除,并更新硬件存储数据块数量。
在将CPU链表中的数据表信息向硬件进行加载的过程中,如果硬件可用空间不够(即硬件中存储数据块数量加上CPU链表表头的数据表所占数据块数量大于预先设定的阈值),则先暂停到硬件的加载,而是等待用户输入SQL语句。如果硬件空间未满,则继续进行数据表数据到硬件的加载。
在本发明实施例中,可利用map结构记录基于CPU链表和/或硬件链表中加载了数据表数据的链表节点的信息,更具体地,可在相应的CPU链表和/或硬件链表构建之后,来以每一个链表节点标识作为value,以数据表id作为key构建CPU链表节点和硬件链表节点各自的hash map结构。可以将map理解为一个键-值(key-value)表,键(key)就是表的ID,而每一个ID对应的值(value)就是每一个链表的节点,对于CPU链表来说,其链表节点中存储的信息就是前文所说的数据表的结构信息与一个指向数据信息的指针,对于硬件链表来说,其链表节点中存储的信息就是前文所说的数据表的结构信息与一个指向数据信息的指针。
步骤S130,在用户输入的SQL语句为查询语句的情况下,基于CPU链表和/或硬件链表中的数据执行数据表的查询。
更具体地,上层(如图4中的中间件,但本发明并不限于此)可确定是否有SQL语句输入,如果有,通过解析器(Parser)确定用户输入的语句是否为查询语句,如SELECT语句。
在SQL语句是查询语句的情况下,基于CPU链表和/或硬件链表中的数据执行数据表的查询可包括以下步骤:
步骤S1311,可确定查询语句对应的数据表是否已加载在硬件中,在已加载在硬件中的情况下,基于加载在硬件中对应的数据表执行查询语句。
在本发明实施例中,可通过硬件链表对应的map结构来确定查询语句对应的数据表是否已加载在硬件中。
步骤S1312,在确定查询语句对应的数据表尚未加载在硬件中的情况下,从CPU链表中读取对应的数据表打包加载至硬件中。
其中,从CPU链表中读取对应的数据表打包加载至硬件中的步骤可包括:
(1)确定查询语句对应的数据表是否已加载在CPU中,例如可通过CPU链表对应的map结构来确定查询语句对应的数据表是否已加载在CPU中;在尚未加载在CPU中的情况下,从数据库中读取对应的数据表加载至CPU中,并从构建的CPU链表中读取对应的数据表打包加载至硬件中,并通过硬件链表记录加载至硬件中的数据表的结构信息。
(2)在确定查询语句对应的数据表已加载在CPU中的情况下,直接从构建的CPU链表中读取对应的数据表打包加载至硬件中。
然后,回到步骤S1311,基于加载在硬件中对应的数据表执行查询语句。
作为示例,可利用构建的指示加载到CPU或硬件中的数据表节点的map结构查询对应数据表是否已经加载到CPU或硬件中。
基于如上步骤,本发明可以利用提前加载在CPU或硬件中的数据表的数据来实现更快速的SQL语句查询。
由于CPU向上返回结果并等待下一条指令时,硬件会处于空闲状态,因此为了进一步加速对数据表资源的获取,在本发明实施例中,可由缓冲器的管理模块(如Mediator)预测下一条查询语句可能用到的数据表并提前进行加载。此时,本发明实施例的数据库数据的获取方法还可包括以下步骤:
(1)基于CPU链表和/或硬件链表中数据表节点的数据表调用时序,预测下一个SQL语句涉及的数据表。
(2)在预测的数据表未加载在CPU中或硬件中的情况下,基于预测的数据表进行该数据表数据到CPU链表或硬件链表的加载。
例如,作为示例,可采用较为简单的算法,即上一次调用一个数据表时,所述上一次调用之后的下一句查询语句用到的数据表可作为对当前数据表的预测结果。如:上一次SQL查询调用数据表A之后,紧接着的后续调用用到的数据表为非数据表A的数据表B。则等下一次再调用表A时,预测模块的预测算法(Predictor)就会预测,这次也可能会调用数据表B。于是,基于预测的数据表B进行该数据表B的数据到CPU链表或硬件链表的加载。
本发明实施例利用硬件空闲的时间可以提前加载、打包,同时利用CPU的内存可缓存一部分数据表,从而加速了数据库的数据查询速度。
此外,为了实现数据的复用,在本发明一些实施例中,在确定查询语句对应的数据表是否已加载在硬件链表中之前,还可包括:基于查询语句确定对数据表的查询结果是否存在于CPU中缓存的结果集中,确定在结果集中的情况下,从结果集中获取相应数据表的查询结果。
该结果集例如可以是以已查询过的先前查询结果的结果指针为value值,以SQL语句相关标识为key值构建的map数据结构,其中,作为key值的SQL语句相关标识可以是分析模块对这个结果对应的SQL语句进行处理得到的标识信息,可以是SQL语句本身,也可以是表示SQL语句的字符串等。利用该map结构记录已经查询过的数据结果信息。在本发明实施例中,先到结果集中去查询可以省去可能的查询操作。结果集中缓存的是以前查询过,现在仍然有效的查询结果。对于这种查询,无需再调用硬件执行一遍查询操作,直接从缓存中调用结果即可。
例如,如果需要连续执行两条相同的查询语句,在执行第一次查询时,需要使用硬件进行查询筛选操作才能获得结果,也即硬件在已有的数据库中的表上执行查询操作,并选取其中符合条件的行和列。在返回结果时,同时将查询结构缓存在结果集中。
在没有对数据表进行任何数据改变的情况下,再次执行了一条相同的SELECT语句时,对于该第二次查询,通过先去结果集中看是否有可以复用的结果集,可以省去使用硬件进行查询操作,而直接可以获得结果,通过数据复用大大提高了查询速度,节省了硬件资源。
与前述方法相应地,本发明实施例还提供了一种可在CPU中实现的数据库数据的获取装置,如图4所示,该装置包括缓冲器、辅助模块、数据打包模块和预测器(预测模块),其中辅助模块包括中间件(为管理模块,也可称处理模块)和解析器,管理模块用于在CPU中构建用于记录对数据库中数据表的调用顺序信息的CPU链表,并基于创建的CPU链表加载数据库中相应数据表的数据到CPU的缓冲器中。
所述缓冲器用于缓存CPU链表中已加载数据表的数据;缓冲器中可包括多个子模块,如元数据模块和结果集等;元数据模块用于缓存加载的数据表;结果集用于存储对数据表的查询结果。
数据打包模块用于读取缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件中,并在指定硬件中利用硬件链表记录加载到硬件的数据表的结构信息。数据打包模块的打包加载包括将元数据模块中存储的数据表打包成硬件能够识别的格式。
解析器用于接收用户输入的SQL语句,在用户输入的SQL语句为查询语句的情况下,基于CPU链表和/或硬件链表中的数据执行数据表的查询。
预测模块用于基于CPU链表和/或硬件链表中数据表节点的顺序指示的数据表调用历史时序,预测下一个SQL语句涉及的数据表。处理模块基于预测模块预测的数据表进行该数据表数据到CPU或硬件的加载。
图4所示的实施例中,辅助模块可通过ODBC(Open Database Connectivity,开放数据库连接)Connection模块访问数据库,在此ODBC模块可替换为任意处理数据库连接的方案。硬件部分中的硬件例如可以是GPU或KPU等加速器硬件。
图5为本发明实施例中数据库数据的获取装置执行的数据获取方法的流程示意性图。如图5所示,该流程包括如下步骤:
步骤S11,初始化,预加载部分数据表到缓冲器的元数据(MetaData)模块和硬件中。
由于前面步骤S110和步骤S120中详细描述了数据表到CPU的缓冲器和到硬件的加载,在此不再赘述。
步骤S12,等待用户输入SQL语句。
如果上层模块(如中间件)接收到SQL语句,则执行步骤S13,通过解析器(Paeser)判断该SQL语句是否为查询语句(SELECT语句)。如果是查询语句,则执行步骤S14,,即获取用于鉴别查询语句的唯一标识,然后通过map结构查询对应的结果是否被缓存在缓冲器的子模块ResultSet中,如果是则进一步执行步骤S21,将查询结果返回上层。
如果在步骤S13中判断SQL语句不是查询语句,则基于语句内容进行相应的操作。由于本申请进着重讨论对查询语句的处理,因此对于非查询语句的情况不进行详细描述。
步骤S15,确定要查询的相关数据表是否缓存在缓冲器的元数据子模块中,即,可通过构建的map结构查询对应表是否已经加载到CPU或硬件中;如果是,则执行步骤S17,如果否,则执行步骤S16。
步骤S16,从数据库中加载没有缓存的数据表缓存在缓冲器的元数据子模块中,并由打包模块打包成硬件需要的格式。
步骤S17,通过元数据子模块将不在硬件上的相关数据表加载到硬件上。
步骤S18,执行SQL语句,同时利用预测模块预测下一条语句可能用到的数据表,并通过元数据模块进行预加载。
步骤S19,判断要执行的SQL语句是否为查询语句,在确定为查询语句的情况下,在硬件中执行查询结果并将查询结果缓存在结果集中。如果不是查询语句,则进行相应处理后将结果返回上层。
然后等待下一个语句。
如果在此过程中,如果执行了SQL语句为对相关表的非查询操作,如对数据库中的数据表中的数据进行了删除等操作,则可从结果集中删除涉及的相关表的结果集,因为此时结果集已经失效,不能再直接被复用。
本发明的如上方法能够进行数据复用,且CPU利用硬件计算的空闲***加载数据表,减少了硬件可能的等待数据表的时间。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现上述数据库中数据获取方法的步骤。该计算机可读存储介质可以是有形存储介质,诸如光盘、U盘、软盘、硬盘等。
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、***和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读存储介质”可以包括能够存储或传输信息的任何介质。机器可读存储介质的例子包括随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的有形存储介质。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或***。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种数据库数据的获取方法,其特征在于,该方法包括以下步骤:
在CPU中构建用于记录对数据库中数据表的调用顺序信息的CPU链表,并基于创建的CPU链表加载数据库中相应数据表的数据到所述CPU的缓冲器中,其中所述CPU链表中包括多个数据表节点,CPU链表的数据表节点中已加载数据表的数据包括对应数据表的结构信息和指向对应数据表的数据信息的内存地址的指针;
读取CPU缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件中,并利用硬件链表记录加载的数据表的结构信息,其中所述硬件链表中包括多个数据表节点,各数据表节点记录已加载到硬件的数据表的结构信息;
在用户输入的SQL语句为查询语句的情况下,基于CPU链表和/或硬件链表中的数据执行数据表的查询;所述基于CPU链表和/或硬件链表中的数据执行数据表的查询包括:
确定所述查询语句对应的数据表是否已加载在硬件中,在已加载在硬件中的情况下,基于加载在硬件中对应的数据表执行所述查询语句;
在确定所述查询语句对应的数据表尚未加载在硬件中的情况下,从CPU链表中读取对应的数据表打包加载至所述硬件中并基于加载在硬件中对应的数据表执行所述查询语句。
2.根据权利要求1所述的方法,其特征在于,
在构建CPU链表之前,所述方法还包括:通过接口调用数据库中数据表的结构信息;
所述基于创建的CPU链表加载数据库中相应数据表的数据到所述CPU的缓冲器中,包括:基于调用的数据表的结构信息和设定的硬件数据块大小将所述CPU链表记录的待加载数据表的数据分割成多个数据块并存储在CPU的缓冲器中。
3.根据权利要求1所述的方法,其特征在于,
所述在CPU中构建用于记录对数据库中数据表的调用信息的CPU链表,包括:按照数据表在数据库中的顺序构建所述CPU链表中的数据表节点;
所述读取CPU缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件中,包括:按照所述CPU链表中数据表节点的顺序读取CPU的缓冲器已加载数据表的数据,并打包加载至指定硬件中。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
基于所述CPU链表和/或硬件链表中数据表节点的数据表调用时序,预测下一个SQL语句涉及的数据表;
在预测的数据表未加载在CPU中或硬件中的情况下,基于预测的数据表进行该数据表数据到CPU或硬件的加载。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在构建CPU链表之前,指定要缓存在CPU中的数据表和缓存记录数量,以基于所述指定要缓存的数据库表和缓存记录数量进行所述CPU链表的构建。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将对数据表的查询结果存储于CPU中缓存的查询结果集中,所述查询结果集中包含查询过的数据表信息。
7.根据权利要求1所述的方法,其特征在于,所述从CPU链表中读取对应的数据表打包加载至所述硬件中,包括:
确定所述查询语句对应的数据表是否已加载在CPU中,在尚未加载在CPU中的情况下,从数据库中读取对应的数据表加载至所述CPU中,并从构建的CPU链表中读取对应的数据表打包加载至所述硬件中;
在确定所述查询语句对应的数据表已加载在CPU中的情况下,直接从构建的CPU中读取对应的数据表打包加载至所述硬件中。
8.根据权利要求7所述的方法,其特征在于,在确定所述查询语句对应的数据表是否已加载在CPU中之前,还包括:
基于所述查询语句确定对数据表的查询结果是否存在于CPU中缓存的结果集中,确定在结果集中的情况下,从所述结果集中获取相应数据表的查询结果。
9.根据权利要求6所述的方法,其特征在于,
所述结果集为以先前查询结果的结果指针为value值,以SQL语句相关标识为key值构建的map数据结构。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
基于数据表的调用记录和/或为数据表设定的优先级修改所述CPU链表和/或所述硬件链表中数据表节点的顺序。
11.一种数据库数据的获取装置,其特征在于,该装置包括:
处理模块,其用于在CPU中构建用于记录对数据库中数据表的调用顺序信息的CPU链表,并基于创建的CPU链表加载数据库中相应数据表的数据到所述CPU的缓冲器中,其中所述CPU链表中包括多个数据表节点,CPU链表的数据表节点中已加载数据表的数据包括对应数据表的结构信息和指向对应数据表的数据信息的内存地址的指针;
所述缓冲器,用于缓存所述CPU链表中已加载数据表的数据;
打包模块,其用于读取缓冲器中已加载数据表中的至少部分数据表的数据,打包加载至指定硬件中,并在所述指定硬件中利用硬件链表记录加载到硬件的数据表的结构信息,其中所述硬件链表中包括多个数据表节点,各数据表节点记录已加载到硬件的数据表的结构信息;
解析器,其用于接收用户输入的SQL语句,在用户输入的SQL语句为查询语句的情况下,基于所述CPU链表和/或硬件链表中的数据执行数据表的查询;所述基于CPU链表和/或硬件链表中的数据执行数据表的查询包括:
确定所述查询语句对应的数据表是否已加载在硬件中,在已加载在硬件中的情况下,基于加载在硬件中对应的数据表执行所述查询语句;
在确定所述查询语句对应的数据表尚未加载在硬件中的情况下,从CPU链表中读取对应的数据表打包加载至所述硬件中并基于加载在硬件中对应的数据表执行所述查询语句。
12.根据权利要求11所述的数据库数据的获取装置,其特征在于,
所述缓冲器包括元数据模块和结果集;所述元数据模块用于缓存加载的数据表;所述结果集用于存储对数据表的查询结果;
所述打包模块的打包加载包括将所述元数据模块中存储的数据表打包成硬件能够识别的格式;
所述装置还包括:预测模块,用于基于所述CPU链表和/或硬件链表中数据表节点的顺序指示的数据表调用历史时序,预测下一个SQL语句涉及的数据表;
所述处理模块基于所述预测模块预测的数据表进行该数据表数据到CPU链表或硬件链表的加载。
13.一种数据库数据的获取装置,包括处理器和存储器,其特征在于,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该装置实现如权利要求1至10中任意一项所述方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至10中任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010686897.3A CN112035522B (zh) | 2020-07-16 | 2020-07-16 | 数据库数据获取方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010686897.3A CN112035522B (zh) | 2020-07-16 | 2020-07-16 | 数据库数据获取方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112035522A CN112035522A (zh) | 2020-12-04 |
CN112035522B true CN112035522B (zh) | 2021-09-07 |
Family
ID=73579556
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010686897.3A Active CN112035522B (zh) | 2020-07-16 | 2020-07-16 | 数据库数据获取方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112035522B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113010513A (zh) * | 2021-03-01 | 2021-06-22 | 中国工商银行股份有限公司 | 热加载方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880678A (zh) * | 2012-09-11 | 2013-01-16 | 哈尔滨工程大学 | 一种嵌入式实时内存数据库 |
CN103729471A (zh) * | 2014-01-21 | 2014-04-16 | 华为软件技术有限公司 | 数据库查询方法和装置 |
CN105095421A (zh) * | 2015-07-14 | 2015-11-25 | 南京国电南自美卓控制***有限公司 | 一种实时数据库的分布式的存储方法 |
WO2019239412A2 (en) * | 2018-06-14 | 2019-12-19 | Artsim Ltd. | Hardware based priority queue |
CN111221912A (zh) * | 2020-01-06 | 2020-06-02 | 中科驭数(北京)科技有限公司 | 数据库和硬件之间的数据同步方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150397B (zh) * | 2013-03-26 | 2016-03-16 | 北京经纬恒润科技有限公司 | 一种数据索引创建方法、数据检索方法和*** |
CN109213772B (zh) * | 2018-09-12 | 2021-03-26 | 华东师范大学 | 数据存储方法及NVMe存储*** |
-
2020
- 2020-07-16 CN CN202010686897.3A patent/CN112035522B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880678A (zh) * | 2012-09-11 | 2013-01-16 | 哈尔滨工程大学 | 一种嵌入式实时内存数据库 |
CN103729471A (zh) * | 2014-01-21 | 2014-04-16 | 华为软件技术有限公司 | 数据库查询方法和装置 |
CN105095421A (zh) * | 2015-07-14 | 2015-11-25 | 南京国电南自美卓控制***有限公司 | 一种实时数据库的分布式的存储方法 |
WO2019239412A2 (en) * | 2018-06-14 | 2019-12-19 | Artsim Ltd. | Hardware based priority queue |
CN111221912A (zh) * | 2020-01-06 | 2020-06-02 | 中科驭数(北京)科技有限公司 | 数据库和硬件之间的数据同步方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112035522A (zh) | 2020-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11537578B2 (en) | Paged column dictionary | |
US10348815B2 (en) | Command process load balancing system | |
WO2019184618A1 (zh) | 数据存储的方法、装置、服务器和存储介质 | |
CN104102695B (zh) | 智能设备启动过程的数据处理方法及智能设备 | |
CN110532347B (zh) | 一种日志数据处理方法、装置、设备和存储介质 | |
CN110069557B (zh) | 数据传输方法、装置、设备及存储介质 | |
CN112148736B (zh) | 缓存数据的方法、设备及存储介质 | |
JP2000347982A (ja) | 情報処理装置並びにコンピュータに実行させるためのプログラムを記録した記録媒体 | |
CN112035522B (zh) | 数据库数据获取方法和装置 | |
CN114610472B (zh) | 异构计算中多进程管理方法及计算设备 | |
CN112860412B (zh) | 业务数据处理方法、装置、电子设备及存储介质 | |
CN111625600B (zh) | 数据存储的处理方法、***、计算机设备及存储介质 | |
CN114077690A (zh) | 向量数据处理方法、装置、设备及存储介质 | |
CN107450859B (zh) | 一种读取文件数据的方法和装置 | |
JP2010128812A (ja) | データ管理システム及びデータ管理方法及びデータ管理プログラム | |
CN113384872B (zh) | 在微端中处理信息资源的方法、装置、电子设备及存储介质 | |
US5717918A (en) | Method for concurrently performing a physical sequential scan of a database into a database buffer which is queued until a preceding scan is completed | |
JP2009199384A (ja) | データ処理装置 | |
CN117393046B (zh) | 一种空间转录组测序方法、***、介质及设备 | |
JP3180336B2 (ja) | 多層バッファを用いるデータアクセス方法 | |
CN111722874B (zh) | 移动端代码的自动清理方法、装置、设备及存储介质 | |
CN112764908B (zh) | 网络数据采集处理方法、装置和电子设备 | |
CN117055811A (zh) | 一种总线访问命令处理方法、装置、芯片及存储介质 | |
CN116303125B (zh) | 请求调度方法、缓存、装置、计算机设备及存储介质 | |
JPH0728836A (ja) | データベース検索方法及びこの方法を用いたデータベースシステム |
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 |