Neo4j 图数据库快速学习

neo4j

简介

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。

Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注.

安装

普通安装

首先在 https://neo4j.com/download/ 下载Neo4J。Neo4J分为社区版和企业版,企业版在横向扩展、权限控制、运行性能、HA等方面都比社区版好,适合正式的生产环境,普通的学习和开发采用免费社区版就好。

在Mac或者Linux中,安装好jdk后,直接解压下载好的Neo4J包,运行bin/neo4j start即可

docker安装

  1. docker pull neo4j
    
  2. docker run -d --name cch_neo4j \
         -p 7474:7474 -p 7687:7687 \
         -v /Users/caochuanhong/opt/docker/neo4j/data:/data \
         -v /Users/caochuanhong/opt/docker/neo4j/logs:/logs \
         -v /Users/caochuanhong/opt/docker/neo4j/conf:/var/lib/neo4j/conf \
         -v /Users/caochuanhong/opt/docker/neo4j/import:/var/lib/neo4j/import \
         --env NEO4J_AUTH=neo4j/password=123456 neo4j
    
  3. 开启允许远程登陆

    • 打开neo4j.conf文件
    • 添加或修改以下配置:
      //指定连接器的默认监听ip为0.0.0.0,即允许任何ip连接到数据库
      dbms.connectors.default_listen_address=0.0.0.0
      //对bolt请求的监听地址
      dbms.connector.bolt.listen_address=0.0.0.0:7687
      //对http请求的监听地址
      dbms.connector.http.listen_address=0.0.0.0:7474
      
  4. 访问:http://127.0.0.1:7474/browser/

  5. 在这里插入图片描述

  6. 输入用户名和密码 neo4j/123456

  7. 在这里插入图片描述

语法

  • () :最简单的节点形式,表示一个任意无特征的节点,其实就是一个空节点

  • (matrix) :如果想指向一个节点在其他地方,我们可以给节点添加一个变量名(matrix)。变量名被限制单一的语句里,一个变量名在不同的语句中可能有不同的意义,或者没意义

  • (:Movie) :添加标签名称

  • (matrix:Movie) :一个节点有一个标签名(Movie),并且把它分配到变量matrix上,节点的标签(被定义在:后),用于声明节点的类型或者角色。注意节点可以有多个标签。标签被用于 限制搜索pattern, 保留他们在匹配结构中,不使用标签在query里。

(matrix:Movie {title: “The Matrix”}) :花括号里定义节点的属性,属性都是键值对

(matrix:Movie {title: “The Matrix”, released: 1999}) :多个属性

(matrix:Movie:Promoted) :多个标签

创建节点

CREATE (变量:标签 {json属性}),例如

CREATE (user:User {id:1,name:"张三",sex:"男"})

在这里插入图片描述

在这里插入图片描述

更新节点

MATCH(n:User) WHERE n.name="张三" SET n.sex = "女" 

在这里插入图片描述

删除节点

  • 删除所有,两种方式都可以

    MATCH (n) DETACH DELETE n
    
    MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r
    
  • 删除指定节点

    MATCH(n) WHERE ID(n)=1 DELETE n
    

在这里插入图片描述

创建关系

  1. 从已有的节点中创建连接
MATCH(a:Node),(b:Node) WHERE ID(a)=230 AND ID(b)=231 CREATE (b)-[:R]->(a)  
  1. 创建新节点并创建关系
CREATE (user1:User {name:"张三",sex:"男"}),(user2:User {name:"李四",sex:"男"}),(user3:User {name:"王五",sex:"男"}),(user1)-[:FRIENDS {id:1,since:2001}]->(user2),(user2)-[:FRIENDS {id:2,since:2002}]->(user3)

Neo4j Connector for Apache Spark

Apache Spark 的 Neo4j 连接器旨在使图形与 Spark 的集成变得容易。有两种有效的使用连接器的方法:

  • 作为数据源:在 Spark 中将任何一组节点或关系作为 DataFrame 读取
  • 作为接收器:将任何 DataFrame 作为节点或关系的集合写入 Neo4j,或者;使用 Cypher 语句将 DataFrame 中的记录处理为您选择的图形模式。

连接器下载

Maven方式安装驱动

        <dependency>
            <groupId>neo4j-contrib</groupId>
            <artifactId>neo4j-connector-apache-spark_2.12</artifactId>
            <version>4.0.0</version>
        </dependency>

如果jar无法下载,可以通过手动复制的方式将下载好的jar包安装maven库格式copy到相应的库地址中

读取所有类型为 Person 的节点

import org.apache.spark.sql.{SaveMode, SparkSession}

val spark = SparkSession.builder().getOrCreate()

val df = spark.read.format("org.neo4j.spark.DataSource")
  .option("url", "bolt://localhost:7687")
  .option("authentication.basic.username", "neo4j")
  .option("authentication.basic.password", "neo4j")
  .option("labels", "Person")
  .load()

将 DataFrame 写入 Person 类型的节点

import org.apache.spark.sql.{SaveMode, SparkSession}

val spark = SparkSession.builder().getOrCreate()
import spark.implicits._

val df = Seq(
  ("John Doe"),
  ("Jane Doe")
).toDF("name")

df.write.format("org.neo4j.spark.DataSource")
  .mode(SaveMode.ErrorIfExists)
  .option("url", "bolt://localhost:7687")
  .option("authentication.basic.username", "neo4j")
  .option("authentication.basic.password", "neo4j")
  .option("labels", ":Person")
  .save()

帮助文档

  1. https://neo4j.com/developer/spark/quickstart/
  2. https://www.cnblogs.com/caoyusang/p/13610408.html
  3. https://zhuanlan.zhihu.com/p/88745411
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值