关系型数据的搜索方法和装置与流程

文档序号:12041967阅读:219来源:国知局
关系型数据的搜索方法和装置与流程
本发明涉及数据处理技术领域,特别涉及一种关系型数据的搜索方法和装置。

背景技术:
关系型数据库是以关系模型为基础建立的数据库,由于能够较好的模拟现实世界中各种实体以及实体之间的关系而得到了广泛的应用。而如何从关系型数据库中快速检索到所需的数据一直是业界研究的重要课题之一。为了提高检索效率,往往会为数据库建立索引,由查询条件利用索引来快速锁定查询数据范围,最终返回查询结果。目前市场流行的一种检索方案为采用结构化查询语言(SQL)进行检索,在进行数据检索时,输入各种不同的关系条件,此关系条件将生成SQL语句的where条件,由SQL语句完成检索并将结果返回给系统。然而,这种SQL检索方案过度依赖数据库,当数据库压力达到瓶颈时,大量的SQL查询会造成数据库缓慢最终造成数据检索缓慢。对于上述SQL检索的缺陷,业界又提出了一种采用memcache,redis等高性能内存缓存数据方案,支持键-值(Key-Value)的关系型数据。在进行数据检索时,根据键Key获取内存中此键对应的数据,提高了访问性能。然而,这种检索方案仅支持Key与Value这种一对一的查询方式,无法根据查询条件获取查询结果,查询方式不灵活。

技术实现要素:
本发明提供的一种关系型数据的搜索方法和装置,以解决现有方案数据库检索时速度缓慢以及内存检索时查询方式不灵活的问题。为达到上述目的,本发明实施例采用了如下技术方案:本发明实施例提供了一种关系型数据的搜索方法,设置与各搜索条件对应的数字编码,利用至少一个搜索条件的数字编码生成索引,根据索引和路 由配置在多个索引内存中存储关系型数据的键Key,所述方法包括:当接收到的搜索条件中存在相应的索引时,根据该索引和所述路由配置确定该搜索条件所对应的至少一个索引内存,当接收到的搜索条件中不存在相应的索引时,将任意索引内存确定为该搜索条件所对应的索引内存;根据接收到的搜索条件从所确定的索引内存中提取符合条件的搜索描述标识,其中,所述索引内存中存储搜索描述标识及相对应的Key,所述搜索描述标识是由搜索条件的数字编码生成的;利用搜索描述标识获取相应的Key,并通过所获取到的Key得到关系型数据的值Value。本发明实施例还提供了一种关系型数据的搜索装置,所述装置包括分布式构建单元、索引搜索单元和数据获取单元,其中,所述分布式构建单元,用于设置与各搜索条件对应的数字编码,利用至少一个搜索条件的数字编码生成索引,根据索引和路由配置在多个索引内存中存储关系型数据的键Key,所述索引内存中存储搜索描述标识及相对应的Key,所述搜索描述标识是由搜索条件的数字编码生成的;所述索引搜索单元,用于当接收到的搜索条件中存在相应的索引时,根据该索引和所述路由配置确定该搜索条件所对应的至少一个索引内存,当接收到的搜索条件中不存在相应的索引时,将任意索引内存确定为该搜索条件所对应的索引内存;以及,根据接收到的搜索条件从所确定的索引内存中提取符合条件的搜索描述标识;所述数据获取单元,用于利用搜索描述标识获取相应的Key,并通过所获取到的Key得到关系型数据的值Value。本发明实施例的有益效果是:本发明实施例通过直接访问内存提高了数据搜索的速度,并且能够实现根据搜索条件对内存中关系型数据的搜索,显著提高了搜索方式的灵活性,能够满足各种数据搜索场景的需求。并且,本方案采用一种分布式的结构,能够在多个索引内存分别执行相应数据的搜索,均衡了系统中的数据处理负荷,有助于提高数据搜索速度和 系统性能。附图说明图1为本发明实施例一提供的一种关系型数据的搜索方法流程图;图2为本发明实施例三提供的一种关系型数据的搜索装置结构示意图;图3为本发明实施例三提供的应用关系型数据的搜索装置的系统结构示意图。具体实施方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。本发明实施例的技术构思在于选择某一搜索条件或者组合搜索条件来建立索引,将所建立的索引存储在内存(索引内存)中。由于当关系型数据容量较大时,索引容量也会较大,为实现扩容,建立配置表作为索引的路由配置,也就是将某一个索引对应存储到某一索引内存中;而当某一索引内存访问压力巨大或者其存储的索引超过内存上限时,也需要实现扩容,则将某一索引分别存储在多个索引内存中,这样就完成了分布式搜索系统的构建,当然此系统也支持根据索引和关系型数据的键值进行更新索引。参见图1,为本发明实施例一提供的一种关系型数据的搜索方法,所述方法包括:11:设置与各搜索条件对应的数字编码,利用至少一个搜索条件的数字编码生成索引,根据索引和路由配置在多个索引内存中存储关系型数据的键(Key);12:判断当前接收到的搜索条件中是否存在相应的索引,若是,执行步骤13a,若否,执行步骤13b;13a:当接收到的搜索条件中存在相应的索引时,根据该索引和所述路 由配置确定该搜索条件所对应的至少一个索引内存,进入步骤14。13b:当接收到的搜索条件中不存在相应的索引时,将任意一个或多个索引内存确定为该搜索条件所对应的索引内存,进入步骤14。14:根据接收到的搜索条件从所确定的索引内存中提取符合条件的搜索描述标识,然后进入步骤15;其中,所述索引内存中存储搜索描述标识及相对应的Key,所述搜索描述标识是由搜索条件的数字编码生成的。15:利用搜索描述标识获取相应的Key,并通过所获取到的Key得到关系型数据的值(Value)。在上述步骤14中,也可能出现根据搜索条件无法从所确定的索引内存中提取出符合条件的搜索描述标识的情况,这时,可以直接返回失败消息,在此,本发明各实施例中主要对所关注的能够根据搜索条件提取出符合条件的搜索描述标识的情况进行说明。下面对本发明实施例二提供的关系型数据的搜索方法进行具体说明。本发明实施例以关系型数据存储用户信息的场景为例进行说明,该场景中的Key为用户标识(UseId),Value为用户资料。用户资料可以按照最近最少使用(LRU)方式存储在数据内存中。本实施例兼容现有的memcache,redis等存储方式,可以通过UseId定位到存储相应Value的数据内存(如数据内存服务器),从而获取到单个用户的资料。21:设置与各搜索条件对应的数字编码,利用至少一个搜索条件的数字编码生成索引,根据索引和路由配置将关系型数据的键(Key)存储在对应的索引内存中。根据关系型数据的内容不同,所采用的搜索条件也不同,在本实施例中,搜索条件可以包括用户所属的“国家”、“省份”、“城市”、“年龄范围”、“性别”、“在线状态”等,则可以设置数字编码1-1024分别标识不同“城市”,每一个数字代表一个城市,相似的,数字编码1-64分别标识不同“省份”,数字编码1-16分别标识不同“国家”,数字编码1(男)和2(女)分别标识不同“性别”等等。在利用至少一个搜索条件的数字编码生成索引时,可以直接将一个搜索 条件的数字编码直接作为索引,也可以将多个搜索条件的数字编码组合起来作为索引,组合方式可以为合并或排除等方式,如将搜索条件1的数字编码和搜索条件2的数字编码合并在一起作为索引,即该索引能够标识所有同时满足搜索条件1和搜索条件2的key,或者,将具有搜索条件1的数字编码并排除搜索条件2的数字编码作为索引,即该索引能够标识所有满足搜索条件1但不满足搜索条件2的key。根据上述数字编码生成搜索描述标识(ProfileId),用来表示搜索条件,也对所保存的用户资料进行了描述。例如,将搜索条件的数字编码转换为比特,将所述比特按照预定顺序组合生成搜索条件的搜索描述标识,该预定顺序可以为如下的搜索条件排列顺序:城市-省份-国家-性别-年龄范围-在线状态-其它。本实施例中的ProfileId采用长整形,长整形有64个比特位,从而当将上述数字编码转换为比特时,能够有足够的比特位来表示各种搜索条件,例如,用比特位0-9表示城市,比特位10-15表示省份,比特位16-19表示国家,比特位20-21表示性别,比特位22-24表示年龄范围,比特位25表示在线状态。剩余未使用的比特位可以用于后续扩展。每一个ProfileId会有多个相对应的UserId,一个ProfileId对应一个UserId集合,即有多个用户都符合该ProfileId所表示的搜索条件。当在关系型数据中新增一个用户UserId-1时,通过上述方式得到该用户对应的ProfileId-1,当ProfileId-1已存在时,将UserId-1加入到ProfileId-1的UserId集合中,当ProfileId-1不存在时,则记录该ProfileId-1和与其对应的UserId-1。示例性的,本实施例中将搜索条件“省份”的比特字段(ProfileId中的10-15比特位)作为索引,并为该索引建立路由配置,路由配置指示索引所对应的索引内存组。一个索引内存组中设置一个或多个索引内存(可由索引内存服务器实现)。例如,索引可以指示“省份”为北京、上海,则北京所对应的索引内存组中负载4台索引内存服务器,上海所对应的索引内存组中负载4台索引内存服务器,其他省份所对应的索引内存组中包含一台索引内存服务器。服务器具体的数量主要根据不同地区的用户查询压力和用户数量来决定。在构建分布式关系型数据搜索系统时,首先根据用户资料生成ProfileId,然后根据ProfileId中第10-15比特位和路由配置进行匹配,确定该用户的Key(UseId)所属于的索引内存组,如该用户的UseId属于北京所对应的索引内存组1,则将符合所述索引对应的搜索条件的Key存储在所确定的索引内存组中,即将符合搜索条件为北京的用户的UseId存储在索引内存组1中。当所述索引内存组中包含的索引内存的数量为二个以上时,按照所述索引内存组中索引内存的数量对Key进行取模运算,以确定存储该Key的索引内存。例如,如果对用户匹配的结果为属于北京所对应的索引内存组1,索引内存组1中有4台索引内存服务器,则根据UserIdmod4的结果得到相同索引下索引内存服务器的编号(记为AccessPoint),将该用户的ProfileId和UserId存储到计算出的编号的索引内存服务器上,索引内存服务器会存储ProfileId-UserId-AccessPoint的对应关系。本实施例还维护一个条件集合ConditionCollection,该条件集合中记录编号为AccessPoint的服务器中不同ProfileId下UserId数目总数。利用该UserId数目总数可以在执行搜索时,首先向搜索方返回满足条件的数目总数,便于搜索方快速获取所需数据,且利用该UserId数目总数能够分页返回数据,也有助于减少逐条查询的开销。由于新增用户、删除用户或者对已有用户数据进行修改,或者改变索引的选取方式等都会导致索引内存中所存储的ProfileId和UserId失效或不完整,当出现这些事件后,本实施例针对事件中所涉及的UserId,对相应索引内存中所存储的ProfileId和UserId进行更新,如删除索引内存中存储的失效的ProfileId或UserId,在索引内存中增加新的ProfileId或UserId等。通过上述方式,建立了分布式关系型数据基于内存的搜索架构,以下对在该架构中进行数据搜索的方式进行说明。22:接收当前的搜索条件。当接收到的搜索条件中存在相应的索引时,如将搜索条件按照数字编码转换为与上述ProfileId相同的长整型数值,该长整型数值的10-15比特位的 值能够与所选定索引的值相一致,即该搜索条件中存在索引,则根据该索引和路由配置确定该搜索条件所对应的至少一个索引内存(即对应的索引内存组);当接收到的搜索条件中不存在相应的索引时,如将搜索条件按照数字编码转换为与上述ProfileId相同的长整型数值,该长整型数值的10-15比特位的值无法与所选定索引的值相一致,即该搜索条件中不存在索引,则将任意索引内存确定为该搜索条件所对应的索引内存。23:提取符合条件的搜索描述标识。根据接收到的搜索条件从所确定的索引内存中提取符合条件的搜索描述标识包括:从索引内存中提取与接收到的搜索条件的搜索描述标识相一致的搜索描述标识的集合,记录此集合中的ProfileId的数量为TotalCount,可以分页读取该集合中的ProfileId,返回至搜索方。根据接收到的选取指令从所述集合中选取所需的搜索描述标识。例如选取指令指示所选取的起始页1、终止页n,则从上述集合中选取起始页1至终止页n中的搜索描述标识作为最终提取到的符合条件的搜索描述标识。并且,在将一个ProfileId所对应的UserId返回至搜索方时,也可以利用条件集合中所记录的该ProfileId下UserId的数目总数采用分页显示的方式,返回至搜索方。24:利用搜索描述标识获取相应的Key,并通过所获取到的Key得到关系型数据的Value。遍历提取到的每个ProfileId对应的UserId,通过该UserId搜索数据内存得到查询结果Value。进一步的,本实施例中还可以采用一些优化措施,以进一步加快搜索速度:首先,对于上述步骤23,当所确定的索引内存的数量为二个以上时,在所确定的索引内存中,先从任一索引内存中提取符合条件的搜索描述标识的集合,当该索引内存中不存在符合条件的搜索描述标识且所述选取指令指示继续提取操作时,再更换用于提取搜索描述标识的索引内存。这种优化方式,尽量先在一台服务器进行数据读取,若从一台索引内存服务器上提取的搜索 描述标识的集合已满足搜索方需求时,就结束提取操作,避免了跨服务器访问操作,提高了搜索效率;其次,本实施例还提供一种快速搜索的方式,保存在已执行的操作中根据搜索条件得到的Value,将该Value和该Value所对应的搜索条件存储在内存中,在一次新的搜索操作开始时,当新的搜索条件与已执行的搜索条件(所存储的该Value所对应的搜索条件)相同时,从内存中直接提取所存储的Value作为获取到的该新的搜索条件的Value,而不再重复执行搜索过程。另外,本实施例还可以在一次搜索操作中对接收到的多个搜索条件同时进行处理,采用批量处理的方式,提高搜索效率。本发明实施例三提供了一种关系型数据的搜索装置,参见图2,所述装置包括分布式构建单元21、索引搜索单元22和数据获取单元23,其中,所述分布式构建单元21,用于设置与各搜索条件对应的数字编码,利用至少一个搜索条件的数字编码生成索引,根据索引和路由配置在多个索引内存中存储关系型数据的Key,所述索引内存中存储搜索描述标识及相对应的Key,所述搜索描述标识是由搜索条件的数字编码生成的;所述索引搜索单元22,用于当接收到的搜索条件中存在相应的索引时,根据该索引和所述路由配置确定该搜索条件所对应的至少一个索引内存,当接收到的搜索条件中不存在相应的索引时,将任意索引内存确定为该搜索条件所对应的索引内存;以及,根据接收到的搜索条件从所确定的索引内存中提取符合条件的搜索描述标识;所述数据获取单元23,用于利用搜索描述标识获取相应的Key,并通过所获取到的Key得到关系型数据的Value。上述每一索引内存可以由一台索引内存服务器实现,参见图3,上述关系型数据的搜索装置可以在服务器31上实现,每一索引内存组32中包含一台或多台索引内存服务器。具体的,所述分布式构建单元21包括分布式存储模块,用于根据索引和路由配置确定Key所属于的索引内存组;将符合所述索引对应的搜索条件 的Key存储在所确定的索引内存组中,其中,当所述索引内存组中包含的索引内存的数量为二个以上时,按照所述索引内存组中索引内存的数量对Key进行取模运算,以确定存储该Key的索引内存。所述分布式构建单元21还包括标识生成模块,用于通过如下方式由搜索条件的数字编码生成所述搜索描述标识:将搜索条件的数字编码转换为比特,并将所述比特按照预定顺序组合生成搜索条件的搜索描述标识。上述装置还包括快速搜索单元,用于在通过所述数据获取单元得到关系型数据的Value之后,将获取到的Value和该Value所对应的搜索条件存储在内存中,当新的搜索条件与该Value所对应的搜索条件相同时,从内存中直接提取所存储的Value作为获取到的该新的搜索条件的Value。通过快速搜索单元,无需重复执行相同的搜索过程,提高了搜索效率。本发明装置实施例中各单元和模块的具体工作方式参见本发明的方法实施例。由上所述,本发明实施例通过直接访问内存提高了数据搜索的速度,并且能够实现根据搜索条件对内存中关系型数据的搜索,显著提高了搜索方式的灵活性,能够满足各种数据搜索场景的需求。并且,本方案采用一种分布式的结构,能够在多个索引内存分别执行相应数据的搜索,均衡了系统中的数据处理负荷,有助于提高数据搜索速度和系统性能。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1