Neo4j中的基础概念
- Node:节点,可以编辑不同的属性(Property)
- Relationship:关系,用来连接节点,也可以为关系添加属性(Property)
- Property:属性,key-value的形式,可以为node和relationship添加属性
- Label:标签,可以为一类Node或Relationship添加同样的标签
一 Neo4j环境搭建
- 安装:下载软件安装包(https://neo4j.com/download-center/#releases),并在指定路径下解压缩(tar -xzvf neo4j-community-3.4.4-unix.tar.gz);
- 外网访问:修改neo4j的配置文件 /neo4j/conf/neo4j.conf ,取消54、75两行注释,使其可以供外网访问;
- 添加导入RDF数据的功能:a) 在/neo4j/plugins中加入插件(https://github.com/jbarrasa/neosemantics/releases/download/3.3.0.2/neosemantics-3.3.0.2.jar);b) 在配置文件中加入一行 dbms.unmanaged_extension_classes=semantics.extension=/rdf;
- 启动服务:在/neo4j/bin路径下执行 ./neo4j console 命令。
- 访问 http://<ip>:7474/browser/ 验证服务启动成功。
二 Neo4j的查询语言cypher
Neo4j是一个无模式或less模式的图数据库,使用它时可以不定义任何schema。当然,按照定义好的schema存储知识也是可以的。下面以人的schema为例,为人schema创建两个实体,名字分别为周冬雨和张一山,定义的schema如下:
- Label: Person
- Property:
- name
- nationality
- born
- height
插入命令
- 创建类、实体、属性
CREAT (p1: Person {name: ‘杨紫’, nationality: ‘中国’, born: 1992, height: 167})
CREAT (p2: Person {name: ‘张一山’, nationality: ‘中国’, born: 1992, height: 176})
- 创建关系
CREATE (p1)-[: IS_SCHOOLMATE_OF] -> (p2)
- 创建具有属性的关系
CREATE (p1)-[: IS_SCHOOLMATE_OF {school: ‘北京电影学院’}] -> (p2)
表示的信息量更多,类似于四元组
- 添加或更新属性
MATCH (n:Person{name: '张一山'}) SET n.height=175 RETURN n
查询命令
- 查询所有节点和关系
MATCH (n) RETURN (n)
- 根据属性查实体
MATCH(n: Person) WHERE n.name = ‘杨紫’ RETURN n
或者
MATHCH(n:Person{name:'杨紫'}) RETURN n
- 查Person下所有实体
MATCH (n: Person) RETURN (n)
- 查Person下所有属性
match(:Person)-[r]-() return r
删除命令
- 删除没有relationship的节点
MATCH (n:Person{name: '张一山'}) DELETE n
- 删除节点及相关关系和节点
MATCH (m: Person{name: ’张一山’})-[r]-(n:Person) DELETE m, r, n
- 删除节点或关系的标签
MATCH (n:Person{name: '杨紫'}) REMOVE n:Person RETURN n
- 删除节点或关系的属性
MATCH (n:Person{name: '杨紫'}) REMOVE n.born RETURN n
ID属性
在Neo4j中,“Id”是节点和关系的默认内部属性。 这意味着,当我们创建一个新的node或relationship时,Neo4j数据库服务器将为内部使用分配一个数字。 它会自动递增。因此,可以根据id对节点进行修改或删除。
三 Neo4j导入文件
1 导入CSV文件:CSV文件放置于/neo4j/import路径下
- 导入数据
LOAD CSV WITH HEADERS FROM "file:///products.csv" AS row
CREATE (n:Product)
SET n = row, n.unitPrice = toFloat(row.unitPrice), n.unitsInStock = toInteger(row.unitsInStock), n.unitsOnOrder = toInteger(row.unitsOnOrder), n.reorderLevel = toInteger(row.reorderLevel), n.discontinued = (row.discontinued <> "0")
- 创建索引
CREATE INDEX ON :Product(productID)
- 创建关系
MATCH (p:Product),(c:Category)
WHERE p.categoryID = c.categoryID
CREATE (p)-[:PART_OF]->(c)
注:neo4j中导入csv文件更多详情见官网。
2 导入RDF数据:RDF数据放置于/neo4j/import路径下
a) 使用URI全称
CALL semantics.importRDF(“file:///file.rdf”, “Turtle”, false, 500)
b) 使用命名空间
- 创建命名空间前缀
CREATE (:NamespacePrefixdefinition {‘http://www.example.com/ontology/1.0.0#’: ‘ex’, ‘http://www.w3.org/1999/02/22-rdf-syntax-ns#’: ‘rdfs’})
- 创建rdf映射到neo4j的标签
CREATE INDEX ON: Resource(uri)
CREATE INDEX ON: URI(uri)
CREATE INDEX ON: BNode(uri)
CREATE INDEX ON: Class(uri)
- 导入rdf数据
CALL semantics.importRDF(“file:///file.rdf”, “Turtle”, {shortenUrls: true})
注:neo4j中导入rdf数据更多详情见https://github.com/jbarrasa/neosemantics。
四 Neo4j社区版和企业版的区别
特性 | 企业版 | 社区版 |
---|---|---|
数据库集群 | 多数据库集群可以提供横向的可扩展性,以支持大规模并发的数据写入和查询,以及高可用性和灾难恢复。 | 无 |
数据库热备份 | 在数据库运行时刻进行备份,确保24小时的可用性。 | 手工备份,需要停止数据库服务 |
在线存储空间再使用 | 回收并再使用由于数据删除而释放的空间。 | 无 |
LDAP/AD集成 | 与企业级用户身份认证和访问控制系统集成。 | 无 |
基于数据库角色的访问控制 | 为数据库管理员提供指定用户角色的功能,支持的角色包括只读、写入、管理员等。 | 无 |
高级数据库监控,性能指标和cypher查询状态跟踪 | 提供监控数据库运行状况的整套指标,以及对正在运行的查询进行状态跟踪和管理(例如强制结束查询的运行)。 | 无 |
JMX日志和监控 | 包含Graphite JMX客户端 | 无 |
更全面的日志 | 包括HTTP、GC、Security日志 | 仅HTTP日志 |
更快的运行时刻cypher执行 | 企业版的运行内核进行专门的优化,这使得cypher查询的执行更加高效。 | 无 |
无限制的图节点、关系和属性 | 对节点、关系和属性的数目没有限制。 | 节点:344亿;关系:344亿 |
节点键 | 数据库模式特性:使用一个或多个节点属性来唯一标识一个节点(类似关系数据库中的符合主键)。 | 无 |
属性存在性限制 | 数据库模式特性:允许定义限制(Constraint)要求某个属性总是存在 | 无 |
更高效的写入锁 | 对于超过4个CPU核心的系统提供更加高效的写入锁机制以增加并发处理能力。 | 只针对最多4个CPU核心 |
极大优化的并行图算法执行过程 | 对于超过4个CPU核心的系统提供高度优化的并行图算法执行过程。 | 只针对最多4个CPU核心 |
支持更先进和管饭的硬件类型 | 支持超过4个以上的CPU的核心;支持IBM Power 8系统主机 | 只针对最多4个CPU核心 |
企业级营运管理员工具 | 提供管理员命令行界面,包括neo4j-shell、neo4j-import(高效数据导入)等 | 无 |
五 Neo4j的源码
Neo4j的源码可在 https://github.com/neo4j/neo4j 下载。