• neo4j图数据库基本概念


    简介:本文以电影关系图为例,解释neo4j图数据库中的基本概念

    电影关系图

    下图中的圆圈表示三个节点(node),每个节点都有表示类别的标签(label)和属性(properties),如:name、born、title、released,节点之间用单向箭头连接表示节点间的关系(relationships),如:ACTED_IN、DIRECTED

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MyWLOPT6-1656069356588)(F:/Backup/img/graph_simple.png)]

    以下Cycher语句可生成上述图结构

    CREATE (:Person:Actor {name: 'Tom Hanks', born: 1956})-[:ACTED_IN {roles: ['Forrest']}]->(:Movie {title: 'Forrest Gump'})<-[:DIRECTED]-(:Person {name: 'Robert Zemeckis', born: 1951})
    
    • 1

    节点 node

    电影关系图中每一个圆圈都表示一个节点(node),每个节点表示一个实体,下面具体分析第一个节点
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hui2IOn9-1656069356589)(F:/Backup/img/graph_single_node.png)]

    节点中的PersonActor为节点的标签(label),能将有着相同标签的节点划分到同一个类中,类似于Java中类的概念。节点可拥有多个标签,标签间的关系类似于类间的关系(继承),本节点中Actor可看做是Person的子类;

    name:'Tom Hanks' born:1956为节点的属性(properties),类似于Java类中的属性

    java实现代码如下

    public class Person{
        String name;
        long born;
    }
    class Actor extends Person{}
    
    • 1
    • 2
    • 3
    • 4
    • 5

    该节点可由以下Cypher语句生成

    CREATE (:Person:Actor {name: 'Tom Hanks', born: 1956})
    
    • 1

    语句解释:

    1. 创建节点所属的标签:Person:Actor
    2. 以键值对(key-value pairs)的形式声明属性,并大括号{}括起

    关系 relationship

    描述相互连接的始末节点间如何关联(describes how a connection between a source node and a target node are related),关系可以将节点构成链表(list)、树(tree)、图(map)、复合实体。

    特点:

    1. 有方向且单方向
    2. 必须有一个类型(type)以定义是何种关系
      Must have a type (one type) to define (classify) what type of relationship it is.
    3. 节点可以由指向自己的关系
    4. 关系可以有属性

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxXMjQEd-1656069356590)(F:/Backup/img/graph_example_relationship.png)]

    上图关系的类型(type)是ACTED_IN,属性为roles: ['Forrest']performance: 5

    Cypher语句为:

    CREATE ()-[:ACTED_IN {roles: ['Forrest'], performance: 5}]->()
    
    • 1

    ()表示节点

    -[:ACTED_IN {roles: ['Forrest'], performance: 5}]->为声明关系的语句,键值对同样表示属性(properties)

    属性 properties

    属性是以键值对的形式描述节点(node)和关系(relationships)的数据

    属性可以是各种数据类型,如:numberstringboolean;可以是存储同类数据的array或list,如:stringsnumbersbollean values

    CREATE (:Example {a: 1, b: 3.14})  // 属性a存储integer类型的值1,属性b存储float类型的数据
    CREATE (:Example {c: 'This is an example string', d: true, e: false})
    CREATE (:Example {f: [1, 2, 3], g: [2.71, 3.14], h: ['abc', 'example'], i: [true, true, false]})
    
    • 1
    • 2
    • 3

    其他概念

    图数据库中的其他概念暂时不做详述,如:Traversals(遍历)、paths(路径)、Schema、Indexes(索引)、Constraints(约束)

    补充

    电影数据库为neo4j的官方样例,可使用:guide movie-graph命令查看。关于属性、标签等概念可以借助以下查询语句验证和理解。

    Match (n) 
    return ID(n) as id, properties(n) AS properties, labels(n) AS label
    
    • 1
    • 2

    neo4j中的命名规范

    节点的标签、关系的类型、属性都是大小写敏感的,例如:属性nameName,一下为neo4j官方推荐的命名规范

    Graph entityRecommended styleExample
    Node labelCamel case, beginning with an upper-case character:VehicleOwner rather than :vehice_owner
    Relationship typeUpper case, using underscore to separate words:OWNS_VEHICLE rather than :ownsVehicle
    PropertyLower camel case, beginning with a lower-case characterfirstName rather than first_name

    对比图论

    在图论中,节点也称为顶点(vertices )或点(point)
    关系也称为边(edges)、链接(links)或线(lines)

    创建节点

    创建节点的语法中,可将节点名命名为n。因为节点名不作为唯一标识,类似于临时变量,使用相同的节点名不会影响数据库的创建

    CREATE (n:Person {name:'Sally'}) RETURN n
    CREATE (n:Person {name:'Steve'}) RETURN n
    CREATE (n:Person {name:'Mike'}) RETURN n
    
    • 1
    • 2
    • 3

    neo4j图片导出

    若导出为svg,可使用vscode或notepad编辑内容,查找font-size设置字体大小,查找font-family设置字体格式,然后使用photoshop将svg导出为png或借助在线转png的网站

    neo4j交互设置

    点击任一节点,出现一个灰色的圈,分别表示固定节点的位置、隐藏节点、显示与该节点有关系的其他节点

    右侧点击节点的标签Person,可以调整节点的颜色和大小

    点击箭头,可以设置表示关系箭头的粗细和颜色

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GA4QPan5-1656069356591)(F:/Backup/img/image-20220624190647695.png)]


    参考文章:

    meo4j 4.4 官方文档 Graph database concepts

    Neo4j图数据库中文文档—neo4j 0.1.0a documentation

    基于Neo4j构建电影图谱 - 知乎 (zhihu.com)

    neo4j 图数据库节点名、标签名、属性名 - 简书 (jianshu.com)

    neo4j导出高清图片并调整字体 - 知乎 (zhihu.com)

  • 相关阅读:
    C++-指针:void*(不确定类型指针)简介【void *可以接受任何类型的赋值】【void *可以赋值给任何类型的变量】【void *不可以解引用】
    性能压测工具:wrk
    网页使用之如何返回json/xml
    pip 源及使用
    ping命令详解
    【Hadoop快速入门】Hdfs、MapReduce、Yarn
    高薪程序员&面试题精讲系列118之Session共享有哪些方案?
    支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用
    第16章总结
    2022年4月最新面经答案总结(Java基础、数据库、JVM、计网、计操、集合、多线程、Spring)持续更新
  • 原文地址:https://blog.csdn.net/what_how_why2020/article/details/125451063