基于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