基于内存的搜索方法及装置与流程

文档序号:13640862阅读:202来源:国知局

本发明涉及计算机技术领域,具体而言,涉及一种基于内存的搜索方法及装置。



背景技术:

目前,信息系统的数据存储还是以关系型数据库为主,虽然当前nosql数据库的应用领域有所扩展。但由于关系型数据库的优点,它还是用于保存绝大部分的业务数据信息。sql语言有丰富的表达能力,可以完成各种复杂的应用场景。在关系型数据库中查询数据还是利用sql语句,采用表之间的关联来查出所需要的数据。

在实际应用场景中,需要查询的信息往往存在于多个数据表中,就意味着存在多次数据关联。每一次的数据关联都需要消耗资源,系统查询的速度随着关联次数的增加逐步变慢。数据表保存在磁盘中,磁盘的读取速度比较慢,只有在某些数据频繁使用时,才会被数据库系统调用到内存中,此时性能会有所提高。但在大部分情况下,查询的数据是随机分布的,总体上的性能不会得到提升。因此,采用这种方式,由于受制于磁盘的性能,时间运行速度不可能得到根本性的提升。



技术实现要素:

有鉴于此,本发明的目的在于提供一种基于内存的搜索方法及装置,以解决上述问题。

本发明的较佳实施例提供一种基于内存的搜索方法,所述方法包括:

加载内存搜索的配置文件,根据所述配置文件分别从数据库的多个数据表中加载所需搜索的多种类型的数据至数据字典中,以将所述数据加载至内存中;

接收搜索指令,根据所述搜索指令在所述数据字典中进行搜索、装配以得到与所述搜索指令相匹配的搜索结果。

进一步地,所述方法还包括:

为各类型的数据设置各自对应的同步周期;

获取所述数据库中发生改变的数据;

根据所述发生改变的数据的同步周期将该数据同步至所述数据字典中。

进一步地,所述方法还包括:

将各类型的数据的同步运行信息记录至日志文件中,所述同步运行信息包括同步周期以及执行同步的sql语句。

进一步地,根据所述配置文件分别从数据库的多个数据表中加载所需的多种类型的数据至数据字典中,并保存的步骤,包括:

执行预设的sql语句,根据所述配置文件从数据库的多个数据表中获取所需查询的多种类型的数据;

将各所述数据保存至数据字典中,以将各所述数据加载至系统内存中;

将各种类型的数据的初始化运行信息记录至日志文件中,所述初始化运行信息包括执行的sql语句以及执行的时间。

进一步地,所述搜索指令包含多个搜索条件,根据所述搜索指令在所述数据字典中进行搜索、装配以得到与所述搜索指令相匹配的搜索结果的步骤,包括:

执行搜索操作,在所述数据字典中搜索出与所述搜索指令中的其中一个搜索条件相匹配的数据;

将该次搜索操作搜索出的数据与上一次搜索操作搜索出的数据进行装配,生成该次搜索操作的中间结果;

判断该中间结果是否满足所述搜索指令中的全部搜索条件;

若满足,则将该中间结果作为搜索结果;

若不满足,则返回执行在所述数据字典中搜索出与所述搜索指令中的其中一个搜索条件相匹配的数据的步骤,直到获得的中间结果满足所述搜索指令中的全部搜索条件为止。

进一步地,根据所述搜索指令在所述数据字典中进行搜索、装配以得到与所述搜索指令相匹配的搜索结果的步骤,还包括:

记录每次搜索操作的搜索运行信息,并将所述搜索运行信息保存至日志文件中,所述搜索运行信息包括搜索时间以及搜索结果所包含的中间结果数目。

本发明另一较佳实施例提供一种基于内存的搜索装置,所述装置包括:

加载模块,用于加载内存搜索的配置文件,根据所述配置文件分别从数据库的多个数据表中加载所需的多种类型的数据至数据字典中,以将所述数据加载至内存中;

搜索模块,用于接收搜索指令,根据所述搜索指令在所述数据字典中进行搜索、装配以得到与所述搜索指令相匹配的搜索结果。

进一步地,所述装置还包括:

设置模块,用于为各类型的数据设置各自对应的同步周期;

获取模块,用于获取所述数据库中发生改变的数据;

同步模块,用于根据所述发生改变的数据的同步周期将该数据同步至所述数据字典中。

进一步地,所述加载模块包括数据获取单元、保存单元以及记录单元;

所述数据获取单元用于执行预设的sql语句,根据所述配置文件从数据库的多个数据表中获取所需查询的多种类型的数据;

所述保存单元用于将各所述数据保存至数据字典中,以将各所述数据加载至系统内存中;

所述记录单元用于将各种类型的数据的初始化运行信息记录至日志文件中,所述初始化运行信息包括执行的sql语句以及执行的时间。

进一步地,所述搜索指令包含多个搜索条件,所述搜索模块包括搜索单元、装配单元、判断单元、第一执行单元以及第二执行单元;

所述搜索单元用于执行搜索操作,在所述数据字典中搜索出与所述搜索指令中的其中一个搜索条件相匹配的数据;

所述装配单元用于将该次搜索操作搜索出的数据与上一次搜索操作搜索出的数据进行装配,生成该次搜索操作的中间结果;

所述判断单元用于判断该中间结果是否满足所述搜索指令中的全部搜索条件;

所述第一执行单元用于在该中间结果满足所述搜索指令中的全部搜索条件时,将该中间结果作为搜索结果;

所述第二执行单元用于在该中间结果不满足所述搜索指令中的全部搜索条件时,返回执行在所述数据字典中搜索出与所述搜索指令中的其中一个搜索条件相匹配的数据的步骤,直到获得的中间结果满足所述搜索指令中的全部搜索条件为止。

本发明实施例提供的基于内存的搜索方法及装置,根据加载的内存搜索的配置文件分别从数据库的多个数据表中加载所需搜索的多种类型的数据至数据字典中,以将所述数据加载至内存中。再根据接收到的搜索指令在所述数据字典中进行搜索、装配以得到与所述搜索指令匹配的搜索结果。通过上述过程,将数据库中多个数据表中的多类型数据统一加载至数据字典后,再进行相应的搜索匹配,减少了搜索中的数据关联,以减少了数据关联所需的资源消耗,极大地提高了搜索速度。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明较佳实施例提供的一种电子设备的示意性结构框图。

图2为本发明较佳实施例提供的基于内存的搜索方法的流程图。

图3为图2中步骤s101的子步骤的流程图。

图4为图2中步骤s102的子步骤的流程图。

图5为本发明较佳实施例提供的基于内存的搜索装置的功能模块框图。

图6为本发明较佳实施例提供的加载模块的功能模块框图。

图7为本发明较佳实施例提供的搜索模块的功能模块框图。

图标:100-电子设备;110-基于内存的搜索装置;111-加载模块;1111-数据获取单元;1112-保存单元;1113-记录单元;112-搜索模块;1121-搜索单元;1122-装配单元;1123-判断单元;1124-第一执行单元;1125-第二执行单元;113-设置模块;114-获取模块;115-同步模块;120-处理器;130-存储器。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

请参阅图1,为本发明较佳实施例提供的一种电子设备100的示意性结构框图。所述电子设备100包括基于内存的搜索装置110、处理器120及存储器130。其中,所述存储器130与处理器120之间直接或间接地电性连接,以实现数据的传输或交互。所述基于内存的搜索装置110包括至少一个可以软件或固件的形式存储于所述存储器130中或固化在所述电子设备100的操作系统中的软件功能模块。所述处理器120用于执行存储器130中存储的可执行模块,例如所述基于内存的搜索装置110包括的软件功能模块或计算机程序。

在本实施例中,所述电子设备100可以是独立的具有数据处理能力的终端设备,例如个人电脑、笔记本电脑等。

如图2所示,是本发明实施例提供的一种应用于图1所示的电子设备100的基于内存的搜索方法的示意性流程图。所应说明的是,本实施例提供的方法不以图2及以下所述的顺序为限制。下面将对图2所示的具体流程进行详细的阐述。

步骤s101,加载内存搜索的配置文件,根据所述配置文件分别从数据库的多个数据表中加载所需搜索的多种类型的数据至数据字典中,以将所述数据加载至内存中。

在实际场景中,所需查询的数据源往往很多,例如多达几十处,而这些数据源位于不同的数据列表中,在进行查询时往往存在关联,则需要分别至不同的数据列表进行搜索,造成查询效率低下。在本实施例中,将需要查询的数据全部加载至数据字典中进行保存,以将数据加载至系统内存中,以提高数据查询匹配的效率。可选地,在本实施例中,加载内存搜索的配置文件,根据配置文件从数据库的多个数据表中加载所需的多种类型的数据至数据字典中并保存。

在本实施例中,所述的数据字典为c#语句中的dictory字典类型,通过key能快速找到value(所存对象)的能力。利用数据字典以用于数据的查询匹配其效率很高,远超过一般的数组或列表。

请参阅图3,在本实施例中,步骤s101可以包括步骤s1011、步骤s1012以及步骤s1013三个子步骤。

步骤s1011,执行预设的sql语句,根据所述配置文件从数据库的多个数据表中获取所需查询的多种类型的数据。

步骤s1012,将各所述数据保存至数据字典中,以将各所述数据加载至系统内存中。

步骤s1013,将各种类型的数据的初始化运行信息记录至日志文件中,所述初始化运行信息包括执行的sql语句以及执行的时间。

可选地,在本实施例中,利用.net中的linq技术,根据配置文件来进行关联查询。linq是语言集成查询(languageintegratedquery)的简称,想要利用linq进行查询,数据源需要支持ienumerable或ienumerable(t)泛型接口或派生接口(如泛型的iqueryable(t)接口)。通过使用linq以查询预加载至内存中的数据,可达到快速得到查询结果的效果。

sql语句是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。利用linq查询可指定要从数据源中检索的信息,且还可指定在返回这些信息之前如何对其进行排序、分组以及结构化。

系统执行预设的sql语句,根据配置文件从数据库的多个数据表中获取查询所需的每一种类型的数据。将获取到的多类型数据依次加载至数据字典中,此时所需查询的数据全部加载至系统内存中。可选地,可采用例如from子句来获取数据源,在某些情况下,原数据表中的元素中本身可能是序列或包含序列,则可采用复合from子句以获取含内部集合的数据源。

此外,系统将每一种类型的数据的初始化运行信息记录至日志文件中,其中,包括初始化所执行的sql语句以及初始化的执行时间等。

步骤s102,接收搜索指令,根据所述搜索指令在所述数据字典中进行搜索、装配以得到与所述搜索指令相匹配的搜索结果。

在本实施例中,接收用户所输入的搜索指令,该搜索指令包括了具体的搜索条件。应当理解,该搜索指令所包含的搜索条件往往为多个,在这种情况下,一次搜索操作不能得到正确的搜索结果。因此需要依次根据各搜索条件对数据字典中的多类型数据进行搜索以及装配以得到最终搜索结果。

请参阅图4,在本实施例中,步骤s102可以包括步骤s1021、步骤s1022、步骤s1023、步骤s1024以及步骤s1025五个子步骤。

步骤s1021,执行搜索操作,在所述数据字典中搜索出与所述搜索指令中的其中一个搜索条件相匹配的数据。

步骤s1022,将该次搜索操作搜索出的数据与上一次搜索操作搜索出的数据进行装配,生成该次搜索操作的中间结果。

步骤s1023,判断该中间结果是否满足所述搜索指令中的全部搜索条件,若满足,则执行以下步骤s1024,若不满足,则返回执行在所述数据字典中搜索出与所述搜索指令中的其中一个搜索条件相匹配的数据的步骤,直到获得的中间结果满足所述搜索指令中的全部搜索条件为止。

步骤s1024,将该中间结果作为搜索结果。

可选地,在用户搜索指令的触发下执行搜索操作,解析搜索指令中包含的具体的搜索条件。若搜索条件为多个,则需依次根据各搜索条件来进行相应搜索。可选地,可采用例如复合from子句来进行多条件搜索。例如若搜索指令为“搜索出所有学生中高三年级的学生成绩在90分以上的”,则可以将搜索指令解析为三个搜索条件,即“学生”、“高三年级”以及“成绩在90分以上”。首先遍历学生对象集合中的每个学生对象,然后用另一个from子句,对每个学生对象的表明年级的属性进行遍历,筛选出年级为高三年级的学生对象,再用另一个from子句对筛选出的学生对象中的成绩属性进行遍历,筛选出含有90分以上的学生信息进行返回。

则在上述过程,在进行第二次搜索操作,即筛选出学生对象中的高三年级的学生对象时,其实是结合了第一次搜索操作的搜索数据的,即第二次的搜索操作的数据和上一次的搜索操作即第一次搜索操作的搜索数据相装配,得到第二次搜索操作的中间结果。若此时,该中间结果满足所有的搜索条件,则可将该中间结果作为最终的搜索结果返回。在本实施例中,第二搜索操作的中间结果并未满足所有的搜索条件,则需要在第二搜索操作的基本上,进行第三次的搜索操作。在进行第三次搜索操作时,将搜索出的数据与第二搜索操作的搜索数据相装配,作为第三次搜索操作的中间结果。在本实施例中,第三次搜索操作的中间结果已满足所有的搜索条件,则可将第三次搜索操作的中间结果作为最终的搜索结果并返回。

步骤s1025,记录每次搜索操作的搜索运行信息,并将所述搜索运行信息保存至日志文件中,所述搜索运行信息包括搜索时间以及搜索结果所包含的中间结果数目。

在本实施例中,还可将每次搜索操作的搜索运行信息保存至日志文件中,其中,搜索运行信息包括每次搜索操作的搜索时间、最终的搜索结果包括的中间结果数目等。

可选地,在本实施例中,所述方法还包括以下步骤:

步骤s103,为各类型的数据设置各自对应的同步周期。

步骤s104,获取所述数据库中发生改变的数据。

步骤s105,根据所述发生改变的数据的同步周期将该数据同步至所述数据字典中。

在本实施例中,数据库中各类型的数据源均会不断地更新,但不同类型的数据源更新的频率有较大差异。针对不同类型的数据源定义不同的同步周期,以将数据库中发生改变的数据定时同步至数据字典中。在本实施例中,在设置同步周期时,需要考虑到降低数据库系统的负荷。在本实施例中,对不同类型的数据设置同步周期时,可使得同时进行数据同步的运行时间一般不超过0.2秒。应当理解,在实际场景中,业务上要求数据更新要及时,但也不是要求严格精确,因为在技术上严格精确一方面不可能完全达到,另一方面在实际上起到的意义不大。因此,可结合多方面的因素来考虑数据更新规则。

在本实施例中,获取数据库中已发生改变的,即已更新过的数据,并根据这些数据其各自对应的同步周期将发生改变的数据同步至数据字典中,使数据字典中的数据与数据库中的数据源达到同步更新。

此外,在本实施例中,所述方法还包括以下步骤:

步骤s106,将各类型的数据的同步运行信息记录至日志文件中,所述同步运行信息包括同步周期以及执行同步的sql语句。

请参阅图5,为本发明另一较佳实施例提供的基于内存的搜索装置110的功能模块框图。所述基于内存的搜索装置110包括加载模块111、搜索模块112、设置模块113、获取模块114以及同步模块115。

所述加载模块111用于加载内存搜索的配置文件,根据所述配置文件分别从数据库的多个数据表中加载所需搜索的多种类型的数据至数据字典中,以将所述数据加载至内存中。具体地,该加载模块111可用于执行图2中所示的步骤s101,具体的操作方法可参考步骤s101的详细描述。

所述搜索模块112用于接收搜索指令,根据所述搜索指令在所述数据字典中进行搜索、装配以得到与所述搜索指令相匹配的搜索结果。具体地,该搜索模块112可用于执行图2中所示的步骤s102,具体的操作方法可参考步骤s102的详细描述。

所述设置模块113用于为各类型的数据设置各自对应的同步周期。具体地,该设置模块113可用于执行图2中所示的步骤s103,具体的操作方法可参考步骤s103的详细描述。

所述获取模块114用于获取所述数据库中发生改变的数据。具体地,该获取模块114可用于执行图2中所示的步骤s104,具体的操作方法可参考步骤s104的详细描述。

所述同步模块115用于根据所述发生改变的数据的同步周期将该数据同步至所述数据字典中。具体地,该同步模块115可用于执行图2中所示的步骤s105,具体的操作方法可参考步骤s105的详细描述。

请参阅图6,在本实施例中,所述加载模块111包括数据获取单元1111、保存单元1112以及记录单元1113。

所述数据获取单元1111用于执行预设的sql语句,根据所述配置文件从数据库的多个数据表中获取所需查询的多种类型的数据。具体地,该数据获取单元1111可用于执行图3中所示的步骤s1011,具体的操作方法可参考步骤s1011的详细描述。

所述保存单元1112用于将各所述数据保存至数据字典中,以将各所述数据加载至系统内存中。具体地,该保存单元1112可用于执行图3中所示的步骤s1012,具体的操作方法可参考步骤s1012的详细描述。

所述记录单元1113用于将各种类型的数据的初始化运行信息记录至日志文件中,所述初始化运行信息包括执行的sql语句以及执行的时间。具体地,该记录单元1113可用于执行图3中所示的步骤s1013,具体的操作方法可参考步骤s1013的详细描述。

请参阅图7,在本实施例中,所述搜索指令包括多个搜索条件,所述搜索模块112包括搜索单元1121、装配单元1122、判断单元1123、第一执行单元1124以及第二执行单元1125。

所述搜索单元1121用于执行搜索操作,在所述数据字典中搜索出与所述搜索指令中的其中一个搜索条件相匹配的数据。具体地,该搜索单元1121可用于执行图4中所示的步骤s1021,具体的操作方法可参考步骤s1021的详细描述。

所述装配单元1122用于将该次搜索操作搜索出的数据与上一次搜索操作搜索出的数据进行装配,生成该次搜索操作的中间结果。具体地,该装配单元1122可用于执行图4中所示的步骤s1022,具体的操作方法可参考步骤s1022的详细描述。

所述判断单元1123用于判断该中间结果是否满足所述搜索指令中的全部搜索条件。具体地,该判断单元1123可用于执行图4中所示的步骤s1023,具体的操作方法可参考步骤s1023的详细描述。

所述第一执行单元1124用于在该中间结果满足所述搜索指令中的全部搜索条件时,将该中间结果作为搜索结果。具体地,该第一执行单元1124可用于执行图4中所示的步骤s1024,具体的操作方法可参考步骤s1024的详细描述。

所述第二执行单元1125用于在该中间结果不满足所述搜索指令中的全部搜索条件时,返回执行在所述数据字典中搜索出与所述搜索指令中的其中一个搜索条件相匹配的数据的步骤,直到获得的中间结果满足所述搜索指令中的全部搜索条件为止。

综上所述,本发明实施例提供的基于内存的搜索方法及装置,根据加载的内存搜索的配置文件分别从数据库的多个数据表中加载所需搜索的多种类型的数据至数据字典中,以将所述数据加载至内存中。再根据接收到的搜索指令在所述数据字典中进行搜索、装配以得到与所述搜索指令匹配的搜索结果。通过上述过程,将数据库中多个数据表中的多类型数据统一加载至数据字典后,再进行相应的搜索匹配,减少了搜索中的数据关联,以减少了数据关联所需的资源消耗,极大地提高了搜索速度。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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