图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 & Cypher语句的入门

2024-03-01 2085阅读

图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第1张

前言

MySQL一种开源的关系型数据库管理系统,使用SQL作为其查询语言,常见的关系型数据库有MySQL、Oracle、SQL Server、PostgreSQL等。相关博客文章如下:

  • 【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身
  • PostgreSQL数据库——Docker版本的postgres安装 & Navicat连接方式+导入向导使用 & SpringBoot结合Jpa使用PostgreSQL初步

    还有就是非关系型数据库,也称为NoSQL数据库,它不使用表格来存储数据,而是使用键值对、文档、图形等方式来存储数据。常见的非关系型数据库有MongoDB、Redis、Cassandra等。相关博客文章如下:

    【合集】Redis——Redis的入门到进阶 & 结合实际场景的Redis的应用

    此外,还有一种图数据库,图形数据库是专门用于存储图形数据的数据库,它使用图形模型来存储数据,并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。

    本篇博客介绍Neo4j图数据库,Neo4j是用Java实现的开源NoSQL图数据库,本篇博客介绍docker版本的安装,Neo4j的数据结构,基本的创建、查询的Cypher语句。

    图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第2张

    目录

    • 前言
    • 引出
    • Neo4j
      • 什么是Neo4j?
      • 部署安装
      • 数据结构
      • Cypher入门
        • 创建数据
        • 删除数据
        • 查询语句
          • 按照转运次数最少
          • 按照费用最少
          • 附录:构造数据
          • 总结

            引出


            1.Neo4j是用Java实现的开源NoSQL图数据库;

            2.dokcer版本的Neo4j部署安装,数据结构介绍;

            3.Cypher是Neo4j的查询语言,创建和查询入门;

            Neo4j

            什么是Neo4j?

            Neo4j是用Java实现的开源NoSQL图数据库。从2003年开始开发,2007年正式发布第一版,其源码托管于GitHtb。Neo4j作为图数据库中的代表产品,已经在众多的行业项目中进行了应用,如:网络管理、软件分析、组织和项目管理、社交项目等方面。

            官网:https://neo4j.com/

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第3张

            Neo4j实现了专业数据库级别的图数据模型的存储,提供了完整的数据库特性,包括ACID事务的支持、集群的支持、备份和故障转移等。

            Neo4j提供了申明式的查询语言Cypher,它类似于关系型数据库中的SQL语言,其具有表现力丰富、使用简单、查询效率高、高扩展性等特点。

            其中,紫色圆圈是【人】数据,橙色圆圈是【电影】数据,表示人与电影之间参演或导演的数据关系。

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第4张

            部署安装

            Neo4j支持众多平台的部署安装,如:Windows、Mac、Linux等系统。Neo4j是基于Java平台的,所以部署安装前先保证已经安装了Java虚拟机。

            7474是web管理工具的端口,7687是neo4j协议端口进行数据通信

            docker run \
            -d \
            --restart=always \
            --name neo4j \
            -p 7474:7474 \
            -p 7687:7687 \
            -v neo4j:/data \
            neo4j:4.4.5
            

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第5张

            查看运行的容器

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第6张

            查看日志

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第7张

            http://119.3.162.127:7474/browser/

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第8张

            首次登录需要修改密码

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第9张

            修改后进入首页

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第10张

            查询语句入门

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第11张

            MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies
            

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第12张

            数据结构

            图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第13张

            • 节点

              • 存储实体数据,在上图中,演员、电影都是节点。
              • 可以理解为关系型数据库中的表。
              • 关系

                • 存储节点之间的关系。
                • 关系只能有一个类型,必须有开始节点和结束节点以及指向。
                • 关系可以自我循环引用,但是两头永远不能为空。
                • 属性

                  • 节点和关系都可以有属性,它是由键值对组成的。
                  • 节点的属性可以理解为关系型数据库中的字段。
                  • 关系中的属性进一步的明确了关系。
                  • 标签

                    • 标签是对节点的分类,这样使得构建Neo4j数据模型更加简单。
                    • 在上面的电影案例中,Movie、Person就是标签

                      Cypher入门

                      Cypher是Neo4j的查询语言,类似与关系型数据库中的SQL,一些关键词来源于SQL,比如:CREATE、WHERE、RETRUN等。下面我们一起学习Cypher的基本语句。

                      Cypher语句的关键字对大小写不敏感。

                      创建数据

                      使用CREATE命令来创建节点、关系、属性数据。语法如下

                      //查询所有数据
                      MATCH (n) RETURN n
                      //删除所有节点和关系,慎用!
                      MATCH (n) DETACH DELETE n
                      CREATE (n {name: $value}) RETURN n   //创建节点,该节点具备name属性,n为该节点的变量,创建完成后返回该节点
                      CREATE (n:$Tag {name: $value}) //创建节点,指定标签
                      CREATE (n)-[r:KNOWS]->(m)  //创建n指向m的关系,并且指定关系类型为:KNOWS
                      

                      删除数据

                      //删除节点
                      MATCH (n:AGENCY {name:"航头营业部"}) DELETE n
                      //有关系的节点是不能直接删除的
                      MATCH (n:AGENCY {name:"北京市昌平区新龙城"}) DELETE n
                      //删除节点和关系
                      MATCH (n:AGENCY {name:"北京市昌平区新龙城"}) DETACH DELETE n
                      //删除所有节点和关系,慎用!
                      MATCH (n) DETACH DELETE n
                      

                      查询语句

                      [MATCH WHERE]  //条件查询
                      [WITH [ORDER BY] [SKIP] [LIMIT]] //查询的结果以管道的形式传递给下面的语句,聚合查询必须使用WITH
                      RETURN [ORDER BY] [SKIP] [LIMIT] //返回、排序、跳过、返回个数
                      
                      MATCH (n) RETURN n  //查询所有的数据
                      
                      //查询关系,relationships()获取结果中的关系,WITH向后传递数据
                      MATCH path = (n:OLT {name:"北京市转运中心"}) -[*..2]->(m)
                      WITH n,m, relationships(path) AS r
                      RETURN r
                      

                      图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第14张

                      MATCH p = (n:OLT {name:"北京市转运中心"}) --> (m:OLT) RETURN p //将查询赋值与变量
                      

                      图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第15张

                      MATCH (n:OLT {name: "北京市转运中心"}) -- (m) RETURN n,m 
                      //查询所有与“北京市转运中心”有关系的节点
                      

                      图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第16张

                      //查询两个网点之间所有的路线,最大深度为6,可以查询到2条路线
                      MATCH path = (n:AGENCY) -[*..6]->(m:AGENCY)
                      WHERE n.name = "北京市昌平区定泗路" AND m.name = "上海市浦东新区南汇"
                      RETURN path
                      

                      图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第17张

                      按照转运次数最少

                      //查询两个网点之间最短路径,查询深度最大为10
                      MATCH path = shortestPath((n:AGENCY) -[*..10]->(m:AGENCY))
                      WHERE n.name = "北京市昌平区定泗路" AND m.name = "上海市浦东新区南汇"
                      RETURN path
                      

                      图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第18张

                      按照费用最少

                      //查询两个网点之间所有的路线中成本最低的路线,最大深度为10(如果成本相同,转运节点最少)
                      MATCH path = (n:AGENCY) -[*..10]->(m:AGENCY)
                      WHERE n.name = "北京市昌平区定泗路" AND m.name = "上海市浦东新区南汇"
                      UNWIND relationships(path) AS r
                      WITH sum(r.cost) AS cost, path
                      RETURN path ORDER BY cost ASC, LENGTH(path) ASC LIMIT 1
                      //UNWIND是将列表数据展开操作
                      //sum()是聚合统计函数,类似还有:avg()、max()、min()等
                      

                      图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 Cypher语句的入门 第19张

                      附录:构造数据

                      CREATE (北京市转运中心:OLT {bid: 8001, name: "北京市转运中心", address: "北京市转运中心", location : point({latitude:39.904179, longitude:116.407387})})
                      CREATE (上海市转运中心:OLT {bid: 8002, name: "上海市转运中心", address: "上海市转运中心", location : point({latitude:31.230525, longitude:121.473667})})
                      CREATE (南京市转运中心:OLT {bid: 8003, name: "南京市转运中心", address: "南京市转运中心", location : point({latitude:32.059344, longitude:118.796624})})
                      CREATE (太原市转运中心:OLT {bid: 8004, name: "太原市转运中心", address: "太原市转运中心", location : point({latitude:37.870451, longitude:112.549656})})
                      CREATE (郑州市转运中心:OLT {bid: 8005, name: "郑州市转运中心", address: "郑州市转运中心", location : point({latitude:34.745551, longitude:113.624321})})
                      CREATE
                          (北京市转运中心)-[:IN_LINE {cost:10684.9}]->(上海市转运中心),
                          (北京市转运中心)(南京市转运中心),
                          (北京市转运中心)(上海市转运中心),
                          (南京市转运中心)(郑州市转运中心),
                          (太原市转运中心)(南京市转运中心),
                          (郑州市转运中心)(昌平区转运中心),
                          (北京市昌平区新龙城)(昌平区转运中心),
                          (北京市昌平区定泗路)(海淀区转运中心),
                          (北京市海淀区小营)(海淀区转运中心),
                          (北京市海淀区万泉河)(北京市转运中心),
                          (昌平区转运中心)(北京市转运中心),
                          (海淀区转运中心)(浦东新区转运中心),
                          (上海市浦东新区南汇)(浦东新区转运中心),
                          (上海市浦东新区周浦)(奉贤区转运中心),
                          (上海市奉贤区东部)(奉贤区转运中心),
                          (上海市奉贤区青村)(上海市转运中心),
                          (浦东新区转运中心)(上海市转运中心),
                          (奉贤区转运中心)(玄武区转运中心),
                          (江苏省南京市玄武区紫金墨香苑)(玄武区转运中心),
                          (江苏省南京市玄武区长江路)(南京市转运中心),
                          (玄武区转运中心)(小店区转运中心),
                          (山西省太原市青龙)(小店区转运中心),
                          (山西省太原市长风街)(太原市转运中心),
                          (小店区转运中心)(中原区转运中心),
                          (河南省郑州市郑上路)(中原区转运中心),
                          (河南省郑州市颍河路)(郑州市转运中心),
                          (中原区转运中心)

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]