一种支持BLOB的多元大数据融合方法和系统与流程

文档序号:11407451阅读:364来源:国知局
本发明涉及大数据、数据库、语义网
技术领域
:,提出一种多元大数据融合方法和系统。
背景技术
::随着海量规模、多元异构数据的产生,传统的数据库技术(通常指关系数据库系统)无法很好实现对海量、非结构化或半结构化数据集的管理。nosql、hadoop等大数据技术的提出,能够高效地解决分布式环境下全网域(webscale)的非结构化信息的管理和处理问题,深化了大数据的应用。不同于大数据(bigdata),语义网(semanticweb)以及关联数据(linkeddata)则是从信息组织的角度,通过引入丰富的形式化语义,提高了数据的关联和可理解能力,逐渐成为跨域整合和智能分析的利器。越来越多的大数据应用由于采用了rdf(resourcedescriptionframework,资源描述框架)数据模型进行描述和编码,通过元数据和其他语义描述(本体),使数据具有机器可识别的语义(即形式化的语义描述),丰富了大数据的语义,并使数据具有更好的互操作性。由于采用语义描述的关联数据已不再是堆砌的信息,结合大数据挖掘手段,还能给大数据分析带来强有力的工具,使大数据集相互之间能够实现基于语义的整合。rdf数据模型(rdfdatamodel)提供了一个简单但功能强大的模型,通过资源、属性及其相应值来描述特定资源。rdf数据模型具有较好的可融合性,将两个rdf进行融合时,只需要将相同节点的不同属性附加到rdf节点上即可。这非常符合大规模数据的融合管理的需求。rdf数据模型支持多种类型的属性,根据rdf规范(https://www.w3.org/tr/2014/rec-rdf11-concepts-20140225/),rdf属性支持文本型、布尔型、数值型、时间型等多种类型。然而,该模型缺少对二进制大对象(blob:binarylargeobject)的支持。而在信息系统中,文件作为非结构化数据的存储形式,往往占据了相当大的比例。据统计,世界上85%的数据都是非结构化数据,这些数据每年都按指数增长60%(http://www.cio.com.cn/eyan/2295.html)。因此发明一种支持blob类型的大数据融合方法,实现对blob数据以及其它类型数据的统一管理和查询,显得尤其重要。技术实现要素:本发明的目的在于提供一种支持blob的多元大数据融合方法和系统,实现了对多元数据的整合,并有效的支持数据的关联检索。本发明的技术内容为:一种支持blob的多元大数据融合方法,其步骤为:1)基于rdf数据模型,创建支持blob的多元大数据融合模型,即rdf-b数据模型;创建或设置一后端存储系统;该rdf-b数据模型采用三元组形式来表达每个资源的属性及其属性值,其中,所述属性值包括blob类型的属性值,blob类型的属性值包括数据内容、长度、摘要和标志信息;2)rdf-b数据模型对收到的数据生成三元组并存储到一前端存储系统;其中,如果该数据为blob类型,则rdf-b数据模型根据该数据对应三元组中blob类型的属性值生成一四元组<句柄,长度,摘要,标志>作为该数据的三元组信息的属性值,然后将该数据的三元组保存到该前端存储系统,根据该句柄将该blob类型的属性值中的数据内容存储到所述后端存储系统;所述后端存储系统维护句柄与对应blob类型的属性值的数据内容之间的映射。进一步的,创建blob类型的属性值的方法为:首先获取该数据的前若干字节作为所述标志信息,然后创建一二进制字节数组保存该数据的内容,获取该数据的长度并生成该数据的摘要。进一步的,根据该句柄将该blob类型的属性值中的数据内容存储到所述后的存储系统的方法为:首先根据当前系统时间创建一个唯一编号id,作为句柄;然后在所述后端存储系统的设定目录下创建一个新文件,文件名为<id>.bin,写入该blob类型的属性值的数据内容;并且生成一个<id>.md5文件,写入所述摘要。进一步的,根据字节数组生成blob类型的属性值,、根据文件生成blob类型的属性值、根据输入流数据源生成blob类型的属性值或根据文本串生成blob类型的属性值。进一步的,所述标志信息为一32位的标志。一种支持blob的多元大数据融合系统,其特征在于,包括一rdf-b数据模型,一后端存储系统和一前端存储系统;其中,rdf-b数据模型,采用三元组形式来表达每个资源的属性及其属性值,所述属性值包括blob类型的属性值,blob类型的属性值包括数据内容、长度、摘要和标志信息;前端存储系统,用于存储rdf-b数据模型对收到的数据生成的三元组;如果该数据为blob类型,则rdf-b数据模型根据该数据对应三元组中blob类型的属性值生成一四元组<句柄,长度,摘要,标志>作为该数据的三元组信息的属性值;后端存储系统,用于根据句柄将对应blob类型的属性值中的数据内容进行存储;所述后端存储系统维护句柄与对应blob类型的属性值的数据内容之间的映射。该方法具体描述如下:(1)基于rdf(resourcedescriptionframework,资源描述框架)数据模型,针对其不支持blob属性值的缺陷,设计支持blob的多元大数据融合管理模型rdf-b。rdf-b模型可以包含多种类型的数据,包括常见的文本型、布尔型、数值型、时间型以及blob类型(参见具体实施例1);(2)进一步细化了rdf-b模型中blob属性值(blobliteral)应该包含的自有属性和操作。针对blob属性值,定义其支持的操作,包括打开输入流、获取摘要、获取长度、获取标记、判断是否为blob类型,等(参见具体实施例1);(3)定义了rdf-b模型中blob属性值的文本表达方法,针对blob的属性定义了与常见的文本型、布尔型、数值型、时间型等属性相兼容的文本表达方式(参见具体实施例2);(4)提供创建blob属性值的方法,即如何从文件、文本串、数据流等已知数据源创建blob属性值(参见具体实施例3);(5)提供存储blob属性值的方法,即如何允许用户挂接自定义blob存储库,同时提供了基于本地文件系统实现blob数据的存储(参见具体实施例4);(6)提供rdf-b数据模型的加载方法,帮助用户通过api创建/加载rdf-b数据模型(参见具体实施例5);(7)提供针对rdf-b数据模型的查询方法。基于sparql查询语法,通过提供blob属性值的操作函数,从而支持对blob属性值的匹配。由于sparql关联查询的能力,针对blob进行查询的同时,可以同时将其他属性值以及关联关系作为条件进行筛选(参见具体实施例6)。特别的,(4)~(7)采用java语言实现,并基于开源项目apachejena(http://jena.apache.org/)实现,apachejena是一个基于java的语义网开发框架。本发明的有益效果在于:本发明的目的在于提供一种支持blob的多元大数据融合管理模型rdf-b,以及针对rdf-b的实现系统。可以用于多元异构数据(包括文本型、布尔型、数值型、时间型、blob)的整合管理与统一查询,为大数据融合管理提供了理论模型和实用系统。本发明系统的优点具体为:(1)采用传统rdf数据模型来组织数据,由于它对blob文件的支持不足,通常无法实现对非结构化文件的管理。折中的办法往往普通类型的属性采用rdf数据模型来管理,blob数据仅存储相关的路径或编号,应用程序再根据这些信息显式的去访问文件数据,这种方式增强了应用程序和rdf数据库之间的耦合性。本发明提出的rdf-b模型定义了blob的类型,并完全兼容传统的rdf模型。rdf-b模型可实现文件类型、普通类型数据的统一管理,同时提供了针对blob数据的查询函数,可用于标准化的sparql查询。图1、图2示出基于传统rdf模型和rdf-b模型开发应用的差异。(2)传统的多元异构数据管理系统,一类是采用扁平的记录型的结构统一组织数据,完全忽略了数据之间的关联性,不利于数据的关联检索,或者关联检索的代价很高。另一类是基于传统rdf数据模型,无法很好的兼顾到非结构化数据的管理。与这两类系统相比,本发明提出的系统可以实现多元数据(包括非结构化文件)的整合,并有效的支持数据的关联检索(包括针对文件的检索)。附图说明图1示出基于传统rdf模型开发应用的模式;图2示出基于rdf-b模型开发应用的模式;图3为本发明的大数据融合方法流程图。具体实施方式下面结合附图和具体实例对本发明进行进一步详细描述。图3为本发明的方法流程图,其步骤包括:1)基于rdf数据模型,创建支持blob的多元大数据融合模型,即rdf-b数据模型;创建一后端存储系统;该rdf-b数据模型采用三元组<资源uri,属性uri,属性值>的形式来表达每个资源的属性及其属性值,其中,所述属性值包括blob类型的属性值,blob类型的属性值包括数据内容、长度、摘要和标志信息;2)rdf-b数据模型对收到的数据生成三元组并存储到一前端存储系统;其中,如果该数据为blob类型,则rdf-b数据模型根据该数据对应三元组中blob类型的属性值生成一四元组<句柄,长度,摘要,标志>作为该数据的三元组信息的属性值,然后将该数据的三元组保存到该前端存储系统,根据该句柄将该blob类型的属性值存储到所述后端存储系统;所述后端存储系统维护句柄与blob类型的属性值的数据内容之间的映射。实施例1、多元大数据融合管理模型rdf-brdf-b主要基于rdf模型(https://www.w3.org/tr/2014/rec-rdf11-concepts-20140225/)进行扩展,因此具有rdf模型的三元组以及有向图等所有特征。该模型的定义包括3个部分:(1)rdf-b模型:与公开的rdf模型相同的是,rdf-b模型采用<资源uri,属性uri,属性值>三元组形式来表达每个资源(主语)的属性(谓语)及其属性值(宾语),属性值可以是一个文本型、布尔型、数值型、时间型,甚至另外一个资源。不同的是,rdf-b的属性值可以是blob类型;(2)blob属性值的属性定义:blob类型的属性值具有自有属性,包括内容(content)、长度(length)、摘要(digest),以及一个32位的标志(mark)。如表1所示。表1为blob属性值的属性表(3)blob属性值的操作定义:blob属性值可支持一些操作,包括打开数据流(openstream)、获取长度(getlength)、获取摘要(getdigest)、获取标志(getmark)。如表2所示。表2为blob属性值的操作表操作含义openstream获取二进制数组输入流getlength获取blob字节数组的长度getdigest获取blob内容的摘要getmark获取blob字节数组的前32个字节getmark(n)获取blob字节数组的前n个字节(n<32)getmark(m,n)从blob字节数组的第m个字节开始,获取n个字节实施例2、rdf-b属性值的文本表达方法rdf-b模型中的非blob属性值采用标准的rdf文本表达方法,即采用xmlliteral来表达属性值,它通常包括2个部分:词汇、数据类型的iri,前者代表属性值的文本,后者来表示值的类型,如:"hello"^^xsd:string,"1"^^xsd:integer。针对blob属性值,rdf-b采用如下表达方式:<blob-literal>::="<blob-value>"^^<urn:x-hp-dt:blob><blob-value>::=content:<content-value>,length:<length-value>,digest:<digest-value>,mark:<mark-value>其中:content-value、length-value、digest-value、mark-value分别对应于blob属性值的内容(content)、长度(length)、摘要(digest),以及一个32位的标志(mark)。如下代码示例出两个rdf-b三元组,第一行为标准的rdf三元组,第二行包含了一个blob属性值。<#bluejoe><#name>"zhihongshen".<#bluejoe><#photo>"content:r0lgodlhrgagalp/ap///xaqebgygcehitexmupkslpawmtra3t7e4ymjjycnlw1tcbgxt7e3vf39waaacwaaaaargagaeae/xdisau9oou923ctoqbnwfxod64aaqjj4wqgiliaijxcpakowopg4cwqibfjaslwlivfjzgqkhqvxfpsebqxbodhidjiko3c61q+txwhd6jg8uoqtuzdkbg8pcspdmskaj8zbjjxegk1b0uudycwdgkabzuobfutug0ijub0jwlmo4tabg8pbwuergcbqwr8lxmbnbm2ckadvl/aex5no79hvacfja8fawwqzhgiqgkbpwodzgcephkmwac1d6wea5bguxqv4aqr6rdhepeqq4sd6tl5ewwjrwu6kr64wofl34iaey74upagzzt85xi8ikggcimaexmom/bghinuev8ckbac8gcqfoamxlkwg0e7izw+5gpgsyavbdfs6syaynkghtt/gxixicovudgqmpkmyegzarlxmccqs5ipa1uyxilk4cg9oq0wlnbypoumarh48dnb7ubodak8yqg5woefia8m+mmzqiwgbaem4ujgzecbbqhsxkaaamgsawrcbkfqgeykpi80rukl7pjlbaskcd6hlicydqugkvbtjnqivzs6mkrbgchgsi1ox25qxw5xcx8undmhacmk3ccnoej7zmk5clegoewqhqkealj6xihcasearxzghx/ag8broxkugnbtim8ddnsiqsabpgr9crmbdfiqimb+01gv8oqpwrl8sxwc3iggexs2olaetrwtmizdho2abcgizbscbnp98hubqywouwqaow==,length:628,digest:5ecb3255a12ef30a9d3c3a5554e8021d,mark:r0lgodlhrgagalp/ap///xaqebgygcehitexmupkslo="^^<urn:x-hp-dt:blob-bytes>.第一行表示,rdf节点#bluejoe具有一个属性#name,属性值是一个文本串"zhihongshen"。第二行表示,rdf节点#bluejoe具有一个属性#photo,属性值是一个blob数据,其内容为一个二进制字节数组(base64解码可以得知其为一个gif照片文件),数组长度为628个字节,摘要为5ecb3255a12ef30a9d3c3a5554e8021d。可以看出,文本输出并不适合blob二进制内容的表达,通常建议采用应用程序通过blob属性值的打开输入流(openstream)操作,获取到字节流,然后再按照数据流的规范进行后续操作。实施例3、blob属性值的创建方法本发明提供了从不同的数据源创建blob属性值的方法:literalcreate(byte[]bytes):根据字节数组生成blob属性值literalcreate(filefile):根据文件生成blob属性值literalcreate(inputstreamsourcesource):根据输入流数据源生成blob属性值;literalcreate(stringtext):根据文本串生成blob属性值以create(filefile)为例,伪代码如下:valbl=newblobliteral{valmark32=ioutils.readbytes(openstream(),32);//读取前32位标志defopenstream()=newfileinputstream(filename);//打开文件输入流defgetlength()=file.length();//获取到文件的长度defgetdigest()=digestutils.md5hex(openstream());//生成摘要defgetmark()=mark32;};returnbl;//返回该属性值实施例4、blob属性值的存储方法由于blob属性值往往占据较大的存储空间,将blob属性值和其它属性值保存在同一个空间,会带来严重的内存消耗和读取性能的问题。本发明提出一种与rdf模型实际存储系统融合且又相对独立的存储库方案:(1)在rdf模型实际存储系统中,blob属性值存储为一个blq四元组(blobliteralquadruple)而非blob数据内容本身,该四元组为<句柄,长度,摘要,32位标志>,其中blob句柄为每个blob数据分配的一个唯一的标识;(2)blob属性值中的数据内容存储在一个命名为blobstorage的后端存储系统上,blobstorage维护blob句柄与blob数据内容之间的映射,即可以根据句柄获得blob数据内容;(3)用户可以根据blobstorage的接口要求,基于关系型数据库、文件系统等来实现后端存储系统。特别的,本发明基于本地文件系统,提供了一个可用的blobstorage。特别的,blobstorage系统提出了如下接口方法:(1)fromhandle:根据句柄,获取到对应的blob数据;(2)insert:保存指定的blob内容,并返回新的句柄;(3)delete:删除指定句柄的blob;(4)update:保存指定的blob内容至指定的blob属性;本发明系统同时提供了一套基于本地文件系统实现的blobstorage,对应的类名为localfilesystemblobstorage。localfilesystemblobstorage的insert()方法的实现步骤如下:(1)根据当前系统时间创建一个唯一编号id,作为blob句柄;(2)在约定目录下创建一个新文件,文件名为<id>.bin,写入传入的blob内容;(3)同时生成一个<id>.md5文件,写入blob内容的摘要;(4)返回id;localfilesystemblobstorage的delete()的实现步骤如下:(1)获取到传入的句柄id;(2)删除约定目录下的文件<id>.bin;(3)删除约定目录下的文件<id>.md5;localfilesystemblobstorage的fromhandle()的实现步骤如下:(1)获取到传入的句柄id;(2)找到约定目录下的文件<id>.bin,以及<id>.md5,根据<id>.bin文件的内容、<id>.bin文件的大小、<id>.md5文件的内容构建blq四元组以及blob数据内容;(3)返回blob数据内容;实施例5、rdf-b模型操作模块由于传统rdf模型缺乏对blob属性的支持,为了实现对rdf-b模型的操作,需要采用如下步骤:(1)基于jena创建一个标准的rdf数据模型(com.hp.hpl.jena.rdf.model.model类对象),如:modelmodel=modelfactory.createdefaultmodel();或者从已有存储中构建一个rdf数据模型model:modelmodel=tdbfactory.createdataset(tdbdir).getdefaultmodel().(2)创建一个blobstorage类(参见实施例4)的对象blobstorage;(3)利用addblobnature(model,blobstorage)方法将以上model改造成rdf-b数据模型blobmodel;如上所述,addblobnature(model,blobstorage)方法实现了传统rdf的改造,改造的具体方法如下:(1)定义blobtripletable类,该类继承了jena的com.hp.hpl.jena.tdb.store.tripletable;(2)实现blobtripletable的add()方法,在添加该rdf三元组的时候,调用blobstorage的create()方法,将blob对象写入到后端存储系统中;(3)实现blobtripletable的delete()方法,在删除该rdf三元组的时候,调用blobstorage的delete()方法,同时删除后端存储中的blob内容(参见实施例4);(4)实现blobtripletable的update()方法,在更新该rdf三元组的时候,调用blobstorage的update()方法,更新后端存储中的blob内容(参见实施例4);(5)修改传入参数model内部的tripletable对象,将其替换成一个blobtripletable类的对象;(6)在用户程序针对rdf-b模型进行三元组的更新操作时,以上blobtripletable对象的add()、delete()和update()方法会被自动调用,从而实现存储后端的同步;通过如上方法,可以得到rdf-b模型,为了向rdf-b模型中写入rdf三元组,可以采用如下步骤:(1)创建blob属性值:可以利用blobliteralfactory类(参见实施例3),创建某个blob属性值,命名为blobliteral;(2)调用com.hp.hpl.jena.rdf.model.model的相关方法来增添一个三元组,如:blobmodel.add(person,photo,blobliteral)。实施例6、rdf-b函数与sparql查询为了实现对blob属性值的操作,本发明定义了blob属性值的6个操作,并实现了对应的函数类,它们分别是:(1)getdigest:获取指定blob数据的摘要,接受一个参数,该类继承于com.hp.hpl.jena.sparql.function.functionbase1;(2)getlength:获取指定blob数据的长度,接受一个参数,该类继承于com.hp.hpl.jena.sparql.function.functionbase1;(3)getmark:获取指定blob数据的摘要,接受一个、两个、三个参数,该类继承于com.hp.hpl.jena.sparql.function.functionbase;(4)isblob:判断属性是否为blob数据,接受一个参数,该类继承于com.hp.hpl.jena.sparql.function.functionbase1;(5)tobytes:将blob数据的内容转换成字节数组,接受一个参数,该类继承于com.hp.hpl.jena.sparql.function.functionbase1;(6)tostring:将blob数据的内容转换成文本串,接受一个参数,该类继承于com.hp.hpl.jena.sparql.function.functionbase1;以getdigest为例,它的类定义如下:基于jena的arq模块,可以封装针对rdf-b模型的sparql查询引擎。一旦在sparql查询引擎中注册了以上操作函数,用户程序就可以在sparql查询语句中调用这些操作函数,从而达到关联查询的效果,示例:select?namewhere{?person<#name>?name.?person<#photo>?photofilter(blob:isblob(?o)&&blob:mark(4)=’gif89a’)}该sparql语句查询包含有照片,且照片的标志为gif89a(格式为gif图片)的人员的姓名。其中出现的blob:isblob()和blob:mark()对应于isblob()和getmark()函数。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1