图数据库Neo4j学习一——基本介绍

news2024/11/25 11:07:58

文章目录

  • 1各类数据库基本概念
    • 1.1关系型数据库(SQL)
    • 1.2非关系型数据库(NoSQL)
    • 1.3图数据库
      • 1.3.1图数据库特点
      • 1.3.2图数据库应用场景
  • 2图数据库基本概念
    • 2.1用户访问菜单
    • 2.2节点(用户、角色、菜单)
    • 2.3关系(拥有角色、可以访问)
    • 2.4属性(节点/关系的属性)
    • 2.5呈现效果(用户-角色-菜单)
  • 3Neo4j开发工具
  • 4Neo4J下载安装
    • 4.1安装JDK8/11
    • 4.1Neo4j Browser(浏览版)

1各类数据库基本概念

1.1关系型数据库(SQL)

关系型数据库是一种基于关系模型的数据库,它使用表格来存储和管理数据。每个表格都是由一组组成,列表示数据的属性,行表示数据的实例。关系型数据库通常使用 SQL(Structured Query Language)来查询和管理数据。简单一点就是,你能把数据整理成表格的形式,这样的表格形式的数据,就可以称之为关系型数据。最常见的就是我们excel里面的表格,或者word里面的表格
在这里插入图片描述
在这里插入图片描述
此类数据库都是使用SQL语句来进行管理,例如

select * from userinfo where name = '张三'

常见的关系型数据库有:

@Getter
@AllArgsConstructor
public enum DbType {
    MYSQL("mysql", "MySql数据库"),
    MARIADB("mariadb", "MariaDB数据库"),
    ORACLE("oracle", "Oracle11g及以下数据库(高版本推荐使用ORACLE_NEW)"),
    ORACLE_12C("oracle12c", "Oracle12c+数据库"),
    DB2("db2", "DB2数据库"),
    H2("h2", "H2数据库"),
    HSQL("hsql", "HSQL数据库"),
    SQLITE("sqlite", "SQLite数据库"),
    POSTGRE_SQL("postgresql", "Postgre数据库"),
    SQL_SERVER2005("sqlserver2005", "SQLServer2005数据库"),
    SQL_SERVER("sqlserver", "SQLServer数据库"),
    DM("dm", "达梦数据库"),
    XU_GU("xugu", "虚谷数据库"),
    KINGBASE_ES("kingbasees", "人大金仓数据库"),
    PHOENIX("phoenix", "Phoenix HBase数据库"),
    GAUSS("zenith", "Gauss 数据库"),
    CLICK_HOUSE("clickhouse", "clickhouse 数据库"),
    GBASE("gbase", "南大通用(华库)数据库"),
    GBASEDBT("gbasedbt", "南大通用数据库"),
    OSCAR("oscar", "神通数据库"),
    SYBASE("sybase", "Sybase ASE 数据库"),
    OCEAN_BASE("oceanbase", "OceanBase 数据库"),
    FIREBIRD("Firebird", "Firebird 数据库"),
    HIGH_GO("highgo", "瀚高数据库"),
    CUBRID("cubrid", "CUBRID数据库"),
    GOLDILOCKS("goldilocks", "GOLDILOCKS数据库"),
    CSIIDB("csiidb", "CSIIDB数据库"),
    SAP_HANA("hana", "SAP_HANA数据库"),
    IMPALA("impala", "impala数据库"),
    OTHER("other", "其他数据库");
}

尽管关系型数据库具有很多优点,例如数据结构清晰、数据一致性高、支持 SQL 等,但是也存在一些缺陷,以下是一些常见的缺陷:

  1. 不适合大数据处理:关系型数据库在处理大规模数据时效率较低,因为它们需要进行多次 JOIN 操作来查询数据,这会导致查询速度变慢。此外,关系型数据库的存储结构也不适合存储非结构化数据,例如图像、视频等。
  2. 难以扩展:由于关系型数据库的设计初衷是为了处理小规模数据,因此它们的扩展性较差。当需要处理更大规模的数据时,需要使用分布式数据库或者 NoSQL 数据库来解决扩展性问题。
  3. 繁琐的数据模型设计:关系型数据库需要进行严格的数据模型设计,包括表结构、列定义、键定义等,这需要一定的专业知识和经验。如果设计不当,可能会导致数据冗余、数据不一致等问题。
  4. 高并发性能问题:在高并发的情况下,关系型数据库的性能可能会受到影响。由于关系型数据库使用锁机制来保证数据的一致性,因此在并发访问量较大的情况下,可能会出现死锁、阻塞等问题。

随着大数据、云计算、物联网等新兴技术的发展,NoSQL 数据库和分布式数据库等新型数据库也逐渐崭露头角,成为了关系型数据库的有力补充。

1.2非关系型数据库(NoSQL)

非关系型数据库(NoSQL)相对于传统的关系型数据库(SQL)具有以下优点,有助于解决关系型数据库的一些短板:

  1. 可扩展性:NoSQL 数据库可以通过分布式部署来实现水平扩展,可以轻松地处理大规模数据和高并发请求。
  2. 高性能:由于 NoSQL 数据库采用了不同的数据结构和查询方式,因此在某些场景下具有更高的查询速度和吞吐量,例如在处理大量非结构化数据时。
  3. 弱一致性:NoSQL 数据库通常采用弱一致性模型,即在不同节点之间可能存在数据不一致的情况,但是可以通过数据复制和容错机制来保证数据的可靠性和可用性。
  4. 支持多种数据类型:NoSQL 数据库不仅可以存储结构化数据,还可以存储半结构化或非结构化数据,例如文档、键值对、图形数据等。

灵活的数据模型设计:NoSQL 数据库不需要遵循严格的表结构和键值关系,可以根据具体应用场景进行灵活的数据模型设计和调整,更加符合实际的业务需求。

常见的 NoSQL 数据库包括以下几种:

  1. 文档型数据库:文档型数据库存储的数据是类似于 JSON 格式的半结构化数据,每个文档可以有不同的结构和字段,更加灵活。常用的文档型数据库包括 MongoDB、Couchbase 等。适用于存储半结构化数据,例如日志、用户资料、文本等。
  2. 键值型数据库:键值型数据库存储的数据是以键值对的形式进行存储和访问的,可以快速地进行读写操作。常用的键值型数据库包括 Redis、Amazon DynamoDB、Riak 等。适用于存储缓存、会话、排行榜、计数器等数据。
  3. 列族型数据库:列族型数据库采用列族的方式来存储数据,每个列族包含多个列,可以支持动态地添加和删除列,适用于存储大规模的结构化数据。常用的列族型数据库包括 HBase、Cassandra 等。
  4. 图形数据库:图形数据库以图形结构的方式存储数据,可以快速地进行复杂的图形遍历和查询操作,适用于存储社交网络、推荐系统、知识图谱等数据。常用的图形数据库包括 Neo4j、OrientDB 等。

在选择 NoSQL 数据库时,需要根据具体业务需求和数据特点来进行选择。例如,如果需要存储半结构化的数据,可以选择文档型数据库;如果需要快速地读写键值对,可以选择键值型数据库;如果需要存储大规模的结构化数据,可以选择列族型数据库;如果需要存储复杂的图形数据,可以选择图形数据库。

1.3图数据库

1.3.1图数据库特点

图数据库是一种专门用于存储图形数据的 NoSQL 数据库。与传统的关系型数据库和其他 NoSQL 数据库不同,图数据库利用图形数据模型来存储和管理数据。图形数据模型由节点和边组成,节点代表实体,边代表实体之间的关系。例如,在社交网络中,用户可以表示为节点,朋友关系可以表示为边。

图数据库具有以下特点:

  1. 灵活的数据模型:图数据库采用图形数据模型,可以灵活地存储和表示各种类型的数据,例如社交网络、地图、知识图谱等。
  2. 快速的图形遍历:图数据库可以快速地遍历图形数据,通过节点和边之间的关系来发现数据之间的联系和模式,可以用于实现推荐系统、路径分析等功能。
  3. 高性能的查询和事务处理:图数据库支持高效的查询和事务处理,可以处理大规模的图形数据和高并发请求,具有较高的性能和可扩展性。
  4. 可视化和交互性:图数据库可以通过图形界面来可视化和交互数据,使用户可以更加直观地理解和操作数据。例如如下图所示。在这里插入图片描述

1.3.2图数据库应用场景

图数据库在以下领域有广泛的应用场景:

  1. 社交网络:图数据库可以用于存储和分析社交网络数据,例如用户、好友、关注、分享等,可以用于实现社交网络分析、推荐系统和个性化推荐等功能。
  2. 推荐系统:图数据库可以用于存储和分析用户行为数据,例如浏览记录、购买记录、评分等,可以用于实现个性化推荐、商品推荐和广告定向投放等功能。
  3. 知识图谱:图数据库可以用于存储和管理知识图谱数据,例如实体、属性、关系等,可以用于实现智能问答、语义搜索和自然语言处理等功能。
  4. 网络安全:图数据库可以用于存储和分析网络安全数据,例如攻击者、受害者、攻击路径等,可以用于实现威胁情报分析、安全事件管理和风险评估等功能。
  5. 生物信息学:图数据库可以用于存储和分析生物信息学数据,例如基因、蛋白质、代谢物等,可以用于实现基因组学、药物研发和生物信息学研究等功能。

2图数据库基本概念

2.1用户访问菜单

用户访问菜单是我们目前所有的软件中最常见的一个功能了,本文将基于用户访问菜单来介绍这个图数据库的概念。
在用户访问菜单中,我们的信息主体有如下三个

  1. 用户
  2. 角色
  3. 菜单

信息关联有如下两个

  1. 用户-角色
  2. 角色-菜单

张三这个用户登录系统以后,能访问那些菜单?

  1. 张三(用户)根据关联关系《用户-角色》找到张三所拥有的《角色》(审计员)
  2. 实体审计员(角色)根据关联关系《角色-菜单》找到审计员所拥有的菜单访问权限(查看操作记录)

本文将使用neo4j来开始介绍图数据库。
图数据库的数据模型中,我们将信息分为三类,分别为节点关系属性
本文为了简单介绍,使用一个用户访问菜单的功能来进行介绍。

2.2节点(用户、角色、菜单)

将诸如人物、电影、书籍或其他具体事物称之为节点,那么在我们上面的案例中
那么用户、角色、菜单,都是节点。
用户节点
在这里插入图片描述
角色节点
在这里插入图片描述
菜单节点
在这里插入图片描述
节点是图中的实体。

  1. 节点可以用labels标记,代表它们在您的域中的不同角色(例如,Person)。
  2. 节点可以包含任意数量的键值对或属性(例如,name)。
  3. 节点标签还可以将元数据(例如索引或约束信息)附加到某些节点

2.3关系(拥有角色、可以访问)

关系就是连接节点的概念、事件或事物。在关系数据库中,这些关系通常存储在具有链接字段的数据库行中。简单一点说就是,一条线把两个节点连起来,这条线就是关系。
如下所示,例如小芳和配置员、业务员中间被一根有向箭头连起来了,这个有向箭头就是关系,这个关系叫做拥有角色。
在这里插入图片描述
同理角色和菜单,角色可以看到访问那些菜单的这个箭头《可以访问》,就是关系
在这里插入图片描述
关系在两个节点实体(用户——拥有角色——> 角色)之间提供定向的命名连接。

  1. 关系总是有方向、类型、开始节点和结束节点,并且它们可以像节点一样有属性。
  2. 在不牺牲性能的情况下,节点可以具有任意数量或类型的关系。
  3. 尽管关系总是定向的,但它们可以在任何方向上有效地导航。

2.4属性(节点/关系的属性)

节点和边都可以拥有可搜索的属性。例如,如果你的节点代表人,他们可能拥有名字、性别、出生日期、身高等属性。而边的属性可能描述了两个人之间的关系何时建立,见面的情况或关系的性质。
例如我们在Neo4J中,查看《审计员》这个节点,我们发现它有三个属性,有id,roleName、roleDes。
在这里插入图片描述
同理,当我们查看《可以访问》这个关系时,我们也能发现它有两个属性,分别是id和name。
在这里插入图片描述

2.5呈现效果(用户-角色-菜单)

这是我们用neo4j构建的一个图谱关系,我们可以非常清晰的看到每个用户所拥有的角色,以及每个角色所能访问的菜单。
在这里插入图片描述
对于关系型数据库有专门的SQL语言来帮我对数据进行操作,同样的图数据库也会有专门的语言来帮我们对数据库进行操作。
如下的语言是cypher编写,用来帮助我们对数据进行操作,例如我们现在想查询小红这个用户可以访问那些菜单,那就是小红->角色->菜单的逻辑

MATCH (u:User{userName: '小红'})-[:USER_ROLE]->(r:Role)-[:ROLE_MENU]->(m:Menu)
RETURN u,r,m

在这里插入图片描述

3Neo4j开发工具

使用Neo4j进行开发,下面是一些我们常用的工具。本文中,我使用的就是Neo4j Browser和Cypher。

• Neo4j Desktop  — 用于使用 Neo4j 的本地开发环境,无论是使用本地数据库实例还是位于远程服务器上的数据库。免费下载包括 Neo4j 企业版许可证。
Neo4j Browser  — 在线浏览器界面,用于查询和查看数据库中的数据。使用 Cypher 查询语言的基本可视化功能。
• Neo4j Operations Manager (NOM) — 一种基于 UI 的工具,使数据库管理员能够监视、管理和操作企业版中的所有 Neo4j 数据库管理系统。
视频系列:NOM Bytes介绍了该产品并提供了一些实用技巧。有关详细信息,
请参阅Neo4j Ops Manager文档。
• Data Impourer  — 一种无代码工具,允许您从平面文件 (.csv和.tsv) 加载数据,定义图形模型,将数据映射到它,并将其导入 Neo4j 数据库。
• Neo4j Bloom  — 面向业务用户的可视化工具,无需任何代码或编程技能即可查看和分析数据。有关详细信息,请参阅文档。
Cypher是一种开放数据查询语言,基于openCypher 计划。它是用于属性图的最成熟和直观的查询语言
• Neo4j 驱动程序 ——官方支持的驱动程序和社区驱动程序。
• Neo4j 连接器 — 一组连接器,用于将您的常规工作环境与 Neo4j 集成。
• GraphQL Library是一个灵活的、低代码的开源 JavaScript 库,通过利用连接数据的力量,可以为跨平台和移动应用程序快速开发 API。
• OGM  — Neo4j 的对象图映射库。

4Neo4J下载安装

4.1安装JDK8/11

你需要安装JDK环境,4.0版本及以上需要JDK11。
在这里插入图片描述

4.1Neo4j Browser(浏览版)

本文中,选择windows社区版本的4.4.21。
下载地址:https://neo4j.com/download-center/
在这里插入图片描述

在这里插入图片描述
将下载的压缩包解压即可
在这里插入图片描述
cmd中,在bin目录下输入neo4j console即可启动neo4j。(快捷方式:电脑进入bin目录,在地址栏输入cmd)即可在该目录下打开cmd。
在这里插入图片描述

在这里插入图片描述
浏览器访问上述地址,http://localhost:7474/
默认用户名neo4j,密码neo4j
在这里插入图片描述
至此完毕!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态规划:从入门到入土系列(一)

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 前言 本篇…

高级web前端开发工程师岗位的具体内容概述

高级web前端开发工程师岗位的具体内容概述1 职责: 1、负责前端页面开发和维护,并根据需求优化产品性能、用户体验、交互效果及各种主流浏览器以及各类型移动客户端的兼容适配工作; 2、配合产品经理和UI设计师,通过各种前端技术手段&#xf…

[MySQL]MySQL用户管理

[MySQL]MySQL用户管理 文章目录 [MySQL]MySQL用户管理1. 用户的概念2. 用户信息3. 创建用户4. 修改用户密码5. 删除用户6. MySQL中的权限7. 给用户授权8. 回收权限 1. 用户的概念 MySQL中的用户分为超级用户(root)和普通用户。超级用户的操作是不受权限…

IDEA对JPA@Query查询的文本块支持

IDEA对JPAQuery查询的文本块支持 参考网址 JPA查询方式:方法命名规则、Query查询、结果集类型转化器 原先JPA的Query注解查询存在的问题 编写SQL时需要在value的""内,使用换行时会拼接字符串,观感极差如果SQL中使用到了单引号&…

第三十二章:MySQL事务日志

第三十二章:MySQL事务日志 32.1:概述 事物有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢? 事物的隔离性有锁机制实现。而事物的原子性、一致性和持久性由事物的redo日志和undo日志来…

基于深度学习淡水鱼体重智能识别模型研究

工作原理为:首先对大众淡水鱼图片进行数据清洗并做标签分类,之后基于残差网络ResNet50模型进行有监督的分类识别训练,获取识别模型。其次通过搭建回归模型设计出体重模型,对每一类淡水鱼分别拟合出对应的回归方程,将获…

【基础算法】——双指针算法

文章目录 一、算法原理二、算法实战1. 力扣283 移动零2. 力扣1089 复写零3. 力扣15 三数之和4. 力扣18 四数之和 三、总结 一、算法原理 双指针算法是指在遍历对象的过程中不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(…

机器学习实战11-基于K-means算法的文本聚类分析,生成文本聚类后的文件

大家好,我是微学AI,今天给大家介绍机器学习实战11-基于K-means算法的文本聚类分析,生成文本聚类后的文件。文本聚类分析是NLP领域的一个核心任务,通过将相似的文本样本分组,可以帮助我们发现隐藏在文本数据中的模式和结…

Docker概述 镜像-容器基本操作

Docker 概述 Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。 Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足…

Redis应用(7)——Redis的项目应用(六):布隆过滤器---白名单 ----> Reids的问题,雪崩/ 击穿 / 穿透【重要】 布隆过滤器

目录 引出Redis的问题缓存雪崩:key不存在缓存击穿:热点key缓存穿透【重要】 穿透的解决方案:布隆过滤器问题:如何存储100w纯数字布隆过滤器项目应用:布隆过滤器≈白名单htool工具包案例 Redis项目应用(六&a…

OpenCV4图像处理-图像交互式分割-GrabCut

本文将实现一个与人(鼠标)交互从而分割背景的程序。 GrabCut 1.理论介绍2. 鼠标交互3. GrabCut 1.理论介绍 用户指定前景的大体区域,剩下为背景区域,还可以明确指出某些地方为前景或者背景,GrabCut算法采用分段迭代的…

蓝桥杯专题-真题版含答案-【星系炸弹】【隔行变色】【手链样式】【生日蜡烛】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

Python爬虫-进入浏览器控制台就出现无限debugger,怎么解决?

前言 本文是该专栏的第53篇,后面会持续分享python爬虫干货知识,记得关注。 对于控制台出现无限debugger的情况,笔者之前在“JS逆向-常见反调试之“无限Debugger”,怎么解决?”里面有详细介绍过。而本文,针对控制台调试出现无限debugger的另一种情况,笔者来详细介绍该问…

C语言的自定义类型(结构体、枚举、联合体)

“虽然前方拥堵,但您仍在最优路线上” ——高德地图 文章目录 一、结构体类型 1.结构体类型的定义 2.结构体变量的初始化 3.结构体类型变量的定义 4.结构体内存对齐 5.结构体实现位段 二、枚举类型 三、联合体类型 大家好,我是纪宁。 这篇文章主…

【数据结构】--八大排序算法【完整版】

匠心制作,后续有问题会加以修改的 ,全文均是自己写的,几张图有参考网络 ———————————————— 目录 一、直接插入排序 二、希尔排序(直接插入排序的改良版) 三、选择排序(直接选择排序) 四、堆排序 …

通过YOLOV5实现:王者荣耀百里守约自瞄

前期提要: 本文章仅供技术讨论使用。 关于如何通过YOLOV5去检测到王者中的敌方人物,在网上有很多相关的文章和教学视频我在这里就不过多的阐述,本篇文章主要讲的是在实现中比较难处理的一些技术点:如何获取高刷新率的手机屏幕、…

Hive 调优集锦(1)

一、前言 1.1 概念 Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行,所以说 Hive 是基于Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在HDFS 中的数据进行分析和管理。 1.2 架…

贤鱼的刷题日常(数据结构链表学习)-1748:约瑟夫问题--题目详解

🏆今日学习目标: 🍀例题讲解1748:约瑟夫问题 ✅创作者:贤鱼 ⏰预计时间:15分钟 🎉个人主页:贤鱼的个人主页 🔥专栏系列:c 🍁贤鱼的个人社区,欢迎你…

NLP实战8:图解 Transformer笔记

目录 1.Transformer宏观结构 2.Transformer结构细节 2.1输入 2.2编码部分 2.3解码部分 2.4多头注意力机制 2.5线性层和softmax 2.6 损失函数 3.参考代码 🍨 本文为[🔗365天深度学习训练营]内部限免文章(版权归 *K同学啊* 所有&#…

Okhttp-LoggingInterceptor的简单使用

概述 Okhttp除了提供强大的get,post网络请求外,还包含请求日志的拦截器,可以监视,重写,重试调用请求。 简单使用 我们在构造OkHttpClient时,通过addInterceptor()方法添加我们需要的过滤器。 object OkhttpUtils{……