基础概念

  • 1.扫盲概念:
    • GraphDB 是一个企业图形数据存储引擎,它使用C#语言开发,并且是开源的,对于非商业目的可以免费下载,但如果用于商业目的则需要购买商业许可。
    • GraphDB是NoSQL数据库的一种,它应用图理论存储实体之间的关系信息。最常见例子就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷。
    • 图数据库以图论为基础,并以节点(顶点)、边和属性作为基本概念。
      • 点(Node):表示一个实体,例如人,商品,或是一个账户。
      • 边 (Edge):也称做关系(relation),表示点和点之间的连接关系,例如用户A买了商品B。通常边是有方向性的,例如用户A购买了商品B,就表示为A->B;如果是用户A和用户C互相都认识,这种关系就是双向的,表示为A<->B。
      • 属性(propertis):表示点(Node)和边(Edge)所附带的信息,例如一个用户,他带有的属性可能是年龄30岁,爱好篮球等等。需要注意的是,每个点的属性(properties)是动态的,例如同样是用户A和C,A有属性“年龄30岁”,C却没有。但是它却包含属性“职业工程师”。
  • 亮点:
    • 完整的ACID支持
    • 高可用性
    • 轻易扩展到上亿级别的节点和关系
    • 通过遍历工具高速检索数据
  • 特点:

    • SQL就像简单的查询语言Neo4j CQL

    • 它遵循属性图数据模型

    • 它通过使用Apache Lucence支持索引

    • 它支持UNIQUE约束

    • 它它包含一个用于执行CQL命令的UI:Neo4j数据浏览器

    • 它支持完整的ACID(原子性,一致性,隔离性和持久性)规则

    • 它采用原生图形库与本地GPE(图形处理引擎)

    • 它支持查询的数据导出到JSON和XLS格式

    • 它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问

    • 它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本

    • 它支持两种Java API:Cypher API和Native Java API来开发Java应用程序

  • 优点:

    • 它很容易表示连接的数据

      • 检索/遍历/导航更多的连接数据是非常容易和快速的
    • 它非常容易地表示半结构化数据

    • Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习

    • 它使用简单而强大的数据模型

    • 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引

  • 属性图模型规则:

    • 表示节点,关系和属性中的数据

    • 节点和关系都包含属性

    • 关系连接节点

    • 属性是键值对

    • 节点用圆圈表示,关系用方向键表示。

    • 关系具有方向:单向和双向。

    • 每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”

CQL Cypher查询语言。

  • CQL

    • 它是Neo4j图形数据库的查询语言。

    • 它是一种声明性模式匹配语言

    • 它遵循SQL语法。

    • 它的语法是非常简单且人性化、可读的格式。

  • 常用的Neo4j CQL命令:

    • 1。CREATE: 创建

      • 创建节点,关系和属性
      • 使用场景:

        • 创建没有属性的节点
          • CREATE (<node-name>:<label-name>)
          • <node-name> 它是我们要创建的节点名称。
          • <label-name> 它是一个节点标签名称
        • 使用属性创建节点
          • CREATE (
            <node-name>:<label-name>
            {
            <Property1-name>:<Property1-Value>
            ........
            <Propertyn-name>:<Propertyn-Value>
            }
            )
          • <node-name> 它是我们将要创建的节点名称。
        • <label-name> 它是一个节点标签名称
        • <Property1-name>...<Propertyn-name> 属性是键值对。 定义将分配给创建节点的属性的名称
        • <Property1-value>...<Propertyn-value> 属性是键值对。 定义将分配给创建节点的属性的值
        • 在没有属性的节点之间创建关系

        • 使用属性创建节点之间的关系

        • 为节点或关系创建单个或多个标签

    • 2。MATCH:匹配
      • 检索有关节点,关系和属性数据
      • MATCH (<node-name>:<label-name>)
    • 3。RETURN:返回
      • 返回查询结果
      • RETURN <node-name>.<property1-name>,........<node-name>.<propertyn-name>
      • 使用场景:
        • 检索节点的某些属性
        • 检索节点的所有属性
        • 检索节点和关联关系的某些属性
        • 检索节点和关联关系的所有属性
    • 4.MATCH & RETURN匹配和返回
      • 语法:
        -MATCH Command RETURN Command
      • 检索节点的某些属性
      • 检索节点的所有属性
      • 检索节点和关联关系的某些属性
      • 检索节点和关联关系的所有属性
    • 5.关系基础:
      • 没有属性的关系与现有节点
        • MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
          CREATE
          (<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
          RETURN <relationship-label-name>
        • 1.MATCH,CREATE,RETURN 他们是Neo4J CQL关键字。
        • 2.<node1-name>它用于创建关系的“From Node”的名称。
        • 3.<node1-label-name> 它用于创建关系的“From Node”的标签名称。
        • 4.<node2-name> 它用于创建关系的“To Node”的名称。
        • 5.<node2-label-name>它用于创建关系的“To Node”的标签名称。
        • 6.<relationship-name> 这是一个关系的名称。
        • 7.<relationship-label-name> 它是一个关系的标签名称。
      • 与现有节点的属性的关系
        • MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
          CREATE
          (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
          {<define-properties-list>}]->(<node2-label-name>)
          RETURN <relationship-label-name>

          • 8.<define-properties-list> 它是分配给新创建关系的属性(名称 - 值对)的列表。
      • 使用新节点创建没有属性的关系
        • CREATE
          (<node1-label-name>:<node1-name>)-
          [<relationship-label-name>:<relationship-name>]->
          (<node1-label-name>:<node1-name>)
          RETURN <relationship-label-name>
      • 使用新节点创建与属性的关系
        • CREATE
          (<node1-label-name>:<node1-name>{<define-properties-list>})-
          [<relationship-label-name>:<relationship-name>{<define-properties-list>}]
          ->(<node1-label-name>:<node1-name>{<define-properties-list>})
          RETURN <relationship-label-name>
      • 检索关系节点的详细信息
        • MATCH
          (<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
          RETURN <relationship-label-name>
      • 单个标签到关系
        • CREATE (<node1-name>:<label1-name>)-
          [(<relationship-name>:<relationship-label-name>)]
          ->(<node2-name>:<label2-name>)
    • 6.WHERE:哪里
      • 提供条件过滤检索数据
      • 简单WHERE子句语法
        • WHERE <condition>
      • 复杂WHERE子句语法
        • WHERE <condition> <boolean-operator> <condition>
        • <condition>语法:
          • <property-name> <comparison-operator> <value>
        • WHERE 它是一个Neo4j CQL关键字。
        • <property-name><属性名称> 它是节点或关系的属性名称。
        • <comparison-operator><比较运算符> 它是Neo4j CQL比较运算符之一。请参考下一节查看Neo4j CQL中可用的比较运算符。
        • <value><值> 它是一个字面值,如数字文字,字符串文字等。
      • 使用WHERE子句创建关系:
        • MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
          WHERE <condition>
          CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
          {<relationship-properties>}]->(<node2-label-name>)
    • 5。DELETE:删除
      • 删除节点和关系
    • 6。REMOVE:移除
      • 删除节点和关系的属性
    • 7。ORDER BY:以…排序
      • 排序检索数据
  • Neo4j CQL 函数:
    • 1。String:字符串
      • 它们用于使用String字面量。
        • UPPER 它用于将所有字母更改为大写字母。
        • LOWER 它用于将所有字母改为小写字母。MATCH (e:Employee)
          RETURN e.id,LOWER(e.name),e.sal,e.deptno
        • SUBSTRING 它用于获取给定String的子字符串。
        • REPLACE 它用于替换一个字符串的子字符串
    • 2。Aggregation:聚合
      • 它们用于对CQL查询结果执行一些聚合操作。
        • COUNT 它返回由MATCH命令返回的行数。
        • MAX 它从MATCH命令返回的一组行返回最大值。
        • MIN 它返回由MATCH命令返回的一组行的最小值。
        • SUM 它返回由MATCH命令返回的所有行的求和值。
        • AVG 它返回由MATCH命令返回的所有行的平均值。
        • MATCH (e:Employee) RETURN COUNT(*)
    • 3。Relationship:关系
      • 他们用于获取关系的细节,如startnode,endnode等。
    • -
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐