一种接口查询方法和可读存储介质与流程

文档序号:17288574发布日期:2019-04-03 03:46阅读:152来源:国知局
一种接口查询方法和可读存储介质与流程

本发明涉及计算机技术,尤指一种接口查询方法和可读存储介质。



背景技术:

现有的对系统接口进行数据查询包括对于数据库和代码层面进行接口优化,也为直接与数据库操作,但针对代码和数据库层优化查询性能并没有得到提高,响应(请求时间>100ms)缓慢。



技术实现要素:

为了解决上述技术问题,本发明提供了一种接口查询方法和可读存储介质,能够通过加入中间件从而对接口进行优化,缩减接口的访问时间。

为了达到本发明目的,本发明提供了一种接口查询方法,所述方法包括:

接口接收到对第一数据库的操作请求,通过中间件执行所述接口的操作请求。

一种示例性的实施例中,所述中间件包括缓存数据库;

所述通过中间件执行所述接口的操作请求,包括:当所述操作请求为读请求时,从预先设置的缓存数据库中查询所述读请求所请求的数据,如果缓存数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述中间件包括队列数据库;

所述通过中间件执行所述接口的操作请求,包括:将所述操作请求保存到所述队列数据库中,按照先入先出的顺序处理所述队列数据库中的操作请求,对所述第一数据库执行所述操作请求中的操作。

一种示例性的实施例中,所述中间件包括缓存和队列数据库;

所述通过中间件执行所述接口的操作请求,包括:将所述操作请求保存到所述缓存和队列数据库中,按照先入先出的顺序处理所述缓存和队列数据库中的操作请求,当所述操作请求为读请求时,从所述缓存和队列数据库中查询所述读请求所请求的数据,如果所述缓存和队列数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存和队列数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述预设条件包括所述第一数据库中读取频率高于预设频率的数据。

一种示例性的实施例中,所述缓存和队列数据库中还保存有所述满足预设条件的数据对应的哈希值;

所述从所述缓存和队列数据库中查询所述读请求所请求的数据,包括:根据哈希值查询所述缓存和队列数据库中是否有所述读请求所请求的数据。

一种示例性的实施例中,所述缓存数据库采用redis数据库实现。

一种示例性的实施例中,所述队列数据库采用netty框架实现。

一种示例性的实施例中,所述缓存和队列数据库采用mongo数据库实现。

为了达到本发明目的,本发明还提供了一种接口查询装置,所述装置包括接收模块和执行模块;

所述接收模块,用于接口接收到对第一数据库的操作请求;

所述执行模块,用于通过中间件执行所述接口的操作请求。

一种示例性的实施例中,所述中间件包括缓存数据库;

所述执行模块通过中间件执行所述接口的操作请求,包括:当所述操作请求为读请求时,所述执行模块从预先设置的缓存数据库中查询所述读请求所请求的数据,如果缓存数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述中间件包括队列数据库;

所述执行模块通过中间件执行所述接口的操作请求,包括:所述执行模块将所述操作请求保存到所述队列数据库中,按照先入先出的顺序处理所述队列数据库中的操作请求,对所述第一数据库执行所述操作请求中的操作。

一种示例性的实施例中,所述中间件包括缓存和队列数据库;

所述执行模块通过中间件执行所述接口的操作请求,包括:所述执行模块将所述操作请求保存到所述缓存和队列数据库中,按照先入先出的顺序处理所述缓存和队列数据库中的操作请求,当所述操作请求为读请求时,从所述缓存和队列数据库中查询所述读请求所请求的数据,如果所述缓存和队列数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存和队列数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述预设条件包括所述第一数据库中读取频率高于预设频率的数据。

一种示例性的实施例中,所述缓存和队列数据库中还保存有所述满足预设条件的数据对应的哈希值;

所述执行模块从所述缓存和队列数据库中查询所述读请求所请求的数据,包括:所述执行模块根据哈希值查询所述缓存和队列数据库中是否有所述读请求所请求的数据。

一种示例性的实施例中,所述缓存数据库采用redis数据库实现。

一种示例性的实施例中,所述队列数据库采用netty框架实现。

一种示例性的实施例中,所述缓存和队列数据库采用mongo数据库实现。

为了达到本发明目的,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述方法的步骤。

与现有技术相比,本发明包括接口接收到对第一数据库的操作请求,通过中间件执行所述接口的操作请求,能够通过加入中间件从而对接口进行优化,缩减接口的访问时间。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。

图1为本发明实施例一的接口查询方法的流程图;

图2为本发明实施例三的接口查询装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

实施例一

本实施例提供了一种接口查询方法如图1所示,该方法包括s11-s12:

s11、接口接收到对第一数据库的操作请求;

s12、通过中间件执行所述接口的操作请求。

本发明实施例中,能够通过加入中间件从而对接口进行优化,缩减接口的访问时间。

一种示例性的实施例中操作包括:读、增加、更新和删除。

一种示例性的实施例中,所述中间件包括缓存数据库;

所述通过中间件执行所述接口的操作请求,包括:当所述操作请求为读请求时,从预先设置的缓存数据库中查询所述读请求所请求的数据,如果缓存数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存数据库中预先存储有满足预设条件的数据。

引入缓存数据库能够接入减少(读请求)直接查询数据库的操作;

一种示例性的实施例中,所述中间件包括队列数据库;

所述通过中间件执行所述接口的操作请求,包括:将所述操作请求保存到所述队列数据库中,按照先入先出的顺序处理所述队列数据库中的操作请求,对所述第一数据库执行所述操作请求中的操作。

引入队列数据能够隔离对数据库的插入和修改操作。

一种示例性的实施例中,所述中间件包括缓存和队列数据库;

所述通过中间件执行所述接口的操作请求,包括:将所述操作请求保存到所述缓存和队列数据库中,按照先入先出的顺序处理所述缓存和队列数据库中的操作请求,当所述操作请求为读请求时,从所述缓存和队列数据库中查询所述读请求所请求的数据,如果所述缓存和队列数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存和队列数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述预设条件包括所述第一数据库中读取频率高于预设频率的数据。

一种示例性的实施例中,所述缓存和队列数据库中还保存有所述满足预设条件的数据对应的哈希值;

所述从所述缓存和队列数据库中查询所述读请求所请求的数据,包括:根据哈希值查询所述缓存和队列数据库中是否有所述读请求所请求的数据。

一种示例性的实施例中,所述缓存数据库采用redis数据库实现。

一种示例性的实施例中,所述队列数据库采用netty框架实现。

一种示例性的实施例中,所述缓存和队列数据库采用mongo数据库实现。

为了达到本发明目的,本发明还提供了一种接口查询装置,所述装置包括接收模块和执行模块;

所述接收模块,用于接口接收到对第一数据库的操作请求;

所述执行模块,用于通过中间件执行所述接口的操作请求。

一种示例性的实施例中,所述中间件包括缓存数据库;

所述执行模块通过中间件执行所述接口的操作请求,包括:当所述操作请求为读请求时,所述执行模块从预先设置的缓存数据库中查询所述读请求所请求的数据,如果缓存数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述中间件包括队列数据库;

所述执行模块通过中间件执行所述接口的操作请求,包括:所述执行模块将所述操作请求保存到所述队列数据库中,按照先入先出的顺序处理所述队列数据库中的操作请求,对所述第一数据库执行所述操作请求中的操作。

一种示例性的实施例中,所述中间件包括缓存和队列数据库;

所述执行模块通过中间件执行所述接口的操作请求,包括:所述执行模块将所述操作请求保存到所述缓存和队列数据库中,按照先入先出的顺序处理所述缓存和队列数据库中的操作请求,当所述操作请求为读请求时,从所述缓存和队列数据库中查询所述读请求所请求的数据,如果所述缓存和队列数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存和队列数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述预设条件包括所述第一数据库中读取频率高于预设频率的数据。

一种示例性的实施例中,所述缓存和队列数据库中还保存有所述满足预设条件的数据对应的哈希值;

所述执行模块从所述缓存和队列数据库中查询所述读请求所请求的数据,包括:所述执行模块根据哈希值查询所述缓存和队列数据库中是否有所述读请求所请求的数据。

一种示例性的实施例中,所述缓存数据库采用redis数据库实现。

redis是一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、key-value数据库;通过redis的高性能以及多样的数据结构能够减少直接查询数据库的操作。

一种示例性的实施例中,所述队列数据库采用netty框架实现。

一种示例性的实施例中,所述缓存和队列数据库采用mongo数据库实现。mongodb是一个基于分布式文件存储的数据库;mongo根据数据的类型水平拆分;mongo存储数据资源可以存储不同格式的数据类型,并拆分到不同服务集群中;利用mongo数据库高效性能,保证用户访问速度,丰富的数据结构特性,建立队列。

本发明实施例中,接口接收到对第一数据库的操作请求,通过中间件执行所述接口的操作请求,能够通过加入中间件从而对接口进行优化,缩减接口的访问时间。通过接口引入缓存,减少了对数据库的读请求;通过接口引入队列,隔离了对数据库的操作;通过引入缓存和队列进行了线程的调优,缓解了大部分的接口压力,通过对mongo的存储进行优化,提高接口数据查询。

实施例二

本实施例对上述实施例方法进行具体描述。

本发明主要应用于当前深度学习平台中数据接口的请求,通过本方法进行接口设计,可以解决接口的响应时间较长的问题。

在系统中接口实现的功能主要是系统业务逻辑对数据库查询和脚本进行数据查询计算。现有的对接口进行优化主要是针对数据库sql的优化以及逻辑代码层面的优化。

1)现有接口实现的数据库优化主要是合理设计表结构,使用合理的字段类型,避免不必要字段查询,对数据表建立主外键和索引,优化sql代码。

2)现有接口实现的业务逻辑代码优化,避免使用代码进行数据遍历,for循环较多,代码质量低,执行效率会有很大的影响,对代码进行合理的算法优化,提高代码响应的时间;

为了提高接口的性能,本实施例通过引入缓存数据库和/或队列数据库等中间件,减少数据库的读请求和分离数据库的写请求,且对线程池的调优,并对mongo进行优化。

(1)中间件为缓存数据库;

本接入了缓存数据库,如缓存redis,通过redis的高性能以及多样的数据结构来减少直接查询数据库的操作。接入缓存数据库后,接口原先对应的数据库的请求减少;本方案是通过增加缓存redis数据库将经常读取的数据存储在该缓存redis数据库中,从而在接收到读请求时,可以直接从缓存redis数据库中读取,进而减少了数据库的请求,以减少读取时间;通过统计读取频率高的数据的方式,将该些数据存储在缓存redis数据库中。

(2)中间件为队列数据库;

接入了队列,通过队列将数据库插入和修改操作在队列消费端操作,可以防止接口堵塞导致系统挂起。在接口中隔离了对数据库的操作。引入队列后,虽然数据库的数据量比较大,crud(增加(create)、读取查询(retrieve)、更新(update)和删除(delete))比较慢,可接口中已经将写操作清零,读操作减少;引入队列的方式是指将对数据库的读写请求按照先进先出的方式存储在队列中,等待数据库处理,相当于是把读写请求先缓存下来。队列作用是以特定的顺序去存储行、以特定的顺序读取行数据,创建一个高性能可扩展的队列提高了用户使用系统接口响应的效果。但在接口中引入队列,增加了设备的内存使用,需要强大的设备,此方案适用规模较大的平台。

当引入队列数据库时,大量的接口会处于等待状态,由于实现的业务接口队列中处理时间过长引起的,导致io线程阻塞,无法接收新的请求,此时超时率高。能够通过netty对接口线程进行优化。

1)netty是基于boss,worker,handler三者相同配合的nio框架;通过netty实现消息队列,即通过boss,worker,handler三者配合使用实现消息队列;

2)boss负责接收io请求,实际情况下,如果只监听了一个端口,只需要开启一个boss;

3)worker负责处理io请求,一般个数不要超过cpu核数,超过反而影响性能;

(3)中间件包括缓存和队列数据库;

中间件包括缓存和队列数据库为对上述(1)和(2)的优化,引入mongo数据库,建立队列,存储缓存数据,进行系统接口的优化。由于mongo内存管理部分完全交由操作系统内核处理,避免了传统的单库单表的影响数据库性能;mongo可以进行水平拆分,存储hash方式关系表到数据库中。

用mongo数据库实现请求的缓存(1)和数据的缓存(2)。mongo存储数据资源可以存储不同格式的数据类型,并拆分到不同服务集群中。hash存储的作用建立字典,提高搜索效率,hash值可以根据缓存数据,或者接口来生成。

本实施例使得深度学习平台在进行数据接口请求时,提高接口响应时间,使得平台系统的使用体验更好。使接口性能的进一步提高,结合目前优化数据库和代码,适用于高并发、大数据量的系统平台。

实施例三

为了达到本发明目的,本发明还提供了一种接口查询装置,上述方法实施例中描述也适用于本实施例中,如图2所示,该装置包括接收模块21和执行模块22;

所述接收模块21,用于接口接收到对第一数据库的操作请求;

所述执行模块22,用于通过中间件执行所述接口的操作请求。

一种示例性的实施例中,所述中间件包括缓存数据库;

所述执行模块22通过中间件执行所述接口的操作请求,包括:当所述操作请求为读请求时,所述执行模块22从预先设置的缓存数据库中查询所述读请求所请求的数据,如果缓存数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述中间件包括队列数据库;

所述执行模块22通过中间件执行所述接口的操作请求,包括:所述执行模块22将所述操作请求保存到所述队列数据库中,按照先入先出的顺序处理所述队列数据库中的操作请求,对所述第一数据库执行所述操作请求中的操作。

一种示例性的实施例中,所述中间件包括缓存和队列数据库;

所述执行模块22通过中间件执行所述接口的操作请求,包括:所述执行模块22将所述操作请求保存到所述缓存和队列数据库中,按照先入先出的顺序处理所述缓存和队列数据库中的操作请求,当所述操作请求为读请求时,从所述缓存和队列数据库中查询所述读请求所请求的数据,如果所述缓存和队列数据库中未查询到所述数据,则从所述第一数据库中查询所述读请求所请求的数据;所述缓存和队列数据库中预先存储有满足预设条件的数据。

一种示例性的实施例中,所述预设条件包括所述第一数据库中读取频率高于预设频率的数据。

一种示例性的实施例中,所述缓存和队列数据库中还保存有所述满足预设条件的数据对应的哈希值;

所述执行模块22从所述缓存和队列数据库中查询所述读请求所请求的数据,包括:所述执行模块22根据哈希值查询所述缓存和队列数据库中是否有所述读请求所请求的数据。

一种示例性的实施例中,所述缓存数据库采用redis数据库实现。

一种示例性的实施例中,所述队列数据库采用netty框架实现。

一种示例性的实施例中,所述缓存和队列数据库采用mongo数据库实现。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1