基于MongoDB的RDF存储模式设计

基于MongoDB的RDF存储模式设计

老板要讲关于知识图谱的存储,让我做一下ppt,并让我讲一下MongoDB和Neo4j的用法,懵逼中,抓紧学习。首先介绍一下MongoDB怎么存储知识图谱吧。

首先,先介绍一下知识图谱在MongoDB中的存储模式,如下图:

由于知识图谱中包括了资源,类,属性等等。在这个Demo中,我们不考虑字面量,domain,range等等的一些关系,只是介绍最简单的用法。

假设我们有如下三元组,分别对应主语,谓语和宾语,我们用图上的存储模式存储这些三元组(Property在上图中并没有显示)。

军长  发出  命令
军长  属于  部队
部队  subclass    国防部

发出  属于  Property
命令  属于  class
部队  属于  class
国防部 属于  class

一共使用了4张表,RDF_STATEMENT记录三元组,RDF_RESOURCE记录所有资源,RDF_SUBCLASSOF记录父子类关系,RDF_CLASS记录类

存储结果如下:

基于MongoDB查询知识图谱

根据上文的描述,对于上文的存储模式,我们可以使用对RDF进行查询,如单个条件查询,连接查询,父子类关系查询。后续对于海量数据的查询可以使用索引,总的来说MongoDB与关系型数据库很相似,虽然他是NoSQL.

查询有关“军长”的全部三元组

查询有关"军长"的三元组信息:
军长 发出 命令

查询“军长”所属的类别

查询有关"军长"的所属类:
军长 属于 部队

查询“军长”的最上层类别

查询有关"军长"的所属父类:
军长 属于 部队
部队 subClassOf 国防部

Demo请查看本人GitHub:zhuguocheng29

Share