本发明涉及通信领域,具体而言,涉及一种语义数据的存储方法及装置。
背景技术:
:语义数据,是一种使用资源描述框架(ResourceDescriptionFramework,简称RDF)来描述的数据,也称为RDF数据。语义数据的格式一般表示为<主语(Subject),谓语(Predicate),宾语(Object)>,例如<Bob,月薪,5800>,<Bob,部门,人事>,其中,谓语也被称为属性。随着数据量的增加,分布式文件系统成为语义数据的主流存储方式。在这种情况下,语义数据的查询性能存在相当大的一部分消耗在语义数据的读取。传统的语义数据存储方式有三种:第一种是三元组存储,表1是相关技术中语义数据的三元组存储表,如表1所示,它是一个三列的表,分别存储主语、谓语和宾语。这种方式实现起来最为简单,但查询性能较差,往往需要辅助一些优化手段,例如,查询“Bob的部门同事都有谁?”,它需要遍历所有数据,如果对“人事”建立索引,那么只需要根据索引就能查询到目标数据,然而这又会带来复杂而庞大的索引问题。表1主语谓语宾语Bob公司CorpABob部门人事Bob月薪5800Bob性别男Bob配偶JerryBob爱好篮球Jerry公司CorpBJerry部门销售Jerry性别女Jerry爱好购物Jerry邮箱Jerry@CorpB.comTom公司CorpATom部门人事CorpA地址北京CorpB员工数目100第二种是列存储,它是一种<key,value>的存储方式,将主语作为主键(key),将谓语作为属性,宾语作为属性值(value)。表2是相关技术中语义数据的列存储的部门表,如表2所示,它描述的是一个部门表的列存储,主键描述的是一个人的名字,属性值描述这个人所属的部门。这种方式的优点是能充分利用存储空间,并将所有具有相同属性的数据存储在一张表中,有利于对属性的查询。例如那么查询“Bob的部门同事都有谁?”只需要查询部门表中具有属性值“人事”的记录即可。但这种方式的缺陷是主语的不同属性值(宾语)分散在不同的表中,当查询涉及到多个属性时,它需要连接多个表,从而影响查询效率。例如查询“Bob的部门同事都有谁?”面向的语义数据同时存储着多个公司的员工信息,该查询涉及了两个属性:“公司”和“部门”,那么查询需要在“公司”表中查询与Bob具有相同公司的员工,在“部门”表中查询与Bob具有相同部门的员工,然后把两部分结果以员工做一个连接。表2主键部门Bob人事Jerry销售第三种是行存储,极端的情况是存在一张超级表,所有谓语都是该表的属性,这样所有数据都可以存在这张表中,表3是语义数据的超级表,如表3所示,但问题是超级表在很多情况下会非常稀疏,浪费大量的存储空间。在实际实现中,是将一些关系紧密的属性存储到一张表中,如表4a和表4b所示,表4a为语义数据的员工属性表,表4b为语义数据的公司属性表,这样可以降低表的稀疏性,也能避免一些表的连接操作,但如何找到这些关系紧密的属性是一个很难解决的问题。表3表4a表4b但语义数据蕴含着数据之间的关系,这些关系将数据结合成一张图,图1是相关技术中的语义数据形成的示意图,如图1所示。对语义数据的查询相当于在图中搜索一个子图。当语义数据的数据量很大时,这些数据需要存储到不同的节点上,这时对子图的搜索可能会涉及不同的节点。以上三种存储方式在数据管理、存储空间和查询效率等方面做了不同的折衷,分别具有各自的优缺点。针对相关技术中,语义数据存储方法中存储空间和查询效率不能兼顾的问题,目前尚未提出有效的解决方案。技术实现要素:本发明提供了一种语义数据的存储方法及装置,以至少解决相关技术中相关技术中语义数据存储方法中存储空间和查询效率不能兼顾的问题。根据本发明的一个实施例,提供了一种语义数据的存储方法,包括:选择语义数据中的主题属性和主键属性,主题属性是语义数据中查询频率超过预定阈值的属性,主键属性是语义数据中数据逻辑描述的属性;计算主题属性的每个主题属性值对应的主键属性的主键属性值集合;将语义数据中属于同一个主键属性值集合的属性存储在同一节点上;在节点上为存储在节点中的每个属性建立属性表,以及对属性表按照键值存储方式进行存储。在本发明实施例中,将语义数据中属于同一个主键属性值集合的属性存储在同一节点上包括:根据主键属性对语义数据建立超级表;将超级表中属于同一个主键属性值集合的记录存储在同一节点上。在本发明实施例中,在对属性表按照键值存储方式进行存储之后还包括:在节点上,对存储在节点的预定属性和主题属性按照指定格式建立访问索引。在本发明实施例中,计算主题属性的每个属性值对应的主键属性的主键属性值集合 包括以下之一:计算以主题属性值为主语所对应宾语中属性值属于主键属性的主键属性值集合;计算以主题属性值为宾语所对应主语中属性值属于主键属性的主键属性值集合。在本发明实施例中,在在节点上为存储在节点中的每个属性建立属性表之前,该方法还包括:在主键属性值同时属于多个主键属性值集合的情况下,在超级表中主键属性值对应的记录则存储在多个节点上。根据本发明的另一实施例,提供了一种语义数据的存储装置,包括:选择模块,用于选择语义数据中的主题属性和主键属性,主题属性是语义数据中查询频率超过预定阈值的属性,主键属性是语义数据中数据逻辑描述的属性;计算模块,用于计算主题属性的每个主题属性值对应的主键属性的主键属性值集合;第一存储模块,用于将语义数据中属于同一个主键属性值集合的属性存储在同一节点上;第二存储模块,用于在节点上为存储在节点中的每个属性建立属性表,以及对属性表按照键值存储方式进行存储。在本发明实施例中,第一存储模块包括:建立单元,用于根据主键属性对语义数据建立超级表;存储单元,用于将超级表中属于同一个主键属性值集合的记录存储在同一节点上。在本发明实施例中,该装置还包括:索引模块,用于在对属性表按照键值存储方式进行存储之后,在节点上,对存储在节点的预定属性和主题属性按照指定格式建立访问索引。在本发明实施例中,计算模块包括以下之一:第一计算单元,用于计算以主题属性值为主语所对应宾语中属性值属于主键属性的主键属性值集合;第二计算单元,用于计算以主题属性值为宾语所对应主语中属性值属于主键属性的主键属性值集合。在本发明实施例中,该装置还包括:第三存储模块,用于在在节点上为存储在节点中的每个属性建立属性表之前,在主键属性值同时属于多个主键属性值集合的情况下,在超级表中主键属性值对应的记录则存储在多个节点上。通过本发明,采用通过主题属性和主键属性的方法,对语义数据中属于同一个主键属性值集合的属性存储在同一节点上,然后对存储在该节点中的每个属性建立属性表,并对该属性表按照键值存储方式进行存储,即先对语义数据按照行进行区分,然后在分区内按照列进行存储的方式,将查询相关性较高的数据存放在一起,解决了相关技术中语义数据存储方法中存储空间和查询效率不能兼顾的问题,进而节省了存储空间,提高了查询效率。附图说明此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是相关技术中的语义数据形成的示意图;图2是根据本发明实施例的语义数据的存储的流程图一;图3是根据本发明实施例的语义数据的存储的流程图二;图4是根据本发明实施例的语义数据的存储装置的结构框图一;图5是根据本发明实施例的语义数据的存储装置的结构框图二;图6是根据本发明实施例的语义数据的存储装置的结构框图三;图7是根据本发明优选实施例的语义数据存储结果的示意图。具体实施方式下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。在本实施例中提供了一种语义数据的存储方法,图2是根据本发明实施例的语义数据的存储的流程图一,如图2所示,该流程包括如下步骤:步骤S202,选择语义数据中的主题属性和主键属性,主题属性是语义数据中查询频率超过预定阈值的属性,主键属性是语义数据中数据逻辑描述的属性;步骤S204,计算主题属性的每个主题属性值对应的主键属性的主键属性值集合;步骤S206,将语义数据中属于同一个主键属性值集合的属性存储在同一节点上;步骤S208,在节点上为存储在节点中的每个属性建立属性表,以及对属性表按照键值存储方式进行存储;通过上述步骤,采用通过主题属性和主键属性的方法,对语义数据中属于同一个主键属性值集合的属性存储在同一节点上,然后对存储在该节点中的每个属性建立属性表,并对该属性表按照键值存储方式进行存储,即先对语义数据按照行进行区分,然后在分区内按照列进键值存储的方式,将查询相关性较高的数据存放在一起,解决了相关技术中语义数据存储方法中存储空间和查询效率不能兼顾的问题,进而节省了存储空间,提高了查询效率。需要说明的是,上述键值存储方式可以是按照<key,value>的格式进行存储,但不限于此。在本发明实施例中,将语义数据中属于同一个主键属性值集合的属性存储在同一节 点上可以有多种实现方式,优先地,可以通过以下方式实现:根据主键属性对语义数据建立超级表;将超级表中属于同一个主键属性值集合的记录存储在同一节点上。图3是根据本发明实施例的语义数据的存储的流程图二,如图3所示,该方法在步骤S208之后,还包括步骤S302,在上述节点上,对存储在上述节点的预定属性和主题属性按照指定格式建立访问索引。需要说明的是,不同的预定属性对应不同的指定格式,同一个预定属性也可能采用不同的指定格式,可以根据实际情况进行设置。通过建立访问索引,当用户需要读取数据时,先查询访问索引,看一下是否满足查询条件,如果满足,则读取数据;否则,不需要读取这部分数据,有效降低了节点间的连接操作,以及对无效数据的访问,进而大大提高了查询效率。在本发明实施例中,计算主题属性的每个属性值对应的主键属性的主键属性值集合可以通过以下之一实现,但不限于此:计算以主题属性值为主语所对应宾语中属性值属于主键属性的主键属性值集合;计算以主题属性值为宾语所对应主语中属性值属于主键属性的主键属性值集合。在本发明实施例中,在在节点上为存储在节点中的每个属性建立属性表之前,该方法还包括:在主键属性值同时属于多个主键属性值集合的情况下,在超级表中主键属性值对应的记录则存储在多个节点上。这样可以更加方便用户的查询。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。在本实施例中还提供了一种语义数据的存储装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图4是根据本发明实施例的语义数据的存储装置的结构框图一,如图4所示,该装置包括:选择模块42,用于选择语义数据中的主题属性和主键属性,主题属性是语义数据中查询频率超过预定阈值的属性,主键属性是语义数据中数据逻辑描述的属性;计算模块44,用于计算主题属性的每个主题属性值对应的主键属性的主键属性值集合;第一存储模块46,用于将语义数据中属于同一个主键属性值集合的属性存储在同一 节点上;第二存储模块48,用于在节点上为存储在节点中的每个属性建立属性表,以及对属性表按照键值存储方式进行存储。通过上述装置,采用通过主题属性和主键属性的方法,对语义数据中属于同一个主键属性值集合的属性存储在同一节点上,然后对存储在该节点中的每个属性建立属性表,并对该属性表按照键值存储方式进行存储,即先对语义数据按照行进行区分,然后在分区内按照列进行存储的方式,将查询相关性较高的数据存放在一起,解决了相关技术中语义数据存储方法中存储空间和查询效率不能兼顾的问题,进而节省了存储空间,提高了查询效率。图5是根据本发明实施例的语义数据的存储装置的结构框图二,如图5所示,上述第一存储模块46包括:建立单元52,用于根据主键属性对语义数据建立超级表;存储单元54,用于将超级表中属于同一个主键属性值集合的记录存储在同一节点上。图6是根据本发明实施例的语义数据的存储装置的结构框图三,如图6所示,该装置还包括:索引模块62,用于在对属性表按照键值存储方式进行存储之后,在节点上,对存储在节点的预定属性和主题属性按照指定格式建立访问索引。需要说明的是,不同的预定属性对应不同的指定格式,同一个预定属性也可能采用不同的指定格式,可以根据实际情况进行设置。通过建立访问索引,当用户需要读取数据时,先查询访问索引,看一下是否满足查询条件,如果满足,则读取数据;否则,不需要读取这部分数据,有效降低了节点间的连接操作,以及对无效数据的访问,进而大大提高了查询效率。在本发明实施例中,计算模块44可以包括以下之一:第一计算单元,用于计算以主题属性值为主语所对应宾语中属性值属于主键属性的主键属性值集合;第二计算单元,用于计算以主题属性值为宾语所对应主语中属性值属于主键属性的主键属性值集合。在本发明实施例中,上述装置还包括:第三存储模块,用于在在节点上为存储在节点中的每个属性建立属性表之前,在主键属性值同时属于多个主键属性值集合的情况下,在超级表中主键属性值对应的记录则存储在多个节点上。需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述模块分别位于多个处理器中。以下结合具体的实施例对本发明做进一步的解释:本发明实施例提供了一种优选的语义数据的存储方法,该方法是一种基于主题与主键的行列混合式存储方法,在存储空间和查询效率两方面可以取得更佳的效果。主题是一个属性,它是从图的角度来看待语义数据,由于大多数查询都是查询子图的,我们将 查询频率较高的属性,定义为主题,这样,就可以将图中跟查询相关数据存在一起,从而有效提高数据访问的效率。主键是从数据逻辑的角度来看待语义数据,正如前面三种存储方式所描述的那样,语义数据在逻辑上描述也是属性,所以基于主键的存储可以方面在逻辑上来描述数据,从而避免连接操作,提高查询效率。本优选实施例包括以下过程:数据存储过程:在该优选实施例中,基于主题与主键的行列混合式存储方法,具体步骤如下:步骤1,选择合适的主题属性(TopicAttr)和主键属性(KeyAttr)。步骤2,对于主题属性的每个主题属性值(topici),在语义数据中计算以这个值为主语(或宾语)所对应宾语(或主语)中属性值属于主键属性的主键属性值集合(keySeti)。步骤3:以主键属性对语义数据构建逻辑上的超级表,超级表的一行称为一个记录。步骤4:属于同一个主键属性值集合(keySeti)的记录在逻辑上存储在同一个节点。如果一个一个主键属性值同时属于多个主键属性值集合,那么这个主键属性值所对应的记录也会存储到多个节点。步骤5,在每个节点上,对每个属性构建一个属性表,按照<key,value>的格式进行存储。步骤6,对预先指定的属性以及主题属性,按照指定的格式生成访问索引。(2)对语义数据的读取过程当用户需要读取数据时,先查询访问索引,看一下是否满足查询条件,如果满足,则读取数据;否则,不需要读取这部分数据。在本优选实施例中,上述按照<key,value>的格式进行存储相当于上述实施例中的键值存储方式。本发明实施例还提供了另一种优选的语义数据的存储方法,本优选实施例包括以下过程:(1)数据存储过程:初始的语义数据如表1所示。步骤1,选择主题属性为公司(TopicAttr={CorpA,CorpB}),主键属性为用户名字(KeyAttr={Bob,Jerry,Tom})步骤2,对于每个主题属性值计算它所对应的主键属性值集合。以CorpA为例,计算语义数据中以CorpA为主语(或宾语)所对应宾语(或主语)中属性值属于主键属性的主键属性值集合,keySetCorpA={Bob,Tom,CorpA}。同理可以计算keySetCorpB={Jerry,CorpB}步骤3:以主键属性对语义数据构建逻辑上的超级表,如表3所示。步骤4-6的结果如图7、表5a-表5g以及表6a-表6f,其中,表5a-表5g示出了节点a中的属性表,表6a-表6f示出了节点b中的属性表。步骤4:将CorpA和CorpB对应的记录分别存储在连个节点上,即{Bob,Tom,CorpA}对应的记录存储在节点a上,{Jerry,CorpB}对应的记录存储在节点b上。步骤5,在每个节点上,为每个属性构建一个属性表,按照<key,value>的格式进行存储。在节点a上分别对属性“公司”、“部门”、“月薪”、“配偶”、“性别”、“爱好”、“地址”构建<key,value>的属性表。在节点b上分别对属性“公司”、“部门”、“邮箱”、“性别”、“爱好”、“员工数目”构建<key,value>的属性表。步骤6,在节点a和节点b上,对属性“月薪”,生成最小值和最大值的访问索引。节点a的“月薪”属性表中最小值是5800,最大值也是5800。节点b上没有“月薪”属性表,所以最小值和最大值都表示为空值(NULL)。(2)数据查询过程当用户查询“Bob的部门同事都有谁?”,即查询“公司值为CorpA,且部门值为人 事的人员名单”。那么只需要查询节点a上的部门属性表即可,即“Tom是Bob的部门同事”。当用户查询“CorpA公司中,月薪大于8000的有多少人?”,在节点a上,“月薪”属性表的访问索引中显示,月薪最大的人只有5800,即该节点上不存在月薪大于8000的人,所以该查询不需要再读取“月薪”属性表的数据。在本优选实施例中,上述按照<key,value>的格式进行存储相当于上述实施例中的键值存储方式。本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:S1,选择语义数据中的主题属性和主键属性,主题属性是语义数据中查询频率超过预定阈值的属性,主键属性是语义数据中数据逻辑描述的属性;S2,计算主题属性的每个主题属性值对应的主键属性的主键属性值集合;S3,将语义数据中属于同一个主键属性值集合的属性存储在同一节点上;S4,在节点上为存储在节点中的每个属性建立属性表,以及对属性表按照键值存储方式进行存储。可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3