首页 > 数据库 >图数据库之neo4j

图数据库之neo4j

时间:2023-09-11 17:34:59浏览次数:42  
标签:NODE 关系 name 标签 数据库 Neo4j neo4j 节点

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

  

  二、特性

  • 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的优缺点
  (1)优点
  ①底层数据存储专门针对图形数据的特点进行了优化,在处理关系数据方面比其他数据库有更高的性能。
  ②专门为关系数据设计的查询语言更便于关系数据的操作。
  ③没有表结构的概念,它比SQL更灵活。
  ④自动为数据建立合适的索引(根据数据的标签),避免索引管理的麻烦。
  ⑤支持高可用主从集群部署。
  ⑥借助图形平台等辅助工具帮助开发人员快速构建完整的关系数据平台。
  (2)neo4j的缺点
  ①图数据结构导致写入性能差。
  ②只支持java和基于jvm的语言,社区版不能使用集群。
  ③社区不够活跃,资料不丰富。
  (3)为什么选用Neo4j
  Neo4j发布时间早,产品较为成熟稳定,目前是市场使用率最高的图数据库,文档和各种技术博客较多

  四、构成包含:节点、属性、关系、标签、数据浏览器 

  1)节点

  节点(Node)是图数据库中的一个基本元素,用来表示一个实体记录,就像关系数据库中的一条记录一 样。在Neo4j中节点可以包含多个属性(Property)和多个标签(Label)。

  • 节点是主要的数据元素
  • 节点通过关系连接到其他节点
  • 节点可以具有一个或多个属性(即,存储为键/值对的属性)
  • 节点有一个或多个标签,用于描述其在图表中的作用

  2)属性

  属性(Property)是用于描述图节点和关系的键值对。其中Key是一个字符串,值可以通过使用任何,Neo4j数据类型来表示。

  • 属性是命名值,其中名称(或键)是字符串
  • 属性可以被索引和约束
  • 可以从多个属性创建复合索引

  3)关系

  关系(Relationship)同样是图数据库的基本元素。当数据库中已经存在节点后,需要将节点连接起来构成图。关系就是用来连接两个节点,关系也称为图论的边(Edge) ,其始端和末端都必须是节点,关系不能指向空也不能从空发起。关系和节点一样可以包含多个属性,但关系只能有一个类型(Type) 。

  • 关系连接两个节点
  • 关系是方向性的
  • 节点可以有多个甚至递归的关系
  • 关系可以有一个或多个属性(即存储为键/值对的属性)

  基于方向性,Neo4j关系被分为两种主要类型:

  • 单向关系
  • 双向关系

  4)标签

  标签(Label)将一个公共名称与一组节点或关系相关联, 节点或关系可以包含一个或多个标签。 我们 可以为现有节点或关系创建新标签, 我们可以从现有节点或关系中删除标签。

  • 标签用于将节点分组
  • 一个节点可以具有多个标签
  • 对标签进行索引以加速在图中查找节点
  • 本机标签索引针对速度进行了优化

  5)Neo4j Browser

  一旦我们安装Neo4j,我们就可以访问Neo4j数据浏览器

  五、安装,注意社区版,不能使用集群方式部署,并且有节点和关系数量限制。

version: '3'
services:
  xbd-neo4j:
    image: neo4j:4.4.25
    restart: always
    container_name: xbd-neo4j
    privileged: true
    ports:
      - 7474:7474
      - 7687:7687
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /var/lib/neo4j:/data

  六、界面视图

   七、基本语法:

  1)创建

CREATE (<变量>:<标签> {<属性:JSON格式>}) RETURN <变量>
CREATE (n:NODE {name:'node'}) RETURN n

  2)删除

MATCH (<变量>:<标签> {<属性:JSON格式>}) DETACH DELETE n
MATCH (n:NODE {name:'node'}) DETACH DELETE n

  3)合并

MERGE(<变量>:<标签> {<属性:JSON格式>}) RETURN <变量>
MERGE (n:NODE {name:"node"}) return n

  4)查询

MATCH (<变量>:<标签> {<属性:JSON格式>}) RETURN <变量>
MATCH (n:NODE {name:'node'}) RETURN n

  八、一些基本操作

  1)创建节点

MERGE (node1:NODE {name:"node1", ip:"0.0.0.1"}) return node1
MERGE (node2:NODE {name:"node2", ip:"0.0.0.2"}) return node2
MERGE (node3:NODE {name:"node3", ip:"0.0.0.3"}) return node3

  2)更新关系

MATCH (node1:NODE {ip:"0.0.0.1"}), (node2:NODE {ip:"0.0.0.2"}), (node3:NODE {ip:"0.0.0.3"})
MERGE (node1)-[r1:ref]->(node2)-[r2:ref]->(node3)
return node1, node2, node3, r1, r2

  3)一次性加入节点和关系

MERGE (node4:NODE {name:"node4"})-[r3:ref]->(node5:NODE {name:"node5"})-[r4:ref]->(node6:NODE {name:"node6"}) return node4, node5, node6, r3, r4

  4)通用查询

MATCH n=(x:NODE {ip:"0.0.0.1"})-[*]-(y:NODE {ip:"0.0.0.3"}) return n

  说明:单节点查询,返回x,y即可

  九、测试展示

  

 

标签:NODE,关系,name,标签,数据库,Neo4j,neo4j,节点
From: https://www.cnblogs.com/ll409546297/p/17694041.html

相关文章

  • Postgresq l 数据库查询格式为jsonp的列,怎么查询其值属性 | ->> 操作符
    要查询PostgreSQL数据库表中的JSONP列(假设列名为props)中是否包含特定条件的记录,可以使用JSONB函数和操作符进行查询。JSONP列通常存储为JSONB类型。假设表结构如下:CREATETABLEyour_table(idserialPRIMARYKEY,propsjsonb);在这个表中,props列存储......
  • 数据库数据恢复-Oracle数据库误执行truncate table的数据恢复案例
    Oracle数据库故障&分析:北京某单位Oracle11gR2数据库误执行truncate table CM_CHECK_ITEM_HIS,表数据丢失,查询该表时报错。数据库备份无法使用,表数据无法查询。Oracle数据库Truncate数据的机理:执行Truncate命令后,ORACLE数据库会在数据字典和Segment Header中更新表的Data O......
  • Navicat 携手华为云GaussDB,联合打造便捷高效的数据库开发和建模工具方案
    本文分享自华为云社区《Navicat携手华为云GaussDB,联合打造便捷高效的数据库开发和建模工具方案》,作者:GaussDB数据库。近日,NavicatPremium顺利完成与华为云GaussDB的兼容性测试认证,并获得华为云授予的技术认证书。Navicat作为华为云GaussDB生态工具合作伙伴以及G......
  • 数据库----初识
    《世界诞生的前夜----开发环境配置》在进入数据库开发软件时遇到这样一个错误:  看起来是SQLServer(数据库管理系统)发生了错误,  找到数据库管理系统设置工具,让SQLServer运行起来就行了......
  • ClickHouse使用之二 ——整合mysql,实现数据库创建查询导出
    1.mysql创建一个用于clickhouse的账号mysql_clickhouse并且授权CREATEUSER'mysql_clickhouse'@'%'IDENTIFIEDBY'Password123!';GRANTALLPRIVILEGESON*.*TO‘mysql_clickhouse’@‘%';2. 使用mysql引擎创建一个clickhouse的外部表存在一个mysql的数据库:host:......
  • Debezium日常分享系列之:Oracle数据库系列文章之安装和设置
    Debezium日常分享系列之:Oracle数据库系列文章之安装和设置一、什么是Oracle二、安装Oracle三、配置Oracle1.配置Oracle:归档日志2.配置Oracle:重做日志3.配置Oracle:补充日志记录4.配置Oracle:用户设置四、总结这篇文章是由3部分组成的系列文章的一部分,该系列文章探讨如何使用......
  • PostgreSQL数据库从入门到精通系列之五:深入理解lsn_proc、lsn_commit、lsn、txId、ts_
    PostgreSQL数据库从入门到精通系列之五:深入理解lsn_proc、lsn_commit、lsn、txId、ts_usec一、深入理解lsn_proc二、深入理解lsn_commit三、深入理解lsn四、深入理解txId五、深入理解ts_usec一、深入理解lsn_proc在PostgreSQL中,lsn_proc是一个内置函数,用于将逻辑日志位置(LSN)转换......
  • PostgreSQL数据库从入门到精通系列之六:深入理解逻辑复制槽,创建逻辑复制槽,删除逻辑复制
    PostgreSQL数据库从入门到精通系列之六:深入理解逻辑复制槽,创建逻辑复制槽,删除逻辑复制槽一、逻辑复制槽二、创建逻辑复制槽三、删除逻辑复制槽一、逻辑复制槽在PostgreSQL中,逻辑复制槽是一种用于实现逻辑复制的功能。逻辑复制槽允许将源数据库的更改流式传输到目标数据库,并使目标......
  • Mysql数据库系列之:深入理解tinyint(n)
    Mysql数据库系列之:深入理解tinyintn一、深入理解tinyint(n)二、创建包含tinyint类型字段的表三、扩展一、深入理解tinyint(n)对于MySQL中的tinyint列,"(n)"没有任何实际意义。在MySQL中,tinyint的宽度始终为1字节,所以在定义表时指定tinyint(n)与tinyint相同。在MySQL中,tinyint字段......
  • NoSQL 非关系型数据库
    NoSQL非关系型数据库NotOnlySQL(不仅仅是SQL)NoSQL用于超大规模数据的存储.NoSQL数据库分类构建高性能性和伸缩性,代价是查询灵活性差规模较小,访问模式未知的小项目用SQL大型项目,规模很大,需要关系查询,推荐SQL小项目不推荐使用NoSQL......