数据库访问方法及装置与流程

文档序号:20917887发布日期:2020-05-29 13:46阅读:149来源:国知局
本发明涉及计算机
技术领域
:,尤其涉及一种数据库访问方法及装置。
背景技术
::随着数字社会的到来,在各种应用场景中,对海量数据的调取均愈发频繁,对数据库加速处理的需求更丰富,对数据即时处理的需求也大大增加,因此数据库加速迫在眉睫。由于cpu(centralprocessingunit,中央处理器)在某些专用领域的性能不够出色,当前阶段趋于采用cpu作为宿主端,并利用gpu(graphicsprocessingunit,图形处理器)、fpga(fieldprogrammablegatearray,现场可编程门阵列)、asic(applicationspecificintegratedcircuit,专用集成电路)等高性能专用硬件加速数据库处理过程,这样的数据库系统整体上是一个异构系统。专用硬件数据库相比于通常的cpu上运行的数据库,具有很高的性能。但专用硬件是一个协处理器,仍然必须由cpu将待处理数据传输到专用硬件,专用硬件数据库将处理完得到的结果再返回给cpu,供显示或写进磁盘数据库。如此一来,不仅会占用较多的传输带宽,而且很容易导致cpu上的数据库和硬件上数据库出现不一致。技术实现要素:有鉴于此,本发明提供了一种数据库访问方法及装置,以节省软件数据库和硬件数据库之间的数据传输所占用的带宽,并更好地保持软件数据库和硬件数据库的一致性。为了达到上述目的,本发明采用以下方案实现:根据本发明实施例的一个方面,提供了一种数据库访问方法,包括:接收sql语句,并获取所述sql语句的类型;若所述sql语句的类型为修改类型,则发送所述sql语句的修改相关信息,以使硬件数据库根据所述修改相关信息执行修改操作但不返回修改操作结果;若所述sql语句的类型为查询类型,则发送所述sql语句的查询相关信息,以使硬件数据库根据所述查询相关信息执行查询操作并按时机要求返回查询操作结果;若所述sql语句的类型为修改类型,则执行所述sql语句的修改操作,生成修改操作结果;若所述sql语句的类型为查询类型,则接收按时机要求返回的查询操作结果;根据生成的修改操作结果或接收的查询操作结果生成所述sql语句对应的执行结果,并输出所述执行结果。在一些实施例中,接收sql语句,并获取所述sql语句的类型,包括:接收sql语句,解析所述sql语句,并根据解析后的sql语句中的操作关键词得到所述sql语句的类型。在一些实施例中,接收sql语句,解析所述sql语句,并根据解析后的sql语句中的操作关键词得到所述sql语句的类型,包括:接收sql语句,并解析所述sql语句,得到至少一个解析后的sql语句;其中,每个解析后的sql语句中的各操作关键词为同种类型;根据解析后的sql语句中的操作关键词所属类型得到相应的sql语句的类型。在一些实施例中,接收sql语句,每个解析后的sql语句包含一个操作关键词。在一些实施例中,若所述sql语句的类型为修改类型,则发送所述sql语句的修改相关信息,包括:若所述sql语句的类型为修改类型,则根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息。在一些实施例中,若所述sql语句的类型为修改类型,则根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息,包括:若所述sql语句的类型为修改类型,则根据所述sql语句的操作内容将存储的所述sql语句涉及的数据表缓存至本地内存,并根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息。在一些实施例中,接收sql语句,并获取所述sql语句的类型之前,所述方法还包括:将本地存储的所有数据表缓存至本地内存。若所述sql语句的类型为修改类型,则根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息,包括:若所述sql语句的类型为修改类型,则从缓存至本地内存的所有数据表中查找所述sql语句涉及的数据表,并根据查找到的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息。在一些实施例中,若所述sql语句的类型为修改类型,则根据所述sql语句的操作内容将存储的所述sql语句涉及的数据表缓存至本地内存,并根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息,包括:若所述sql语句的类型为修改类型,且本地内存已满,则释放对应操作内容已执行完成且最早缓存至本地内存的数据表后,根据所述sql语句的操作内容将存储的所述sql语句涉及的数据表缓存至本地内存,并根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息。在一些实施例中,若所述sql语句的类型为查询类型,则发送所述sql语句的查询相关信息,包括:若所述sql语句的类型为查询类型,则根据所述sql语句的操作内容、及对应查询类型生成的执行并按时机要求返回结果的指令生成所述sql语句的查询相关信息,并发送所述查询相关信息。在一些实施例中,根据所述sql语句的操作内容、及对应查询类型生成的执行并按时机要求返回结果的指令生成所述sql语句的查询相关信息,并发送所述查询相关信息,包括:根据已缓存至本地内存的所述sql语句涉及的数据表、所述sql语句的操作内容、及对应查询类型生成的执行并按时机要求返回结果的指令生成所述sql语句的查询相关信息。或者,接收sql语句,并获取所述sql语句的类型之前,所述方法还包括:将本地存储的所有数据表缓存至本地内存,并发送所述所有数据表,以使硬件数据库缓存所述所有数据表。在一些实施例中,所述时机要求为执行完查询操作即返回查询操作结果或执行完查询操作后暂时不返回查询操作结果。在一些实施例中,所述时机要求为执行完查询操作后暂时不返回查询操作结果的情况下,若所述sql语句的类型为修改类型,则执行所述sql语句的修改操作,生成修改操作结果之前,所述方法还包括:在达到时机要求时,发送返回结果指令,以使所述硬件数据库返回查询操作结果。在一些实施例中,若所述sql语句的类型为修改类型,则执行所述sql语句的修改操作,包括:若所述sql语句的类型为修改类型,则根据所述sql语句的操作内容将存储的所述sql语句涉及的数据表缓存至本地内存或从已缓存至本地内存的所有数据表中查找所述sql语句涉及的数据表,并根据所述sql语句的操作内容和缓存的所述sql语句涉及的数据表执行所述sql语句的修改操作。在一些实施例中,所述的数据库访问方法,还包括:将接收的查询操作结果写入本地磁盘。在一些实施例中,根据生成的修改操作结果或接收的查询操作结果生成所述sql语句对应的执行结果,包括:若所述sql语句的类型为修改类型,则根据生成的修改操作结果生成所述sql语句对应的包含执行状态的执行结果;若所述sql语句的类型为查询类型,则根据接收的查询操作结果生成所述sql语句对应的包含查询结果集的执行结果。根据本发明实施例的另一个方面,提供了一种数据库访问方法,包括:若获取到修改类型的sql语句的修改相关信息,则根据所述修改相关信息执行修改操作但不返回修改操作结果,以在软件数据库执行所述sql语句的修改操作并根据其修改操作结果生成执行结果的情况下与所述软件数据库保持数据表更改一致;若获取到查询类型的sql语句的查询相关信息,则根据所述查询相关信息执行查询操作并按时机要求返回查询操作结果,以使所述软件数据库根据返回的查询操作结果生成所述sql语句对应的执行结果。在一些实施例中,所述修改相关信息包括对应修改类型生成的执行不返回指令和所述sql语句的操作内容。在一些实施例中,所述修改相关信息还包括所述sql语句涉及的数据表。在一些实施例中,若获取到修改类型的sql语句的修改相关信息,则根据所述修改相关信息执行修改操作但不返回修改操作结果,包括:若获取到修改类型的sql语句的修改相关信息,则从预先接收并缓存至本地的所述软件数据库存储的所有数据表中查找所述sql语句涉及的数据表,则根据查找到的所述sql语句涉及的数据表和所述修改相关信息执行修改操作但不返回修改操作结果。在一些实施例中,所述查询相关信息包括所述sql语句的操作内容、及对应查询类型生成的执行并按时机要求返回结果的指令。在一些实施例中,若获取到查询类型的sql语句的查询相关信息,则根据所述查询相关信息执行查询操作并按时机要求返回查询操作结果,包括:若获取到查询类型的sql语句的查询相关信息,则从预先接收并缓存至本地的所述软件数据库存储的所有数据表中查找所述sql语句涉及的数据表,并根据查找到的所述sql语句涉及的数据表和所述查询相关信息执行查询操作并按时机要求返回查询操作结果。或者,所述查询相关信息还包括所述sql语句涉及的数据表。根据本发明实施例的又一个方面,提供了一种数据库系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述方法的步骤。根据本发明实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述方法的步骤。本发明实施例的数据库访问方法、数据库系统及计算机可读存储介质,通过对于修改类型的sql语句,在两端数据库都执行修改操作,可以保持两端数据库的一致性,通过基于本端数据库的修改结果返回执行结果可以节省两端数据传输所占用的带宽。通过对于查询类型的sql语句,在硬件数据库端执行,并按时机要求返回查询结果,能够在必要情况下返回查询结果,以此可以减少占用的带宽,并利于保持两端数据库的一致性。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:图1是本发明一实施例的数据库访问方法的流程示意图;图2是本发明另一实施例的数据库访问方法的流程示意图;图3是本发明一具体实施例的数据库系统的结构示意图;图4是本发明一具体实施例的数据库访问方法的流程示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。需要预先说明的是,下述实施例或示例的描述或其中所提及的特征可以以相同或类似的方式,与其他实施例或示例中的特征组合,或替换其他实施例或示例中的特征,以形成可能的实施方式。另外,本文所使用的术语“包括/包含”是指特征、要素、步骤或组件的存在,但并不排除还存在一个或多个其他特征、要素、步骤或组件。在很多实际的实现中,尽可能减少cpu端到加速硬件端的数据传输次数是提高整体硬件数据库性能的关键,但同时也要保证硬件数据库端与cpu上的软件数据库达到时刻一致性要求。这两个方面,一个是保证效率,另外一个是保证安全性。现有数据库加速系统可以先将cpu端的待处理数据传送给硬件数据库中的存储端,然后在硬件数据库端对数据表进行增删改查的操作,然后再将得到的结果返回给cpu端。这样做的致命缺点就是会很容易出现cpu上的数据库和硬件上数据库出现不一致的情形。如果硬件数据库比cpu端的软件数据库更新的时候,当硬件数据库出现故障的时候,很容易使得对数据库的更改丢失,使得系统容错性差,增加风险性。一般可以有两种方式来达到一致性,可以概括为类似于cache里面的写回和写穿透策略。写回就是将硬件数据库中的数据不是每次都返回给cpu端的软件数据库,而是只有在不得不返回的时候(例如硬件端内存不够、cpu端需要数据用于展示或写到磁盘)再返回,这会导致硬件数据库和cpu端的数据库长时间处在不一致状况。这是有风险的,一旦硬件数据库出了故障,那么cpu端将无法恢复磁盘上的数据库为最新的。比如sql语句处理序列(0~i-1)updatetablea;,会在处理了i个更新的sql语句后,cpu端的数据库是i个更新前的,而硬件数据库端是更新后的,一旦此时硬件出了故障,cpu端将无法获得更新过后的数据。对于异构加速数据库系统,为了保证安全性,可以采用写回策略,也就是每执行增删改的操作后,都保证cpu端和硬件端的数据库是一致的。达到此目的普遍方法是将硬件数据库端的执行操作结果不断返回给cpu数据库端,以这种方式来达到一致性,但这种方式的缺点是显然的,他需要不断在cpu的内存和硬件存储端通过pcie传输数据,每处理一个修改表的语句就要传输两次表数据,这使得原本就稀缺的pcie总线带宽成为了该系统执行查询任务时的性能瓶颈。对于上述问题,为了节省软件数据库和硬件数据库之间的数据传输所占用的带宽(两数据库之间可以通过例如pcie接口通信),并更好地保持软件数据库和硬件数据库的一致性。本发明分别从软件数据库和硬件数据库的所在端提供了数据库访问方法。首先,先对从软件数据库所在端提出的数据库访问方法的具体实施方式进行详细说明。图1是本发明一实施例的数据库访问方法的流程示意图。参见图1,该数据库访问方法可包括以下步骤s110~步骤s160。下面将对步骤s110~步骤s160的具体实施方式进行详细说明。步骤s110:接收sql语句,并获取所述sql语句的类型。对于软件数据库而言,可以从客户端接收一个或多个sql语句。在接收多个sql语句的情况下,可以针对每个sql语句执行步骤s110~步骤s160中的一个或多个操作。当然,在该多个sql语句相关的情况下,后述步骤s160中,可以结合多个sql语句的执行结果进行输出。软件数据库接收到sql语句后,可以对该sql语句进行解析。示例性地,该步骤s110,即,接收sql语句,并获取所述sql语句的类型,具体地,可包括步骤:s111,接收sql语句,解析所述sql语句,并根据解析后的sql语句中的操作关键词得到所述sql语句的类型。该步骤s111中,所述sql语句的类型可包括查询类型和修改类型。进一步地,查询类型的sql语句可以包括查询语句,修改类型的sql语句可以包括涉及增、删或改的sql语句。例如,操作关键词可以是select、delete、insert、update等,其中,select语句为查询语句,insert语句、delete语句、update语句可分别为涉及增、删或改的sql语句。进一步地,若接收的sql语句包含多种类型的操作内容,例如,既包括查询类型的操作内容,又包含修改类型的操作内容,则可以将该sql语句拆分为包含单一类型的sql语句,然后基于拆分得到的sql语句执行后续步骤。示例性地,该步骤s111,即,解析所述sql语句,并根据解析后的sql语句中的操作关键词得到所述sql语句的类型,更具体地,可包括步骤:s1111,接收sql语句,并解析所述sql语句,得到至少一个解析后的sql语句;其中,每个解析后的sql语句中的各操作关键词为同种类型;s1112,根据解析后的sql语句中的操作关键词所属类型得到相应的sql语句的类型。该步骤s1111中,若该sql语句包含多种类型的操作内容,则解析后可以拆分为多个sql语句,解析拆分后得到sql语句可以包含一个或多个同类型的操作关键词;若该sql语句包含一种类型的操作内容,则解析后可以得到一个sql语句。该步骤s1112中,每个解析后的sql语句可以对应某种类型,例如,修改类型或查询类型。后续步骤s120~步骤s150可以针对每种类型的解析后的sql语句分别进行处理。后续步骤s160中,可以根据从一个sql语句拆分出的所有sql语句来生成执行结果。更进一步地,上述步骤s1111中,每个解析后的sql语句包含一个操作关键词。以此,可使sql语句的拆分粒度细化到操作关键词,从而便于针对不同类型的sql语句执行不同的操作。在其他实施例中,每个解析后的sql语句可以包含多个同种类型的操作关键词。步骤s120:若所述sql语句的类型为修改类型,则发送所述sql语句的修改相关信息,以使硬件数据库根据所述修改相关信息执行修改操作但不返回修改操作结果。步骤s130:若所述sql语句的类型为查询类型,则发送所述sql语句的查询相关信息,以使硬件数据库根据所述查询相关信息执行查询操作并按时机要求返回查询操作结果。该步骤s120和步骤s130属于对不同类型sql语句的处理方式,所以并不限定步骤执行先后顺序。且本发明并不限定同时存在步骤s120和步骤s130这两种处理情况,只要存在该步骤s120和步骤s130中的一种情形即是落入本发明的保护范围。在该步骤s120和步骤s130之前,可以确认sql语句的类型是什么,若该sql语句同时包含两种类型,例如包含查询类型和修改类型,则可利用如上述步骤s1111和步骤s1112的方法对sql语句进行拆分,然后再执行步骤s120或步骤s130。若判断sql语句仅包含一种类型,例如,判断sql语句的类型是修改类型或查询类型,则可以直接相应地执行步骤s120或步骤s130。具体地,可以根据sql语句中的操作关键词确认类型。该步骤s120中,可以将sql语句的修改相关信息直接或间接发送至硬件数据库;该步骤s130中,可以将sql语句的查询相关信息直接或间接发送至硬件数据库。在一些实施例中,上述修改相关信息可包括所述sql语句涉及的数据表、执行不返回指令、sql语句的操作内容等。示例性地,上述步骤s120中,即,若所述sql语句的类型为修改类型,则发送所述sql语句的修改相关信息,具体地,可包括步骤:s121,若所述sql语句的类型为修改类型,则根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息。在生成所述sql语句的修改相关信息之前,可以将所述sql语句涉及的数据表缓存至本地内存(如软件数据库的内存),或者预先将本地存储(例如,软件数据库的磁盘)的所有数据表缓存至本地内存中。其中,若需要处理sql语句时再缓存数据表,则可以根据sql语句的操作内容看涉及哪些数据表,再将所述sql语句涉及的数据表缓存至本地内存;若预先将本地存储的所有数据表缓存至本地内存中,可以在一个开始对软件数据库进行初始化的时候进行缓存操作。例如,该步骤s121,更具体地,可包括步骤:s1211,若所述sql语句的类型为修改类型,则根据所述sql语句的操作内容将存储的所述sql语句涉及的数据表缓存至本地内存,并根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息。该例子中,需要处理sql语句时,才缓存需要的数据表。进一步地,若本地内存已存满(例如,已达到设定缓存比例),则可以释放掉目前缓存的且不需要的数据表。示例性地,该步骤s1211,更具体地,可包括步骤:s12111,若所述sql语句的类型为修改类型,且本地内存已满,则释放对应操作内容已执行完成且最早缓存至本地内存的数据表后,根据所述sql语句的操作内容将存储的所述sql语句涉及的数据表缓存至本地内存,并根据已缓存至本地内存的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息。该示例中,对应操作内容已执行完成是指,需要对缓存在本地内存数据表做的增删改查等操作已执行完成,释放这样的数据表,不会致使本次操作影响以前的操作。最早缓存至本地内存更易是已执行完成对应操作的缓存数据表。再例如,上述步骤s110之前,图1所示的数据库访问方法,还可包括步骤:s170,将本地存储的所有数据表缓存至本地内存。可以在对软件数据库进行初始化时执行该步骤s170。在此情况下,上述步骤s121,更具体地,可包括步骤:若所述sql语句的类型为修改类型,则从缓存至本地内存的所有数据表中查找所述sql语句涉及的数据表,并根据查找到的所述sql语句涉及的数据表、对应修改类型生成的执行不返回指令、及所述sql语句的操作内容生成所述sql语句的修改相关信息,并发送所述修改相关信息。其中,缓存所有数据表的步骤可以在初始化过程中执行。该例子中,可以根据所述sql语句的相关信息,例如操作内容,从缓存的所有数据表中找到所述sql语句涉及的数据表,用来生成修改相关信息。在一些实施例中,查询相关信息可包括sql语句的操作内容、按要求返回结果的指令,上述步骤s130中,查询相关信息可包括sql语句的操作内容、时机要求、及返回指令等。示例性地,上述步骤s130,即,若所述sql语句的类型为查询类型,则发送所述sql语句的查询相关信息,具体地,可包括步骤:s131,若所述sql语句的类型为查询类型,则根据所述sql语句的操作内容、及对应查询类型生成的执行并按时机要求返回结果的指令生成所述sql语句的查询相关信息,并发送所述查询相关信息,并发送所述查询相关信息。其中,sql语句的操作内容可以是解析得到的操作指令。对应查询类型生成的执行并按时机要求返回结果的指令可以包括开始执行操作的指令、何时返回结果的指令。其中,根据开始执行操作的指令可以告知硬件数据库可以开始执行sql语句的操作内容,何时返回结果的指令可以告知硬件数据库是得到执行结果后立即返回操作结果,还是暂时不返回,待接收到指令后再返回。简言之,所述时机要求可以为执行完查询操作即返回查询操作结果或执行完查询操作后暂时不返回查询操作结果。另外,修改相关信息可以类似。进一步地,在所述时机要求为执行完查询操作后暂时不返回查询操作结果的情况下,可以后续发送指令给硬件数据库让其返回查询操作结果。示例性地,后续步骤s140之前,即,若所述sql语句的类型为修改类型,则执行所述sql语句的修改操作,生成修改操作结果之前,图1所示的方法还可包括步骤:在达到时机要求时,发送返回结果指令,以使所述硬件数据库返回查询操作结果。其中,返回结果指令可包括sql语句相关识别信息,当硬件数据库接收到返回结果的指令后,可以将返回的操作结果。在一些实施例中,硬件数据库中没有数据表,则可以在需要的时候,再将所需数据表传给硬件数据库。示例性地,上述步骤s131,更具体地,可包括步骤:根据已缓存至本地内存的所述sql语句涉及的数据表、所述sql语句的操作内容、及对应查询类型生成的执行并按时机要求返回结果的指令生成所述sql语句的查询相关信息。该示例中,硬件数据库中没有数据表的情况下,可以将sql语句涉及的数据表放在查询相关信息中一同发给硬件数据库。在另一些实施例中,可以将软件数据库端的所有数据表都预先发送给硬件数据库,在此情况下,需要执行sql语句时,硬件数据库可以从其内存找到所需数据表。示例性地,上述步骤s110之前,即,接收sql语句,并获取所述sql语句的类型之前,图1所示方法,还可包括步骤:将本地存储的所有数据表缓存至本地内存,并发送所述所有数据表,以使硬件数据库缓存所述所有数据表。在此情况下,硬件数据库可以根据sql语句的操作内容从预先缓存的所有数据表中查找sql语句涉及的数据表。步骤s140:若所述sql语句的类型为修改类型,则执行所述sql语句的修改操作,生成修改操作结果。步骤s150:若所述sql语句的类型为查询类型,则接收按时机要求返回的查询操作结果。上述步骤s140和步骤s150属于两种情况,不限定顺序。上述步骤s140是对应上述步骤s120的情况,上述步骤s150是对应上述步骤s130的情况下。上述步骤s140,即,若所述sql语句的类型为修改类型,则执行所述sql语句的修改操作,具体地,可包括步骤:若所述sql语句的类型为修改类型,则根据所述sql语句的操作内容将存储的所述sql语句涉及的数据表缓存至本地内存或从已缓存至本地内存的所有数据表中查找所述sql语句涉及的数据表,并根据所述sql语句的操作内容和缓存的所述sql语句涉及的数据表执行所述sql语句的修改操作。其中,当需要执行sql语句时才将所需数据表缓存至内存,则根据所述sql语句的操作内容将存储的所述sql语句涉及的数据表缓存至本地内存。若预先已将所有数据表缓存至内存,则从已缓存至本地内存的所有数据表中查找所述sql语句涉及的数据表。在一些实施例中,上述步骤s150之后,图1所示的方法还可包括步骤:将接收的查询操作结果写入本地磁盘。该实施例中,在需要时将查询操作结果写入磁盘可以便于存储。在其他实施例中,可以将查询操作结果进行输出显示。步骤s160:根据生成的修改操作结果或接收的查询操作结果生成所述sql语句对应的执行结果,并输出所述执行结果。该步骤s160,具体地,可包括步骤:s161,若所述sql语句的类型为修改类型,则根据生成的修改操作结果生成所述sql语句对应的包含执行状态的执行结果;s162,若所述sql语句的类型为查询类型,则根据接收的查询操作结果生成所述sql语句对应的包含查询结果集的执行结果。其中,步骤s161和步骤s162分别对应不同的sql语句的类型返回结果的情况。该步骤s161中,执行状态可包括成功或失败。另外,再对从硬件数据库所在端提出的数据库访问方法的具体实施方式进行详细说明。图2是本发明另一实施例的数据库访问方法的流程示意图。参见图2,一些实施例的数据库访问方法,可包括:步骤s210:若获取到修改类型的sql语句的修改相关信息,则根据所述修改相关信息执行修改操作但不返回修改操作结果,以在软件数据库执行所述sql语句的修改操作并根据其修改操作结果生成执行结果的情况下与所述软件数据库保持数据表更改一致;步骤s220:若获取到查询类型的sql语句的查询相关信息,则根据所述查询相关信息执行查询操作并按时机要求返回查询操作结果,以使所述软件数据库根据返回的查询操作结果生成所述sql语句对应的执行结果。其中,上述步骤s210和步骤s220属于不同sql语句类型的情况下,不限定先后顺序。针对同一sql语句择一执行,针对不同sql语句可以都执行。该步骤s210和步骤s220与前述实施例重复之处,参见前述实施例实施,例如,修改相关信息、查询相关信息、时机要求的内容及生成方式可以参见前述实施例,故重复之处不再赘述。该步骤s210之前,可以接收从软件数据库发送来的修改相关信息(可利用类似于步骤s120的方式得到)。该步骤s220之前,可以接收从软件数据库发送来的查询相关信息(可利用类似于步骤s130的方式得到)。该步骤s210中,获取的修改相关信息可以从软件数据库端直接发送过来,或者软件数据库端将sql语句发送至硬件数据库端,在硬件数据库端得到该修改相关信息,步骤s220中获取查询相关信息的情况类似。软件数据库和硬件数据库可以均执行sql语句的操作内容,使得两端操作一致。硬件数据库执行修改操作但不返回修改操作结果,软件数据库可以返回其本身执行修改操作得到的修改操作结果。该步骤s220中,时机要求可以是得到结果后立即返回至软件数据库,或者暂时不返回而是待收到返回指令时才返回。例如,所述修改相关信息可包括对应修改类型生成的执行不返回指令和所述sql语句的操作内容。进一步地,例如,所述修改相关信息还可包括所述sql语句涉及的数据表,此时,可以直接利用该数据表执行操作。再例如,可以预先将软件数据库端的所有数据表传输给硬件数据库缓存起来。示例性地,上述步骤s210中,若获取到修改类型的sql语句的修改相关信息,则根据所述修改相关信息执行修改操作但不返回修改操作结果,具体地,可包括步骤:若获取到修改类型的sql语句的修改相关信息,则从预先接收并缓存至本地的所述软件数据库存储的所有数据表中查找所述sql语句涉及的数据表,则根据查找到的所述sql语句涉及的数据表和所述修改相关信息执行修改操作但不返回修改操作结果。在一些实施例中,上述步骤s220中,所述查询相关信息可包括所述sql语句的操作内容、及对应查询类型生成的执行并按时机要求返回结果的指令。进一步地,示例性地,上述步骤s220,若获取到查询类型的sql语句的查询相关信息,则根据所述查询相关信息执行查询操作并按时机要求返回查询操作结果,具体地,可包括步骤:若获取到查询类型的sql语句的查询相关信息,则从预先接收并缓存至本地的所述软件数据库存储的所有数据表中查找所述sql语句涉及的数据表,并根据查找到的所述sql语句涉及的数据表和所述查询相关信息执行查询操作并按时机要求返回查询操作结果。另一些示例中,所述查询相关信息还包括所述sql语句涉及的数据表,以此可以直接利用查询相关信息中数据表执行操作。需要说明的,上述各实施例的数据库访问方法中,数据表的缓存过程,对于修改类型和查询类型的sql语句有分别对应描述了缓存方式、时机等内容,对于预先缓存或传输所有数据的仅进行一次即可,不需针对不同类型分别预先缓存一次。另外,本发明各实施例所述的数据表可以是指表数据。在一些实施例中,为了在采用异构数据库加速时候,如何保持cpu端的数据库与硬件数据库的实时一致性,从而增加数据库系统的容错性,即便当执行增删改时候硬件数据库系统出错,cpu端仍然可以获得正确的执行后的数据库文件。一实施例的利用硬件加速数据库处理的时候的解决加速硬件数据库中的数据和cpu端的数据库不一致时候的解决办法,可包括以下步骤:s1.初始化时候,cpu端首先将查询需要的位于磁盘上的数据库表读取进入内存,然后通过pcie接口向硬件加速数据库系统的内存传递需要处理的数据。s2.当输入的sql语句含有增删改的时候,我们仍然将待处理的表数据传送给硬件端的存储,但在这个时候我们为了保持软硬件数据库同步,就在软硬件端同时进行增删改操作,这样做的另一个好处就是减少了不必要的pcie接口带宽占用。s3.当必须要返回硬件数据库的增删改查结果时候(为了将查询结果写进磁盘或显示查询结果),此时再通过pcie接口将数据表的内容传给cpu端。s4.(a)当硬件数据库内存满了,需要将某些表的内存释放掉,这时可以随便释放不需要的表所占有的内存,而不需要将硬件的存储端上的内容写回cpu的内存,因为cpu端已经保证了一致性。(b)如果硬件数据库再次需要将原来释放的表从cpu端读取到硬件数据库端时候,一定要保证cpu端对表的增删改操作已完成,这样才能保证硬件端已经获得了最新的表数据。在利用硬件对数据库加速的时候,由于刚开始硬件不稳定,有时候会遇到硬件数据库执行失败的情况,这时候就无法根据cpu端的数据恢复磁盘上的数据库了,所以遇到了如何让cpu上的数据库与硬件数据库时刻保持一致的问题。传统的一致性解决方案都是采用类似cache中的写回和写通过策略,写回这个方案不安全,写通过这个方案太浪费接口带宽(例如pcie接口)。本实施例中,在解决一致性的难题的同时,也兼顾了不能浪费pcie资源。由于硬件数据库的高性能可以主要是体现在查询上面,而一般修改数据库都是以增删改的形式出现的,所以可以采取在硬件数据端和cpu端同时执行增删改的方式来保持两者间始终一致性。这样便尽可能的减少了通过两者间的数据传输开销。并且可以保证每一个增删改的sql语句处理完毕后,两端始终处于一致状态。因此,采用通过在增删改的时候cpu端和硬件端同时执行sql语句,以及读取表数据的时候先等待cpu端的增删改操作执行完毕的一致性解决方法后,最大程度地在硬件数据库内存上复用了表数据,减少了不必要的接口带宽,从而加快了sql指令的吞吐率,也通过这样达到了系统的安全性。基于与上述图1或图2所示实施例的数据库访问方法相同的发明构思,本发明实施例还提供了一种数据库系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的数据库访问方法的步骤。对于从软件数据库库的角度所执行数据库访问方法的数据库系统而言,该数据库系统可包括软件数据库所基于的设备,例如,计算机、服务器等。对于从硬件数据库的角度所执行的数据库访问方法的数据库系统而言,该数据库系统可包括硬件数据库所属设备,例如,fpga、gpu、asic等。另外,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述的数据库访问方法的步骤。为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。以常用的java连接和利用odbc(opendatabaseconnectivity,开放数据库连接)连接oracle数据库为例,硬件数据库加速系统可以是利用c++改写jdbc(javadatabaseconnectivity,java数据库连接)接口的实现,从而使得对上层应用透明。图3是本发明一具体实施例的数据库系统的结构示意图。参见图3,数据库加速系统的整体的各个模块设计中,最主要的数据库加速处理部分可以是由硬件加速器模块来完成。本实施例最主要目的是实现了运行在硬件上的硬件数据库系统与cpu端的软件数据库系统在最小化pcie接口带宽的代价下实现了实时一致性,即每执行完一条增删改的sql语句后,两者之间的结果都是一样的。图4是本发明一具体实施例的数据库访问方法的流程示意图。图4详细地显示了各个模块之间的交互,jdbc是供给java程序使用的上层调用的接口,从而使得程序员可以在不用修改原来程序代码的情况下得到加速,通过jni接口模块(javanativeinterface,java本地接口),使得下层对数据库的操作可以用c++编写,解析器模块提供sql语句解析,调度器模块负责各个其他模块的配合,缓存模块提供缓存管理(包括盛放读取表的数据和硬件端返回的结果),驱动模块含有调度器模块直接可以调用的接口,它可以利用硬件执行数据库操作,连接数据库模块负责数据库的连接,以便于将磁盘上的数据传输到缓存模块。参见图3和图4,一具体实施例的数据库访问方法可包括以下步骤1~5。1.上层java应用程序中的jdbc接口根据需求被传送来一批sql语句,这批sql语句按顺序被交给下层的c++程序模块处理,这里仍然采用了jdbc的接口,不过我们是重写了部分实现。2.c++程序首先通过连接数据库模块和指定的oracle数据库实例建立连接,并同时建立调度器模块,通过此模块和各个模块进行交互。因为可以很直观的从sql语句的from中看到此次增删改查所需要的表,所以在这里可以很清晰地调用缓存模块预读取数据库的数据表,这里就是将磁盘上的数据库读取到了cpu的内存中。此时必须保证cpu端对要读入硬件端的数据库的增删改操作已完成。3.用驱动(支持直接对硬件的调用)提供的函数将缓存模块将表的数据传送给硬件数据库的存储中。a)若硬件数据库端的内存在由于处理之前的sql语句而被占满了的时候,此时可以直接将硬件端的内存释放,因为我们根据下面的措施已经保证了硬件数据库和cpu端的数据库的一致性,所以不需要担心cpu端的数据库处于旧的状态。4.接着调用解析器模块解析输入的sql语句,以确定需要对此二维数据施加增删改查中的什么操作。a)如果sql语句被解析为增删改操作,那么cpu数据库端和硬件数据库端同时执行此增删改操作,以此方式达到完全一致性。并且不需要将结果返回给cpu端,因为此时cpu上已经有相同的数据了,此时增删改的sql语句就执行完毕了。b)如果仅仅是查询操作,则只在硬件数据库执行此查询操作。硬件根据解析后的sql语句对数据表执行相应的操作,此步是数据库加速系统的核心部分。5.硬件数据库执行查询操作完毕后,此时结果是在硬件端的存储上面,只有当cpu端需要此查询结果供展示或写回磁盘时,才将硬件端的结果通过pcie接口传回给cpu端的内存。将硬件运算后得到的结果存储到缓存模块。综上所述,本发明实施例的数据库访问方法、数据库系统及计算机可读存储介质,通过对于修改类型的sql语句,在两端数据库都执行修改操作,可以保持两端数据库的一致性,通过基于本端数据库的修改结果返回执行结果可以节省两端数据传输所占用的带宽。通过对于查询类型的sql语句,在硬件数据库端执行,并按时机要求返回查询结果,能够在必要情况下返回查询结果,以此可以减少占用的带宽,并利于保持两端数据库的一致性。因此,本发明能够减少不必要的接口带宽,从而加快了sql指令的吞吐率,也通过提高两端数据库一致性提高了系统的安全性。在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1