哈啰,各位小伙伴,这里是每天进步一点点的花栗鼠小K
“转眼研究生余额不到30天了,回顾这两年来的研究生生活,简直精彩到了极致,两年时间比大学四年都丰富。不过玩归玩的,在学业上咱也没落下。犹记导师第一次组会,要求我们每人找一个 NoSQL
数据库研究透,第一次听到这个名词时,我还有点懵逼,于是就迷迷糊糊地挑选了 Neo4j
作为我要研究的数据库。”
呐,接下来呢,小K将带领大家一步步去了解、认识什么是 Neo4j
开始之前,照例先科普,什么是 NoSQL
NoSQL
,指的是非关系型的数据库。NoSQL
有时也称作Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称,具有非关系型、分布式、不提供ACID的数据库设计模式等特征
NoSQL
用于超大规模数据的存储。像 Google 或 Facebook 每天为用户收集万亿比特的数据。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
非关系型数据库和关系型数据库在性能的区别,可以用一张表来描述
RDBMS |
NoSQL |
---|---|
高度组织化结构化数据(SQL ) |
不仅仅是SQL |
结构化查询语言- 数据操纵语言,数据定义语言 | 没有声明性查询语言,没有预定义的模式 |
数据和关系都存储在单独的表中。 | 键-值对存储,列存储,文档存储,图数据库 |
严格的一致性 | 最终一致性,而非ACID属性 |
基础事务 | 满足 CAP 定理 |
具有高性能,高可用性和可伸缩性 |
NoSQL
和 SQL
的应用上的区别,可以概括如下
SQL
数据库适合那些需求确定和对数据完整性要求严格的项目。NoSQL
数据库适用于那些对速度和可扩展性比较看重的那些不相关的,不确定和不断发展的需求。简单来说就是:
SQL
是精确的。 它最适合于具有精确标准的定义明确的项目。典型的使用场景是在线商店和银行系统。NoSQL
是多变的。 它最适合于具有不确定需求的数据。典型的使用场景是社交网络,客户管理和网络分析系统。
在理解了上述理论的基础上,我们开始进入正题
01
—
什么是Neo4j
Neo4j
是一个世界领先的开源的、无 schema
、没有 SQL
的图形数据库,是一个高性能的 NoSQL
图形数据库,在2020年10月份的DB-Engines NoSQL排行榜中位列第八,在图数据库中位列首位,热度还在持续上升中。Neo
技术是由Java语言完全开发的,它将结构化数据存储在网络上而不是表中。
02
—
为什么需要图数据库
简单来说,图数据库能够并且主要用于存储多元连接数据(multiple connection data)。
如果我们使用 RDBMS
数据库来存储多元连接的数据,那么它们不能提供用于遍历大量数据的适当性能。在这些情况下,图数据库提高了应用程序性能。
比如,下面这个 Google+
的例子:
黄色圆圈表示 Google plus
的个人应用资料,角色 A
连接到两个圈子:家庭圈(B,C,D
)和朋友圈(X,Y
)
进入角色 B
,又会有如下联系:
像这样,这些应用程序包含大量的结构化,半结构化和非结构化的连接数据。在 RDBMS
数据库中表示这种非结构化连接数据并不容易。
如果我们在 RDBMS
数据库中存储这种多元连接数据,那么检索或遍历是非常困难和缓慢的,所以要表示或存储这种多元连接数据,我们应该选择一个图数据库。
如今,大多数社交网络应用程序(如 Facebook,Google +,LinkedIn,Twitter,Yamme
等)和视频托管应用程序(如 Google YouTube,Flickr,Yahoo Video
等)都在使用多元连接数据,这在一定程度上促进了图数据库的发展。
03
—
Neo4j的特点
-
Neo4j
的特点 -
Neo4j CQL
语言就像是复杂化的SQL
语言 -
遵循属性图数据模型 -
包含一个用于执行 CQL
命令的UI
界面:Neo4j
数据浏览器 -
支持完整的 ACID
规则 -
采用原生图形库与本地 GPE
(图形处理引擎) -
提供了 REST API
,能被任何编程语言(如Java,python,Scala
等)访问 -
提供了可以通过任何 UI MVC
框架(如Node JS
)访问的Java
脚本 -
Neo4j
的优势 -
很容易表示连接的数据 -
检索、遍历、导航多元连接数据非常容易和快速 -
非常容易地表示半结构化数据 -
Neo4j CQL
有人性化的可读格式,非常容易学习 -
使用简单而强大的数据模型 -
很容易检索它的相邻节点或关系细节没有连接或索引
04
—
Neo4j的模型
Neo4j
使用属性图数据模型,依照该模型来存储和管理其数据。
-
属性图模型的规则
属性图模型中,关系是定向的。如果创建没有方向的关系,将抛出错误消息。So,在
Neo4j
中,创建关系时,一定要指明方向。Neo4j
图数据库将其所有数据存储在节点和关系中。我们不需要任何额外的RDBMS
数据库或NoSQL
数据库来存储Neo4j
数据库数据。它以图形的形式存储其数据的本机格式。 -
表示节点、关系和属性中的数据 -
节点和关系都包含属性 -
关系连接节点 -
属性是键值对 -
节点用圆圈表示,关系用方向键表示 -
关系具有方向:单边和双边 -
每个关系包含“开始节点”和“结束节点” -
图数据库数据模型的主要组件
-
节点 -
关系 -
属性
看一个简单的属性图的例子
使用圆圈表示节点。使用箭头的关系。关系是有方向性的。可以用 Properties
(键值对)来表示 Node
的数据,比如圆圈中的数字,在实际语句中就是{ ID:number
}
05
—
图形理论基础
图形是一组节点和连接这些节点的关系。图形以属性的形式将数据存储在节点和关系中。属性是用于表示数据的键值对。
以 Google plus
为例
最简单的图:单个节点
这个节点不包含任何属性
这里使用键值对,添加一些属性。
两个节点构成的图

在两个节点之间创建一个“Follows”关系
稍微复杂的图
这里节点用关系连接。关系是单向或双向的。
-
从 PQR
到XYZ
的关系是单向关系。 -
从 ABC
到PQR
的关系是双向关系。
最后可能处理这样的图(头皮发麻)
06
—
构建模块
Neo4j
图数据库主要有以下构建块:节点、属性、关系、标签、数据浏览器
-
节点
节点是图表的基本单位。它包含具有键值对的属性,如下所示
这里Node Name =“Employee”,它包含一组属性作为键值对
-
属性
属性是用于描述图节点和关系的键值对
Key =值
其中Key是一个字符串
值可以通过使用任何Neo4j数据类型来表示
-
关系
像节点一样,关系也可以包含属性作为键值对
-
标签
Label将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。我们可以为现有节点或关系创建新标签。我们可以从现有节点或关系中删除现有标签。
上图中,我们可以观察到有两个节点。
左侧节点都有一个标签:“Minister”,而右侧节点都有一个标签:“Monarch”。
这两个节点之间的关系,也有一个标签:“follows”
-
Neo4j
数据浏览器一旦我们安装
Neo4j
,我们可以访问Neo4j
数据浏览器使用以下URL
http://localhost:7474/browser/
Neo4j
数据浏览器用于执行CQL
命令并查看输出输出。这里我们需要在美元提示符处执行所有
CQL
命令:“$”,然后单击“执行”按钮运行命令。使用“VI视图”按钮以图形格式查看结果。
使用“网格视图”按钮在网格视图中查看结果。下图在“网格视图”格式中显示相同的结果。
当我们使用“网格视图”查看我们的查询结果时,我们可以将它们导出为两种不同格式的文件。
单击“导出
CSV
”按钮以csv
文件格式导出结果点击“导出
JSON
”按钮导出JSON
文件格式的结果但是,如果我们使用“UI视图”查看我们的查询结果,我们可以将它们导出到一个文件,只有一种不同的格式:
JSON
。
07
—
应用场景
-
欺诈检测与分析
通过图分析可以清楚地知道洗钱网络及相关嫌疑,例如对用户所使用的账号、发生交易时的
IP
地址、MAC
地址、手机IMEI
号等进行关联分析。 -
推荐引擎和产品推荐系统
由图支持的推荐引擎通过实时利用大量连接来帮助公司个性化产品,内容和服务。
-
社交媒体和社交网络图
使用图形数据库为社交网络应用程序提供支持时,可以轻松利用社交关系或根据活动推断关系。
-
身份和访问管理
使用图形数据库进行身份和访问管理时,可以快速有效地跟踪用户,资产,关系和授权。
-
零售
Neo4j
支持实时产品推荐引擎,客户体验个性化以及零售商的供应链管理。 -
知识图
知识图可确保搜索结果在上下文上与您的需求相关,但这仅仅是开始
08
—
总结
本篇是小K在学习 Neo4j
的过程中总结的一些资料,是对 Neo4j
整体情况的概述,算是入门的一些基础知识。接下来将会由浅入深逐步带领大家领略 Neo4j
的惊艳之处。
喜欢的小伙伴,别忘了点赞收藏呦
作者 花栗鼠小K
编辑 一口栗子
原文始发于微信公众号(六只栗子):Neo4j:相遇在数据库之海
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/88719.html