一种面向虚拟资产数据的查询优化方法与流程

文档序号:11830126阅读:252来源:国知局
一种面向虚拟资产数据的查询优化方法与流程
本技术属于网络与信息安全领域,涉及一种面向虚拟资产数据的查询优化方法。
背景技术
:随着信息科学技术日新月异地发展,特别是互联网的迅猛发展为虚拟资产的产生及交易提供了广阔的平台,促进了网络交易的繁荣发展,与此同时,也产生了海量的虚拟资产数据。如何快速查询到有效信息成为了一个巨大的挑战,因此,对海量数据库的查询优化工作势在必行。基于此,文献[1]对XQuery/Update中的Transform查询处理进行了详细讨论,它的核心思想是基于XQuery的导航式处理技术。通过构建自动机,根据当前遇到的结点,执行自动机上的相关操作。文献[2]提出了一种基于遗传算法的数据库查询优化方法,它是基于查询数据关联度之间的关系进行查询的,继承了遗传算法寻优能力强的优点。文献[3]提出了一种分布式语义缓存覆盖技术(DiSCO),它可以解决基于定位系统(LBS)后端数据的负载瓶颈,同时提升LBS的整体性。然而,第一种方法中一次只能处理一个结点,并不适用于基于代数的查询处理,查询效率较差。第二种方法使用的遗传算法,对于不同问题需要设置不同的遗传算子,所以存在局部搜索能力差等不足。第三种方法没有考虑后端数据的更新,这可能导致缓存数据与后端数据的不一致,从而导致查询结果准确度较低。[1]FanW,CongG,BohannonP.QueryingXMLwithupdatesyntax[C]//Proceedingsofthe2007ACMSIGMODinternationalconferenceonManagementofdata.ACM,2007:293-304.[2]KumarTVV,SinghV,VermaAK.Distributedqueryprocessingplansgenerationusinggeneticalgorithm[J].InternationalJournalofComputerTheoryandEngineering,2011,3(1):38-45.[3]LubbeC,BrodtA,CiprianiN,etal.DiSCO:ADistributedSemanticCacheOverlayforLocation-basedServices[C]//MobileDataManagement(MDM),201112thIEEEInternationalConferenceon.IEEE,2011,1:17-26.技术实现要素:针对上述技术问题,本发明提出一种面向虚拟资产数据的查询优化方法,该方法从语义缓存、倒排索引和节点索引三个方面实现查询优化,适用于海量虚拟资产信息数据的查询优化。所述语义缓存,是指将用户向服务器端提交的查询语句和查询实际得到的结果数据统一存储在指定的缓存中,因而其不仅包含有数据,还有对数据的相关描述信息,从而可以提高查询效率。所述倒排索引,是根据属性的值来查找记录。这种索引中的每一项都包括一个属性值和具有该属性值的各记录的主键,在虚拟资产数据库中则是唯一标识及其平台。根据日志、受欢迎程度、访问频率等系数来挑选出热门、中心词汇,将这些词汇单独抽取出来建立一个倒排索引结构。所述节点索引,是指虚拟资产分布式数据库中,存在相同数据的多个副本,它们在不同的虚拟节点上,存储在不同的物理节点上。把具有相同唯一标识的 数据放到一起组成数据块,以数据块为单位考虑副本,建立一个节点索引记录各个数据块所存储的节点以及节点的忙闲情况。根据忙闲情况,调整储存节点,此外,当使用者访问某个机器节点,修改了某一用户的信息,可以通过节点索引来迅速查找相关节点,实行写同步。本发明技术方案具体包括以下步骤:1、首先查询语义缓存,如果包含所查询的信息,则直接执行第6步,否则执行第2步;2、对查询进行分类,如果是无指定列查询(知道某一属性值或者值的一部分而不知其属性,查询用户信息),则执行第3步,否则执行第4步;3、查询倒排索引(包含属性值,唯一标识,平台,属性),如果包含所查询的信息,则直接得出查询结果,否则执行第4步;4、查询节点索引(包含唯一标识,节点地址,忙闲情况),如果包含空闲节点,跳转到相应节点,执行第5步,否则循环执行第4步;5、顺序查询总数据库,得到相应结果,执行第6步;6、返回所得到的结果。本发明开发环境是在Linux操作系统的X86平台,JDK1.7基础上,安装Cassandra1.0或更高版本的数据库软件为系统提供数据支持,主要采用java语言编写。本发明要求服务器运行于安装有Linux操作系统的X86平台,JDK1.7或以上版本且具有多个机器节点的计算机环境。与现有技术相比,本发明结合语义缓存、倒排索引和节点索引进行查询优化,将此方法应用到虚拟资产海量信息的查询当中,可以大大降低查询时间,提高查询效率。附图说明图1为整体分布逻辑图图2为实施例虚拟资产数据库中查找“非凡”的实例图3为Cassandra数据库顺序查询过程具体实施方式下面通过具体实施方式来进一步说明本发明的技术方案:本发明提供一种面向虚拟资产数据的查询优化方法,该方法从语义缓存、倒排索引和节点索引三个方面实现查询优化,整体设计如图1所示。1、语义缓存虚拟资产数据规模庞大,从而导致索引文件也呈大规模特性,大规模索引文件在一定程度上将影响查询效率,但虚拟资产数据挖掘应用往往具有特殊针对性的挖掘对象(热点),挖掘对象数据仅仅为虚拟资产数据的小部分。针对挖掘对象的上下文信息和查询的局部性,面向虚拟资产关联查询的语义缓存技术可以很好地支持虚拟资产的快速关联查询。为了便于讨论,对以下概念进行定义:定义1(关系包含):如果集合A中存在关系f,它涉及n个元素(a1…an),则任意其中一个元素ai就被集合A关系包含,即集合A关系包含ai,表示为A○ai。定义2(集合相交):集合A与集合B,如果A中的存在元素I或者关系包含i,B中也存在I或者关系包含i,则称集合A与集合B相交,表示为A×B。定义3(比较包含与比较子集):如果有两个比较关系fa和fb:若fa中条件x>c,fb中条件x>d,而且c<d,则fa包含fb,fb是fa的子集, 表示为fb∈fa;若fa中条件x<c,fb中条件x<d,而且c>d,则fa包含fb,fb是fa的子集,表示为fb∈fa。(1)匹配分类及处理方式不论哪种数据库,只要是查询,在逻辑上都可以用SQL语言中的select,from,where,orderby,groupby五种语句来理解,排序是可以在得到结果集之后再进行的,所以我们将语义缓存项表示为P=<S,F,W,O,G,C>六项,其中select子句记作集合S可分为两部分,一部分是简单集合S1,它只包含简单的属性。另一部分是S2,它是由函数组成的复杂集合,from子句中的关系集合记为F;where子句的条件谓词记为W;groupby子句的分组属性集合为G;orderby子句的排列集合为O;查询的结果记为C。对于一个新来的查询Q要转化为Q=<SQ,FQ,WQ,OQ,GQ,CQ>,匹配的分类与处理主要可以分为以下几种情况:1)精确匹配:对于新来的查询Q=<SQ,FQ,WQ,OQ,GQ,CQ>,与语义缓存中某一项Pi=<Si,Fi,Wi,Oi,Gi,Ci>中S,F,W三项完全全同,则称查询Q与语义缓存精确匹配,Pi为关系项,Ci就是结果,再按照OQ,GQ,重新排序或分组得到结果集CQ。2)包含匹配:对于新来的查询Q=<SQ,FQ,WQ,OQ,GQ,CQ>,语义缓存中某些项Pi=<Si,Fi,Wi,Oi,Gi,Ci>,Fi是FQ的子集,Si是SQ的子集或与SQ集合相交,Wi是WQ的子集或者比较子集,则称查询Q与语义缓存包含匹配,Pi为关系项,Ci是结果的一部分。在数据库中以Fi,Si,Wi之外的条件关系为前提进行查找,将得到的结果与Ci取并集,最后按照OQ,GQ的排序或分组的要求得到结果集CQ。3)子集匹配:对于新来的查询Q=<SQ,FQ,WQ,OQ,GQ,CQ>,语义缓存中某些项Pi=<Si,Fi,Wi,Oi,Gi,Ci>,FQ与Fi的子集,SQ是Si的子集与Si集合相交,WQ 是Wi的子集或者比较子集,则称查询Q与语义缓存子集匹配,Pi为关系项,结果CQ是Ci的一部分。以条件SQ,FQ,WQ在缓存结果Ci中查找,再按照OQ,GQ的排序或分组的要求得到结果集CQ。4)相交匹配:对于新的查询Q=<SQ,FQ,WQ,OQ,GQ,CQ>,语义缓存中某些项Pi=<Si,Fi,Wi,Oi,Gi,Ci>,Fi是FQ的子集或与FQ集合相交,Si是SQ的子集或与SQ集合相交,Wi是WQ的子集或者比较子集或者集合相交且以上三种条件不能同时是子集,则称查询Q与语义缓存相交匹配,Pi为关系项,结果CQ与Ci相交。以相交的条件在Ci中查找,得到结果集CQ1,以不相交的条件在数据库中查找得到结果集CQ2,将CQ1与CQ2取并集,再按照OQ,GQ的排序或分组的要求得到结果集CQ。5)无匹配:对于新查询Q=<SQ,FQ,WQ,OQ,GQ,CQ>,如果Q与语义缓存中任意一项Pi=<Si,Fi,Wi,Oi,Gi,Ci>的SQ,FQ,WQ均不存在上述四种关系,则称查询Q与语义缓存无匹配,直接按照Q的查询要求访问数据库。下面就针对上述各类匹配进行举例具体说明:以查询Q为例:要查找满足年龄大于18的虚拟账号和密码,以及平台总个数。转换成相应的SQL语句就是:select虚拟账号、平台类型count(平台)fromallwhere年龄>18groupby平台类型。整理信息,写成六项表示为:S=<S1=虚拟账号、平台,S2=count(平台)>,F=<所有数据库>,W=<年龄>18>,O=null,G=<平台类型>A.如果存在语义缓存项Pi1,其中Si1=<S1=虚拟账号、平台类型,S2=count(平台)>,Fi1=<所有数据库>,Wi1=<年龄>18>,则Q与Pi1精确匹配,将Ci1按照GQ=<平台类型>分组就可得出最终结果。B.如果存在语义缓存项Pi2,其中Si2=<S1=虚拟账号、平台类型,S2=count(平台)>,Fi2=<所有数据库>,Wi2=<年龄>22>,则Q与Pi2包含匹配,查询条 件变为18<年龄<22,将结果集与Ci2合并,然后按照GQ=<平台类型>分组即可得出最终结果。C.如果存在语义缓存项Pi3,其中Si3=<S1=虚拟账号、平台类型,S2=count(平台)>,Fi3=<所有数据库>,Wi3=<年龄>16>,则Q与Pi3子集匹配,在结果集Ci3中搜索年龄>18,得到的结果按照GQ=<平台类型>分组,即可得出最终结果。D.如果存在语义缓存项Pi4,其中Si4=<S1=虚拟账号S2=count(平台)>,Fi4=<“”>,Wi4=<年龄>18>,则Q与Pi4相交匹配,以相同的条件在数据库中搜索,只去查找在语义缓存项中没有出现的属性“平台类型”,将得到的结果按照GQ=<平台类型>分组,即可得出最终结果。E.如果存在语义缓存项Pi5,其中Si5=<S1=爱好>,Fi5=<“”>,Wi5=<年龄>18>,则Q与Pi5无匹配,直接按照所给的条件搜索数据库,即可得出最终结果。(2)需求处理下面将针对虚拟资产的实际查询需求:分析它们的匹配情况,如表1表示:表1查询需求的匹配分类查询类型精确匹配包含匹配子集匹配相交匹配无匹配确定信息查询##范围查询#####包含指定字符串查询##无指定列查询##A.确定信息的查询。即针对于虚拟资产的唯一标识已知的情况,查询详细信息:对于这样的查询与语义缓存要么是精确匹配,要么是无匹配。B.范围查询。针对查找满足指定范围的用户之类的查询:对于这样的查询与语义缓存可能是精确匹配、包含匹配、子集匹配、相交匹配,无匹配。C.包含指定字符串的查询。针对于知道名称的一部分,查询所有在某个应用下符合名称一部分的用户:对于这样的查询与语义缓存要么是精确匹配,要么是无匹配。D.无指定列的查询。比如知道某一属性的值,但不知道具体是哪一个属性之类的查询:对于这样的查询与语义缓存要么是精确匹配,要么是无匹配。2、倒排索引虚拟资产数据中经常遇到无指定列的查询:知道某一属性的值,但不知道具体是哪一个属性的查询。倒排索引则是根据属性的值来查找记录。这种索引中的每一项都包括一个属性值和具有该属性值的各记录的主键,在虚拟资产数据库中则是唯一标识及其平台。根据日志、受欢迎程度、访问频率等系数来挑选出热门、中心词汇,将这些词汇单独抽取出来建立一个倒排索引结构。为了便于描述,定义如下术语:定义4(属性值匹配):若某对象o的某个属性p的值刚好等于给定的值v,则称该对象o属性匹配v,记op=v,如果这个属性p刚好为对象o的主键,则记为ob=v。定义5(属性数组):一个对象集合O={o1,o2,...,on},对于都存在这样一个属性p,使oip=v成立,将由这个对象集合所组成的数组称为属性数组,记为a[o]。假设某个查询,要查找所有属性值包含“非凡”的记录,但并没有指定是 哪个属性,也没有说明是确定为“非凡”还是“**非凡**”,对于该查询,则需要查找数据库,如图2所示。从结果中可以看出,属性值“非凡”可能是用户5789047294X在天龙八部平台下的虚拟账号的一部分,也可能是用户7489829089X仙剑奇侠传平台下的昵称,无论是Casssandra数据库还是MySQL都不支持对这种指定列不确定的查找,因此,不能按常规索引方法“属性—属性值”匹配的方法来查找,唯一的方法就是从上到下扫描数据库,查询所有唯一标识下的所有平台中的每个属性值来返回匹配项,其在Cassandra数据库中处理这种查询的过程,如图3所示。这种方式对于小规模数据可以得到想要的结果,但对于虚拟资产这种海量、分布式数据,将会消耗大量时间。针对上述实例中数据库Cassandra的实际情况,分析得出非凡为高频、热门词汇,因此,针对这类词汇建立相应的倒排索引。它可以存储到Cassandra数据库,也可以存储到MySQL数据库中,但是考虑到有可能涉及到包含字符串之类的模糊查询,所以存储在MySQL数据库中,如表2所示。表2倒排索引在MySQL数据库存储属性值唯一标识平台属性非凡主义5789047294X天龙八部虚拟账号非凡7489829089X仙剑奇侠传昵称…...……………….对于加入倒排索引后的系统,如果是无指定列查询,则先查询倒排索引; 如果查询需要详细信息,则根据查询出来的唯一标识、平台等信息查询数据库,如果没有包含指定的属性值,则按顺序查找数据库,返回结果,即可节省很多不必要的查询,提高查询效率。3、节点索引虚拟资产分布式数据库中,存在相同数据的多个副本,它们在不同的虚拟节点上,存储在不同的物理节点上。把具有相同唯一标识的数据放到一起组成数据块,以数据块为单位考虑副本,建立一个节点索引记录各个数据块所存储的节点以及节点的忙闲情况。表3节点索引的数据结构唯一标识节点忙闲情况(0表闲,1表忙)5789047294X192.168.1.10192.168.1.41192.168.1.707489829089X192.168.1.41192.168.1.11……通过上表,可以看出用户5789047294X有三个副本,如果再增加一个请求,根据忙闲情况,可以选择第一或三个节点;而用户7489829089X有二个副本且处于忙碌阶段,如果再增加新的请求,只能继续等待了。节点索引的另一个优势就是可以对数据一致性起到维护作用,使用者访问 某个机器节点,修改了某一用户的信息,可以通过节点索引来迅速查找相关节点,实行写同步。与已有技术相比,与已有技术相比,本专利申请是考虑了语义缓存、倒排索引和节点索引的查询优化方法,将此查询优化方法应用到虚拟资产海量信息的查询当中,可以大大降低查询的时间,提高了查询效率。以上是对本发明进行了示例性的描述,显然本发明的实现并不受上述方式的限制,只要采用了本发明技术方案进行的各种改进,或未经改进将本发明的构思和技术方案直接应用于其它场合的,均在本发明的保护范围内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1