Neo4j入门

Neo4j中的基础概念

  • Node:节点,可以编辑不同的属性(Property)
  • Relationship:关系,用来连接节点,也可以为关系添加属性(Property)
  • Property:属性,key-value的形式,可以为node和relationship添加属性
  • Label:标签,可以为一类Node或Relationship添加同样的标签

一  Neo4j环境搭建

  1. 安装:下载软件安装包(https://neo4j.com/download-center/#releases),并在指定路径下解压缩(tar -xzvf neo4j-community-3.4.4-unix.tar.gz);
  2. 外网访问:修改neo4j的配置文件 /neo4j/conf/neo4j.conf ,取消54、75两行注释,使其可以供外网访问;
  3. 添加导入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;
  4. 启动服务:在/neo4j/bin路径下执行 ./neo4j console 命令。
  5. 访问 http://<ip>:7474/browser/ 验证服务启动成功。

二  Neo4j的查询语言cypher

Neo4j是一个无模式或less模式的图数据库,使用它时可以不定义任何schema。当然,按照定义好的schema存储知识也是可以的。下面以人的schema为例,为人schema创建两个实体,名字分别为周冬雨和张一山,定义的schema如下:

  1. Label: Person
  2. 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 下载。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值