数据查找方法与装置的制造方法
【技术领域】
[0001]本发明涉及一种计算机技术及互联网领域,特别涉及一种数据查找方法与装置。
【背景技术】
[0002]相关技术中,为了提高网站访问速度,一些大型的、需要频繁访问数据库的网站通常采用分布式的高速缓存系统。
[0003]相关技术中,分布式的高速缓存系统的工作流程为:先检查客户端的请求数据是否在内存缓存中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在内存缓存中,则到数据库中查找请求的数据,在数据库中查找到请求的数据后,从数据库中获取该数据,并将从数据库中获取的数据返回给客户端,同时将数据缓存一份到内存中;每次更新数据库的同时更新内存缓存中的数据,保证一致性。
[0004]根据上述工作流程中可知,在相关技术中,当请求的数据不在内存时,转而到数据库中查找,假设当前查找到数据是热门数据,同时有多个并发请求,则处理该多个请求的进程同时都将到数据库查找请求的数据,如果并发请求过多,例如,对于当前的热门消息,可能同时有上万甚至上十万、百万的获取请求,这将导致数据库的访问压力过大,进而导致拥塞。
【发明内容】
[0005]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据存储方案。
[0006]根据本发明的一个方面,本发明提供了一种数据查找方法包括:接收数据获取请求,从对应数据库的缓存中查找所述数据获取请求所请求的数据;在从所述对应数据库的缓存中没有查找到所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据对应的令牌;在获取到所述令牌的情况下,访问所述对应数据库以查找所请求的数据。
[0007]可选地,还包括:在获取到所述令牌后,锁定所述令牌,以使所述令牌无法再被获取。
[0008]可选地,还包括:从所述对应数据库获取所请求的数据,将所请求的数据返回给请求方并将所请求的数据存储在所述对应数据库的缓存中。
[0009]可选地,在将所请求的数据存储在所述对应数据库的缓存中之后,所述方法还包括:释放所述令牌,使所述令牌能够再被获取。
[0010]可选地,还包括:在没有获取到所述令牌的情况下,等待预定时长tl后,再次从所述对应数据库的缓存中查找所请求的数据。
[0011]可选地,在等待所述预定时长tl后,再次从所述对应数据库的缓存中查找所请求的数据时,若仍未查找到所请求的数据,所述方法还包括:步骤1,判断等待的次数是否达到预设阈值或者等待的总时长是否超过预设阈值,如果是,则执行步骤4,否则,执行步骤2;步骤2,设置新的预定时长t2 =前次预定时长tl+At,其中,At为有理数;步骤3,等待新的预定时长t2后,再次从所述对应数据库的缓存中查找所请求的数据,如果查找到所述所请求的数据,则返回给所述数据的请求方,如果仍未查找到,则返回执行步骤1;步骤4,向所述数据的请求方返回未查询到所请求的数据的信息。
[0012]可选地,在等待所述预定时长后,再次从所述对应数据库的缓存中查找所请求的数据时,若查找到所请求的数据,所述方法还包括:将查找到的所请求的数据返回给所述数据的请求方。
[0013]根据本发明的另一个方面,提供了一种数据查找装置,包括:接收模块,用于接收数据获取请求;第一查找模块,用于从对应数据库的缓存中查找所述数据获取请求所请求的数据;第一获取模块,用于在所述第一查找模块从所述对应数据库的缓存中没有查找到所述数据获取请求所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据的令牌;第二查找模块,用于在所述第一获取模块从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,访问所述对应数据库以查找所述所请求的数据。
[0014]可选地,还包括:执行模块,用于在所述第一获取模块从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,锁定所述令牌,使所述令牌不会再被获取;
[0015]可选地,还包括:缓存模块,用于将所述第二查找模块查找到的数据缓存到所述对应数据库的缓存中;发送模块,用于将所述第二查找模块查找到的数据返回给所述数据的请求方。
[0016]可选地,还包括:释放模块,用于在所述缓存模块将查找到的数据缓存到所述对应数据库的缓存中之后,释放所述令牌,使所述令牌能够被获取。
[0017]可选地,还包括:休眠模块,用于在所述第一获取模块没有从所述对应数据库的缓存中获取到所述所请求的数据的令牌的情况下,等待预定时长,并在预定时长到达时触发所述第一查找模块;判断模块,用于在所述第一查找模块在所述休眠模块触发下没有从所述对应数据库的缓存中查找所请求的数据的情况下,判断所述休眠模块当前休眠的次数是否达到预设阈值或者所述休眠模块休眠的总时长是否超过预设阈值,如果是,则触发发送模块向所述数据的请求方返回未查询到所请求的数据的指示,如果否,则置新的预定时长t2 =前次预定时长tl+ △ t,再触发所述休眠模块,其中,Δ t为有理数。
[0018]本发明的数据查找方案,在接收到数据获取请求时,如果请求的数据没有存储在对应数据库的缓存中,则试图从对应数据库的缓存中获取请求的数据的令牌,只有在获取到该数据的令牌的情况下,才访问对应数据库以查找所请求的数据,从而可以通过控制缓存中存储的数据的令牌的数量,避免并发情况下所有进程都去数据库中查找数据而导致数据库的访问压力过大的问题,进而可以提高数据的查找效率。
[0019]根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
【附图说明】
[0020]后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。在附图中:
[0021 ]图1是根据本发明实施例一的数据查找方法的流程示意图;
[0022]图2是根据本发明实施例二的数据查找方法的流程示意图;
[0023]图3是根据本发明实施例三的数据查找装置的结构示意图;以及
[0024]图4是根据本发明实施例三的可选数据查找装置的结构示意图。
【具体实施方式】
[0025]下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
[0026]实施例一
[0027]图1是根据本发明实施例一的数据查找方法的流程示意图,如图1所示,本实施例提供的数据查找方法主要包括以下步骤:
[0028]步骤S102,接收到数据获取请求,从对应数据库的缓存中查找所述数据获取请求所请求的数据;
[0029]在本实施例中,为了提高数据库的访问速度,将数据库中部分数据备份在缓存中,在接收到查询请求时,首先从对应数据库的缓存中查找请求的数据,如果从对应数据库的缓存中查找到请求的数据,则将查找到的数据返回给数据的请求方,如果在对应数据库的缓存中没有查找到所请求的数据,则执行步骤S104。
[0030]步骤S104,在从所述对应数据库的缓存中没有查找到所请求的数据的情况下,从所述对应数据库的缓存中获取所请求的数据对应的令牌;
[0031]在相关技术中,如果在对应数据库的缓存中没有查找到所请求的数据,则从对应数据库中查找,如果并发请求较多,会造成数据库的访问压力过大,因此,在本实施例中,在对应数据库的缓存中存储了数据库中各个数据对应的令牌,在没有从对应数据库的缓存中查找到所请求的数据的情况下,从对应数据库的缓存中获取所请求的数据的令牌。
[0032]在本发明实施例的一个可选实施方案中,可以在对应数据库的缓存中存储各个数据的关键字与令牌的对应关系,根据所请求的数据的关键字,可以获取到对应的令牌。
[0033]在本实施例中,一个令牌只能同时被一个进程获取