3.18号的时候,我接到一个任务,将防疫的数据抽取出病例密接次密接的关系,存入到图数据库nebula中,并将数据返回给前端,以展示病例传染情况的知识图谱。因为此前没有接触过知识图谱和数据库,便开始了边学边干的工作状态,因此记录了此文档。
01
—
知识图谱
知识图谱是结构化的语义知识库,用于以符号形式描述物理世界中的概念及其相互关 系.其基本组成单位是“实体-关系-实体”三元组,以及实体及其相关属性-值对,实体间通过关系相互联结,构成网状的知识结构。基于知识图谱的搜索引擎,能够以图形方式向用户反馈结构化的知识,用户不必浏览大量网页,就可以准确定位和深度获取知识。将知识图谱应用在防疫场景之中,便是展示病例、密接与次密接的传染链关系,如搜索单一病例用户的ID,可以返回该用户属性,如姓名、性别、电话等,并返回与之接触人员的密接人员及接触地点信息。
补充一些知识图谱中的概念:
实体:是指具有可区别性且独立存在的某种事物(有点像面向对象编程里的Object)。如某一种动物、某一个城市、某一种水果、某一类商品等等。世界万物由具体事物组成,指实体。实体是知识图谱中的最基本元素,不同的实体间存在不同的关系,在防疫场景中的实体便是人。
属性:主要指对象可能具有的属性、特征、特性、特点以及参数,例如国籍、生日等。
属性值:主要指对象指定属性的值,例如国籍对应的“中国”、生日对应1988-09-08等。每个属性-属性值对可用来刻画实体的内在特性。
关系:用来连接两个实体,刻画它们之间的关联。形式化为一个函数,它把kk个点映射到一个布尔值。在知识图谱上,关系则是一个把kk个图节点(实体、语义类、属性值)映射到布尔值的函数。
02
—
数据库nebula
图数据库以点、边、属性的形式存储数据。其优点在于灵活性高,支持复杂的图形算法,可用于构建复杂的关系图谱。nebula是国产的开源分布式图数据库,官网介绍其是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。它可以将图中的数据高效存储为点(Vertex)和边(Edge),还可以将属性(Property)附加到点和边上。
与关系型数据库不同,图数据库nebula使用nGQL来操作数据库。语句操作如下:
创建空间,类比关系数据库的创建库
REATE SPACE IF NOT EXISTS spacename (vid_type=FIXED_STRING(5000)); USE spacename
创建点(vertex),类比关系数据库的创建表
CREATE TAG vertexname (Properties_name1, Properties_name2, Properties_name3);
同理创建边也类似
CREATE EDGE IF NOT EXISTS edgename (Properties_name1, Properties_name2, Properties_name3);
插入数据,需要分别向点传入顶点值及属性,向边传入点与点的关系
INSERT VERTEX IF NOT EXISTS vertexname VALUES vid:(Properties_name1, Properties_name2, Properties_name3)
INSERT EDGE IF NOT EXISTS edgename VALUES "vid1"->"vid2":(Properties_name1, Properties_name2, Properties_name3);
查询数据,查询单条边的信息
MATCH p=(v)-[e:l1|:l2*1]->(v2) WHERE id(v) IN [vertexname] RETURN p
03
—
nebula图数据库部署
首先确定所在服务器硬件是否满足nebula的需求,然后在官网找到对应的版本安装包
安装 RPM 包
$ sudo rpm -ivh --prefix=<installation_path> <package_name>
安装 DEB 包
$ sudo dpkg -i <package_name>
启动服务器
sudo usr/local/nebula/scripts/nebula.service start all
安装Nebula Graph Studio下载安装包,运行下面命令即可安装
$ sudo rpm -i nebula-graph-studio-3.2.3.x86_64.rpm
安装好后,默认端口为7001,登录Nebula Graph Studio平台,将防疫填报系统中的数据逻辑捋清楚,从中抽取出人员属性及人员病毒的传染关系,存入到图数据库中,便可以在studio中看到病毒传播链的知识图谱效果。





