Neo4j图数据库简介、安装、使用、导入RDF文件
一、简介
图论:图论是数学的一个分支,它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点表示事务,用连接两点的线表示相应两个事物间具有这种关系。
图数据库:基于图论实现的新型数据库,图数据库的存储结构和查询方式都是以图论为基础。
Neo4j:Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中,因此他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
Neo4j具备简单的查询语言Neo4j CQL,支持UNIQUE约束,支持完整的ACID规则,可以将数据导出到JSON和XLS格式。
二、安装
1. 安装
Mac系统可以使用Homebrew一键安装:
brew install neo4j
Windows可以前往官网下载安装,选择Community Server版本。下载解压后,配置相应的环境变量:
同时在path中加入%NEO4J_HOME%\bin;
2. 启动
neo4j start
启动成功后通过http://localhost:7474即可访问到,第一次进入时默认的账户密码都是neo4j。
三、使用
Neo4j是基于节点+关系的架构,保存了图形数据的基本元素。同时支持基础数据元素独特的CQL查询语法,快速方便的检索、构建复杂的图表关系结果。
通过一个简单的例子来了解节点、属性、关系的概念。
创建两个人,张三和李四,他们各自拥有年龄、性别、姓名属性,他们的关系是张三喜欢李四。
在代码区输入以下代码,点击运行。
create (p1:People {name:"张三",age:"20",sex:"男"})-[r:LIKES{since:"2020"}]
->(p2:People {name:"李四",age:"18",sex:"女"})
代码含义:create表示创建,p1是自己起的变量名,People是节点的类型,{name:“张三”,age:“20”,sex:“男”}是属性。[r:LIKES{since:“2020”}]表示两个节点间的关系,具有方向性,并且包含一个属性since。
得到如下结果:
删除节点和关系:
match (n:Person)-[r]-() delete n,r
节点(Nodes):通常表示一个实体和实体包含的属性。
关系(Relationshipes):表示节点和节点间的关系,具有方向性。
属性(Properties):是名称(或键)为字符串的命名值。支持的属性值:字符串,数字,布尔值。
标签(Lables):将节点分组为集合。一个节点可以标记位任意数量的标签。
四、导入RDF(ttl)文件
4.1 下载扩展插件
将RDF文件导入Neo4j中需要使用相应的插件。
下载地址:https://github.com/neo4j-labs/neosemantics/releases
- 根据Neo4j版本选择对应的jar包,下载好后将jar包移动到neo4j安装目录下的/plugins文件夹里。
-
修改conf/neo4j.conf文件,在最后一行添加:
dbms.unmanaged_extension_classes=n10s.endpoint=/rdf
-
重启Neo4j,在命令栏中输入以下语句:
:GET /rdf/ping
得到如下结果,则说明安装成功:
{"ping":"here!"}
4.2 导入RDF文件
首先初始化一些配置,在命令栏中输入:
CALL n10s.graphconfig.init();
CREATE CONSTRAINT n10s_unique_uri ON (r:Resource)
ASSERT r.uri IS UNIQUE;
导入数据:
CALL n10s.rdf.import.fetch("file:///D:\\neo4j-community-3.5.5\\import\\some_rdf_file.rdf", "RDF/XML");
文件路径为rdf文件的路径(本地或远程),本地文件需要在路径前加上file:\\\
文件格式可以是:Turtle, N-Triples, JSON-LD, RDF/XML, TriG and N-Quads,如果导入失败,尝试将要导入的文件放到neo4j的import目录下,再重新导入。
删除导入的文件:
drop constraint on (uri:Resource) assert uri.uri is unique
或:
CALL n10s.rdf.delete.fetch("https://github.com/neo4j-labs/neosemantics/raw/3.5/docs/rdf/deleteRDF/dataset.ttl","Turtle", {
typesToLabels: true,
keepCustomDataTypes: true,
handleMultival: 'ARRAY'
});
创建索引和删除索引:
create index on: Resources(uri)
drop index on: Resources(uri)
清空所有数据:
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r