提交 1bc3732d 编写于 作者: 幻灰龙's avatar 幻灰龙

Merge branch 'master' into 'master'

更新目录结构和初步内容

See merge request !1
.venv/
\ No newline at end of file
# skill_tree_neo4j
Neo4J 图数据库技能树
本项目是 [CSDN 技能森林](https://codechina.csdn.net/csdn/skill_tree) 的 Neo4j 专项开放编辑仓库。
# skill_tree_pg
本项目是 [CSDN 技能森林](https://codechina.csdn.net/csdn/skill_tree) 的 Neo4J 专项开放编辑仓库。
本仓库面向学习者,以树状结构管理 Neo4J 技能的知识点。
本仓库面向学习者,以树状结构管理 Neo4j 技能的知识点。
为了操作方便,在仓库中有一组微型的 Python 工具脚本,用于加工和维护技能树,一般情况下不用关注。对于项目贡献者,
主要维护的是技能树的目录结构和相关习题
......
{
"node_id": "neo4j-0261ccb903994df281a2ec606b5d8c9e",
"keywords": [],
"children": [
{
"什么是图数据库": {
"keywords": [
"图数据库"
],
"children": [
{
"图论": {
"keywords": [
"节点",
"边",
"关系"
],
"children": []
}
},
{
"RDF": {
"keywords": [],
"children": []
}
},
{
"属性图": {
"keywords": [],
"children": []
}
},
{
"原生图": {
"keywords": [
],
"children": []
}
}
]
},
"什么时候需要图数据库": {
"keywords": [
"图数据库"
],
"children": []
},
"Neo4J图数据库概览": {
"keywords": [
"图数据库"
],
"children": []
}
}
],
"export": [
"helloworld.md"
]
}
\ No newline at end of file
# Hello World
Neo4J 可以通过 shell 直接写查询语句,也可以在 Java、Python 等语言中创建连接查询,以下哪个查询<span style="color:red">不是</span>图数据库 Neo4J 的查询?
## 答案
```sql
SELECT name FROM Person
LEFT JOIN Person_Department
ON Person.Id = Person_Department.PersonId
LEFT JOIN Department
ON Department.Id = Person_Department.DepartmentId
WHERE Department.name = "IT Department"
```
## 选项
### MySQL查询
```sql
MATCH (p:Person)-[:WORKS_AT]->(d:Dept)
WHERE d.name = "IT Department"
RETURN p.name
```
### 使用JDBC查询Neo4J
```java
Connection con = DriverManager.getConnection("jdbc:neo4j://localhost:7474/");
String query =
"MATCH (:Person {name:{1}})-[:EMPLOYEE]-(d:Department) RETURN d.name as dept";
try (PreparedStatement stmt = con.prepareStatement(QUERY)) {
stmt.setString(1,"John");
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
String department = rs.getString("dept");
....
}
}
```
### 在Python中查询
```python
from neo4j import GraphDatabase
class HelloWorldExample:
def __init__(self, uri, user, password):
self.driver = GraphDatabase.driver(uri, auth=(user, password))
def close(self):
self.driver.close()
def print_greeting(self, message):
with self.driver.session() as session:
greeting = session.write_transaction(self._create_and_return_greeting, message)
print(greeting)
@staticmethod
def _create_and_return_greeting(tx, message):
result = tx.run("CREATE (a:Greeting) "
"SET a.message = $message "
"RETURN a.message + ', from node ' + id(a)", message=message)
return result.single()[0]
if __name__ == "__main__":
greeter = HelloWorldExample("bolt://localhost:7687", "neo4j", "password")
greeter.print_greeting("hello, world")
greeter.close()
```
\ No newline at end of file
{
"node_id": "neo4j-0ee8cb8ccd6f4a59bc20f9ccbf7d627e",
"keywords": [],
"children": [],
"export": []
}
\ No newline at end of file
{
"node_id": "neo4j-0261ccb903994df281a2ec606b5d8c9e",
"keywords": ["数据库", "图数据库", "NoSQL"],
"children": [],
"export": [
"databases.json",
"graph.json"
]
}
\ No newline at end of file
{
"type": "code_options",
"author": "幻灰龙",
"source": "helloworld.md",
"author": "shiny",
"source": "databases.md",
"notebook_enable": false
}
\ No newline at end of file
# 数据库的分类
萌芽于20世纪60年代的数据库技术在刚刚兴起的十年并没有大行其道。70年代,市场只有很少的选择,且基本算法都基于传统的关系型数据库。而在过去短短的十年,信息世界快速发展,面临极其复杂、互联、动态、不断变化的数据洪流,数据库平台如雨后春笋般涌现,市场上的选择增加到 350 多个。
虽然可供我们选择的数据库产品琳琅满目,它们都可以划分到这几个分类当中。
请问哪一个是过去十多年发展最快的数据库类型?
## 答案
图数据库
## 选项
### A
关系型数据库
### B
文档数据库
### C
时序数据库
### D
图数据库
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "graph.md",
"notebook_enable": false
}
\ No newline at end of file
# 什么是图Graph
图(Graph)是指图数据结构,用顶点(Vertex或Node)来表示事物,用边(Edge或Relationship)来表示事物之间的关联关系,这样展示了事物和它们之间的关联。
节点Node:用来表示事物的实体:
- 节点可以用标签来标记,代表它们在你的业务领域中的不同角色。(例如,`Person`)。
- 节点可以保存任意数量的键值对或属性。(例如,`name`
- 节点标签还可以将元数据(例如索引或约束信息)附加到某些节点。
关系Relationship:提供了两个节点实体(例如,Person`LOVES`Person)之间的定向的、命名的连接。
- 关系总是有一个方向、一个类型、一个开始节点和一个结束节点,它们可以有属性,就像节点一样。
- 节点可以拥有任意数量或类型的关系,而不会牺牲性能。
- 虽然关系必须有方向,但它们可以在任何方向上导航。
任何东西都可以是图
如果图是一种抽象的数学工具,我们为什么要关心它们?
因为任何数据集都可以表示为图。任何结构或概念,无论多么简单或复杂,都可以分解为一组相互之间具有某种关系的组成部分。
请问,下列哪一个选项是图数据库里的“图”?
## 答案
网络终端的流量关系
## 选项
### A
手机里的照片
### B
Excel里展示的柱状图
### C
网络终端的流量关系
\ No newline at end of file
{
"node_id": "neo4j-0ee8cb8ccd6f4a59bc20f9ccbf7d627e",
"keywords": ["图数据结构", "七桥问题", "一笔画", "关联关系", "原生图存储", "属性图", "顶点", "节点", "边", "关系"],
"children": [],
"export": [
"graphdatabase.json",
"usecases.json"
]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "graphdatabase.md",
"notebook_enable": false
}
\ No newline at end of file
# 什么是图数据库
我们生活在一个相互连接的世界中,大多数领域需要处理丰富的关联以了解真正发生的事情,通常事物之间的关联与事物本身一样重要。
图数据库解决了我们许多人每天都要面对的重大挑战。现代数据问题通常涉及与异构数据的多对多关系,这些关系需要:
- 导航深层层次结构,
- 找到事物之间的隐藏联系,以及
- 发现项目之间的相互关系。
无论是社交网络、支付网络还是交通路线网络,你都会发现一切都是相互关联的关系图。当我们要问关于现实世界的问题时,很多问题都是关于关系而不是关于单个数据元素的。
图数据库是一种非关系型数据库NoSQL,用来存储图数据结构和基于图模型的计算。图数据库从设计上实现简单快速地检索复杂层次结构。
图数据库底层存储机制可能各有不同,Neo4j使用原生图存储来保存数据和关系。
图数据库的查询语言跟SQL不同,Neo4j使用声明式查询语言Cypher,能够以一种容易理解的方式来遍历图。
问题:
请问以下哪一个不是图数据库的特点?
## 答案
图数据库只能用于OLAP系统
## 选项
### A
图数据库同时存储实体和关系
### B
图数据库在写入数据时保存关联关系
### C
图数据库只能用于OLAP系统
### D
图数据库可以用于OLTP系统
{
"type": "code_options",
"author": "shiny",
"source": "usecases.md",
"notebook_enable": false
}
\ No newline at end of file
# 什么时候应该使用图数据库
在设计软件系统时,我们可以通过提出以下问题,来分析是否需要图数据库或图数据平台:
1. 我们需要理解和处理事物之间的关系吗?
2. 事物之间有大量的自我关联吗?
3. 我们需要探索未知深度或隐藏的关系吗?
4. 我们需要发现事物之间的不同路径吗?
如果任何一个问题的答案是肯定的,那么你就应该考虑使用图数据平台来实现。
问题:
下列场景中不需要使用图数据库的是?
## 答案
需要查询固定关联的多个实体获得汇总分析
## 选项
### A
需要分析不同的购买行为模式来实现精准推荐
### B
需要处理实体之间大量的自我引用来实现社交网络分析
### C
需要查询固定关联的多个实体获得汇总分析
### D
需要探索多个不同事物之间的到达路径来实现行为预测
{
"node_id": "",
"keywords": ["Neo4j图数据平台", "OLTP", "OLAP", "融合数据库"],
"export": [
"neo4j.json"
]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "neo4j.md",
"notebook_enable": false
}
\ No newline at end of file
# Neo4j 图数据平台
**Neo4j** 是由 Neo4j, Inc. 开发的图数据库管理系统。Neo4j 具有原生图存储和符合ACID的事务特征,Neo4j 提供了开源“社区版”和包含热备和集群高可用扩展的企业版。
根据DB Engines的排名,Neo4j一直位于图数据库分类的第一名,图数据库同时也是十多年来增长最快的类别。
Neo4j, Inc. 成立于2007年,一直致力于图数据库的建设和推广。
Neo4j 1.0于2010年发布,Neo4j 是用Java和Scala实现的,提供事务性 HTTP 或通过二进制Bolt协议对数据库管理系统进行交互,同时可以用其他语言编写进行API访问。
截止2021年12月,Neo4j 最新版本是4.4。提供了完整的图数据平台能力。
- [Neo4j 图数据库](https://neo4j.com/developer/neo4j-database/):Neo4j 的核心图数据库,用于存储和检索关联数据。有两个版本 - 社区版和企业版。
- [Neo4j Desktop](https://neo4j.com/developer/neo4j-desktop/):管理 Neo4j 实例和应用的桌面程序,安装便捷,包含 Neo4j 企业版许可。
- [Neo4j Browser](https://neo4j.com/developer/neo4j-browser/):Neo4j 图数据库管理界面,用于查询和查看数据库中的数据。使用 Cypher 查询语言,具备图数据可视化功能。
- [Neo4j Bloom](https://neo4j.com/developer/neo4j-bloom/):面向业务用户的可视化工具,无需任何代码或编程技能即可查看和分析数据。
- [Neo4j AuraDB](https://neo4j.com/developer/aura-cloud-dbaas/):由 Neo4j 管理的云端Neo4j图数据库,开箱即用的DBaaS服务。现已推出面向开发者的免费版本。
- [图数据科学](https://neo4j.com/developer/graph-algorithms/):官方提供的一组库,用于使用 Neo4j 执行图算法,并针对企业工作负载和管道进行了优化。广泛应用于机器学习和人工智能场景。
![](https://dist.neo4j.com/wp-content/uploads/neo4j_graph_platform.jpg)
问题:
请问,Neo4j 图数据平台没有提供的功能是:
## 答案
提供存储图片的能力
## 选项
### A
以图数据结构的方式来存储数据和关系
### B
提供开源社区版和企业版两个版本
### C
可用于OLTP和OLAP场景
### D
可使用REST和Bolt对数据库进行交互
### E
提供存储图片的能力
### F
提供多种工具进行可视化
{
"node_id": "neo4j-a42252d5f8c24548bde127a385850a76",
"keywords": []
"keywords": ["图数据库", "Neo4j", "NoSQL", "图数据平台", "图问题"]
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j", "Neo4j 安装", "Neo4j 启动", "下载 Neo4j"],
"exports": ["neo4j-dist.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "neo4j-dist.md",
"notebook_enable": false
}
\ No newline at end of file
# Neo4j 版本一览和选择建议
Neo4j 提供了开源的社区版,同时也为有集群高可用和热备需求的企业提供了专门的企业版。
这两个版本以多种形式提供。主要包括:
- Neo4j AuraDB:于2021年11月正式发布的全托管云端Neo4j图数据库即服务,为开发者提供了免费层级。是开始尝试使用Neo4j的绝佳选择。
- Neo4j Sandbox:针对学习和探索需求提供的免配置Neo4j图数据库,同时提供预设的数据集和指导。官方的GraphAcademy基于Sandbox构建来提供培训实战练习。
- Neo4j Desktop:管理 Neo4j 实例和应用的桌面程序,内置 Neo4j 企业版许可,下载安装即可使用Neo4j图数据库,Neo4j Browser和Neo4j Bloom等,也可以安装扩展应用。
- Neo4j Docker:使用Docker镜像可以方便地与现有系统集成,并同时提供了自定义。
- Neo4j Server:以服务端形式的分发版本提供了最多的自定义选择,方便部署到生产环境。
问题:
请问,作为初学者,要开始使用Neo4j,更应该选择哪种分发版本而不让自己陷入环境配置等准备工作中?
## 答案
使用Neo4j AuraDB 免费层级
## 选项
### A
使用Neo4j Docker镜像
### B
使用Neo4j Server版并安装配置
### C
使用Neo4j AuraDB 免费层级
### D
使用Neo4j Sandbox沙箱
### E
使用Neo4j Desktop本地管理软件
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j新手", "Neo4j启动", "Neo4j查询"],
"export": ["hello-neo4j.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "hello-neo4j.md",
"notebook_enable": false
}
\ No newline at end of file
# 首次使用 Neo4j 图数据库
Neo4j AuraDB (https://neo4j.com/cloud/aura/) 是最新发布的云端全托管的Neo4j数据库即服务产品。现已面向开发者提供免费层级。作为初学者和首次使用Neo4j图数据库,推荐使用Neo4j AuraDB Free作为起点。免去下载和配置环境的烦恼。
同时,Neo4j AuraDB提供专业级和企业级的服务,支持自助服务和官方支持。
Neo4j AuraDB无论免费级还是专业级和企业级,都是基于Neo4j 企业版提供服务。
问题:
请问,开始使用Neo4j AuraDB的正确方式为:
## 答案
注册Neo4j AuraDB并创建数据库
## 选项
### A
注册Neo4j AuraDB并创建数据库
### B
下载Neo4j AuraDB到本地
### C
访问公有云提供商注册Neo4j AuraDB
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j创建数据库", "Neo4j启动"],
"export": ["start-neo4j.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "start-neo4j.md",
"notebook_enable": false
}
\ No newline at end of file
# 使用Neo4j AuraDB 创建并启动数据库
成功注册Neo4j AuraDB后,就可以登录到管理后台创建数据库了。
Neo4j AuraDB为每一个用户提供了一个免费级的企业版Neo4j数据库系统,同时提供了Neo4j Browser和Neo4j Bloom可以对数据库进行管理和探索。也可以通过自己喜欢的编程语言来访问数据库接口。
问题
请问,使用Neo4j AuraDB需要自己维护云端环境吗?
## 答案
不需要
## 选项
### A
需要
### B
不需要
{
"node_id": "",
"keywords": ["Neo4j Browser", "Neo4j 数据库管理", "Neo4j 查询"],
"export": ["neo4j-browser.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "neo4j-browser.md",
"notebook_enable": false
}
\ No newline at end of file
# 使用Neo4j Browser管理AuraDB
创建并启动好AuraDB数据库后,就可以通过Neo4j Browser来管理数据库了。
需要使用创建数据库时的密码来登录。
开始探索图数据吧。
问题
请问,关于Neo4j Browser不正确的是哪一个?
## 答案
可以通过Neo4j Browser来创建多个Neo4j AuraDB数据库
## 选项
### A
可以使用本地的Neo4j Browser来连接到Neo4j AuraDB
### B
可以通过Neo4j Browser来可视化图数据
### C
可以通过Neo4j Browser来查看数据库系统信息
### D
可以通过Neo4j Browser来查询数据
### E
可以通过Neo4j Browser来创建多个Neo4j AuraDB数据库
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j 查询语言", "Cypher", "Cypher QL"],
"export": ["cypher.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "cypher.md",
"notebook_enable": false
}
\ No newline at end of file
# Cypher 查询语言初探
Neo4j是图数据库,使用原生图数据保存实体和关系,跟关系型数据库不同,图的遍历无法方便地使用SQL来查询。
Neo4j提供了名为Cypher的查询语言。Cypher是声明式语言,专注于获取哪些数据和关系,数据库管理系统会处理如何获取这些信息。
![](https://dist.neo4j.com/wp-content/uploads/sample-cypher.png)
Cypher 是独一无二的,因为它提供了一种匹配模式和关系的视觉方式。Cypher 使用 ASCII 字符的语法,其中`(nodes)-[:ARE_CONNECTED_TO]->(otherNodes)`使用圆括号表示节点 `(nodes)``-[:ARROWS]->`关系。编写查询时,您可以通过数据绘制图形模式。
就像 Neo4j 本身一样,Cypher 是开源的! [openCypher 项目](http://opencypher.org/)提供了所有需要的规范。Cypher 得到了许多公司的支持,所有这些公司都从 Cypher 中受益。
拥有 AuraDB 数据库后,您可以在Neo4j Browser中的输入命令`:play cypher`开始学习 Cypher。
问题:
请问Cypher语言获取所有数据的命令是哪一个?
## 答案
`MATCH (n) RETURN n`
## 选项
### A
`MATCH (n) RETURN n`
### B
`SELECT * FROM neo4j`
### C
`RETURN *`
### D
`g.V()`
\ No newline at end of file
{
"node_id": "",
"keywords": []
}
\ No newline at end of file
{
"node_id": "neo4j-5e171793d38e49e784f544a9f80d09cb",
"keywords": []
"keywords": ["图数据库", "Neo4j", "Cypher", "Graph", "Graph Database"]
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j 查询语言", "Cypher", "图遍历", "查询语言"],
"export": ["more-cypher.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "more-cypher.md",
"notebook_enable": false
}
\ No newline at end of file
# 深入 Cypher 查询语言
我们已经知道,Neo4j 的属性图模型是由节点和关系组成的,它们也可能有与之关联的属性。然而,节点和关系是构建属性图模型中最有价值和最强大的部分 - 模式的简单组件。模式由节点和关系元素组成,可以表达简单或复杂的遍历和路径。
模式识别是大脑工作方式的基础。正因为如此,人类非常擅长使用模式(想想可视化图表甚至记忆匹配游戏)。Cypher 也很大程度上基于模式,旨在识别数据中这些模式的各种版本,使其成为用户学习的一种简单且合乎逻辑的语言。
在您阅读本指南时,您将看到 Cypher 代码中的注释,以帮助解释语法或查询正在做什么。Cypher 中的注释与许多编程语言中的相同。您可以通过`//`以斜线开头并在斜杠后放置文本来添加注释。就像在其他语言中一样,以两个正斜杠开头的行将意味着该行上的任何内容都将成为注释。
由于 Cypher 使用 ASCII-Art 来表示模式,我们需要一种视觉方式来表示上述模式的每个组件。我们知道属性图模型的主要组成部分是节点和关系。请记住,节点是图中的数据实体,您通常可以通过查找数据模型中的名词或对象来识别节点。在我们的示例中`Jennifer``Michael``Graphs`、 和`Neo4j`是我们的节点。
为了充分利用图数据库的强大功能,我们还需要表达节点之间的关系。关系在 Cypher 中使用箭头`-->``<--`两个节点之间表示。请注意语法在视觉表示中如何看起来像连接我们的节点的箭头和线。附加信息,例如节点如何连接(关系类型)以及与关系有关的任何属性,可以放在箭头内的方括号中。
我们已经讨论了如何为节点、关系和标签编写 Cypher。我们的属性图数据模型的最后一部分是用于属性的。请记住,属性是名称-值对,可为我们的节点和关系提供更多详细信息。
节点和关系构成了图形模式的构建块。这些构建块可以组合在一起来表达简单或复杂的模式。模式是图形最强大的功能。在 Cypher 中,它们可以写成一条连续的路径,也可以分成更小的模式并用逗号连接在一起。
```cypher
(p:Person {name: "Jennifer"})-[rel:LIKES]->(g:Technology {type: "Graphs"})
```
更多信息请访问:<https://neo4j.com/developer/cypher/>
问题:
当遇到Cypher问题时,可以在Neo4j Browser里使用哪个命令获取帮助信息?
## 答案
`:help cypher`
## 选项
### A
`:play cypher`
### B
`:help cypher`
### C
`cypher --help`
### D
`help cypher`
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j 查询语言", "Cypher", "图遍历", "查询语言", "SQL"],
"export": ["cypher-sql.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "cypher-sql.md",
"notebook_enable": false
}
\ No newline at end of file
# Cypher 查询语言和 SQL 的对比
Cypher 就像 SQL 是一种声明性的文本查询语言,但用于图Graph。它由子句、关键字和表达式(如谓词和函数)组成,其中许多是熟悉的(如`WHERE``ORDER BY``SKIP LIMIT``AND``p.unitPrice > 10`)。与 SQL 不同,Cypher 是关于表达图模式的。我们添加了一个特殊子句`MATCH`**匹配**您数据中的这些模式。这些图是您通常在白板上绘制的图,只是使用**ASCII 艺术符号**转换为文本。
关系数据库将数据存储在具有固定结构(架构)的表中,每列都有一个名称、类型、长度、约束等。表之间的引用通过将一个表的主键作为另一个表中的列作为外键重复来表示。对于多对多引用,需要连接表(或链接表)作为连接表之间的人工构造。
一个良好归一化的关系模型可以直接转换为等效的图模型。图模型主要是由用例驱动的,因此之后会有优化和模型演化的机会。
一个好的、规范化的实体关系图通常已经代表了一个不错的图模型。因此,如果您仍有可用的数据库的原始 ER 图,请尝试将其用作指南。
以NorthWind数据集为例,如果您必须在 SQL 中表达类别、地区或组织层次结构,那么您通常通过从子项到父项的外键使用自联接对其进行建模。添加数据没有问题,单级查询也是如此(获取此父级的所有子级)。一旦您进入多级查询,联接的数量就会激增,尤其是在您的级别深度不固定的情况下。
以产品类别为例,我们必须预先决定要查询的类别级别。我们将在这里只处理三个潜在级别(这意味着 ProductCategory 表的 1+2+3 = 6 个自连接)。
```sql
SELECT p.ProductName
FROM Product AS p
JOIN ProductCategory pc ON (p.CategoryID = pc.CategoryID AND pc.CategoryName = "Dairy Products")
JOIN ProductCategory pc1 ON (p.CategoryID = pc1.CategoryID
JOIN ProductCategory pc2 ON (pc2.ParentID = pc2.CategoryID AND pc2.CategoryName = "Dairy Products")
JOIN ProductCategory pc3 ON (p.CategoryID = pc3.CategoryID
JOIN ProductCategory pc4 ON (pc3.ParentID = pc4.CategoryID)
JOIN ProductCategory pc5 ON (pc4.ParentID = pc5.CategoryID AND pc5.CategoryName = "Dairy Products")
;
```
Cypher 能够通过适当的关系表达任何深度的层次结构。可变级别由可变长度路径表示,`*`在关系类型和可选限制 ( `min..max`)后面用星号表示。
```cypher
MATCH (p:Product)-[:CATEGORY]-&gt;(l:ProductCategory)-[:PARENT*0..]-(:ProductCategory {name:"Dairy Products"})
RETURN p.name
```
Cypher 的内容远不止这一小节中显示的内容。希望与 SQL 的比较有助于您理解这些概念。如果您对这些可能性感兴趣并想尝试了解更多信息,只需在您的机器上[安装 Neo4j](https://neo4j.com/download)并使用指向我们不同 Cypher 学习资源的链接。
问题:
我们想看看谁买了*巧克力*。把这四个表连起来,不确定的时候参考模型(ER图)。
```sql
SELECT DISTINCT c.CompanyName
FROM customers AS c
JOIN orders AS o ON (c.CustomerID = o.CustomerID)
JOIN order_details AS od ON (o.OrderID = od.OrderID)
JOIN products AS p ON (od.ProductID = p.ProductID)
WHERE p.ProductName = 'Chocolade';
```
请问在Neo4j中如何查询?
## 答案
```cypher
MATCH (p:Product {productName:"Chocolade"})<-[:PRODUCT]-(:Order)<-[:PURCHASED]-(c:Customer)
RETURN distinct c.companyName;
```
## 选项
### A
```cypher
MATCH (p:Product {productName:"Chocolade"})<-[:PRODUCT]-(:Order)<-[:PURCHASED]-(c:Customer)
RETURN distinct c.companyName;
```
### B
```cypher
MATCH (p:Product.productName:"Chocolade")<-[:PRODUCT]-(:Order)<-[:PURCHASED]-(c:Customer)
RETURN distinct c.companyName;
```
### C
```cypher
MATCH (p:Product{"Chocolade"})<-[:PRODUCT]-(:Order)<-[:PURCHASED]-(c:Customer)
RETURN distinct c.companyName;
```
{
"node_id": "",
"keywords": ["Neo4j 查询语言", "Cypher", "图遍历", "查询语言"]
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j 查询语言", "Cypher", "图遍历", "查询语言"],
"export": ["graph-data-modeling.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "graph-data-modeling.md",
"notebook_enable": false
}
\ No newline at end of file
# 图数据建模
如果您曾经使用过对象模型或实体关系图,那么标记的属性图模型会看起来很熟悉。
图数据建模是用户将任意域描述为节点以及具有属性和标签的关系的连接图的过程。Neo4j 图数据模型旨在以 Cypher 查询的形式回答问题,并通过为图数据库组织数据结构来解决业务和技术问题。
图数据模型通常被称为“白板友好”。通常,在设计数据模型时,人们在白板上绘制示例数据并将其连接到绘制的其他数据以显示不同项目之间的连接方式。然后重新格式化和构建白板模型以适合关系模型的规范化表格。
图数据建模中也存在类似的过程。然而,图形数据模型并没有修改数据模型以适应规范化的表结构,而是完全保持在白板上绘制的状态。这就是图形数据模型因“白板友好”而得名的地方。
问题:
关于图数据模型,哪一个的描述是不正确的?
## 答案
图数据模型中,实体或关系只能有一个类型(Label)
## 选项
### A
图数据建模可以使用白板绘画的方式进行
### B
图数据建模可以直观表达实体和关系
### C
图数据模型中,实体或关系只能有一个类型(Label)
### D
图数据模型可以使用类型进行抽象
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j 建模", "图数据模型设计", "Data Modeling"],
"export": ["model-design.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "model-design.md",
"notebook_enable": false
}
\ No newline at end of file
# 图数据模型设计
与任何数据库一样,您设计的数据模型对于确定查询逻辑和存储中的数据结构很重要。这种做法扩展到图形数据库,但有一个例外。Neo4j 是无模式的,这意味着您的数据模型可以轻松适应和更改您的业务。
如果您使用过其他类型的数据库,您将已经熟悉任何这些场景所涉及的开发和管理工作。但是,Neo4j 允许您毫不费力地跨部分或整个图形调整详细和广泛的变化。无论是随时间的微小变化还是包含有关实体的各种所需信息的广泛定义,数据库都能够处理。由开发人员和架构师确定数据模型的结构以及如何为查询定义实体。
正如我们许多人可能同意的那样,并非所有数据模型都是简单明了的。数据是混乱的,模型必须尝试更好地组织它以帮助我们查看模式并做出决策。
问题:下列说法正确的是哪一个?
## 答案
Neo4j是松散模式的,因此可以灵活更新数据库模型
## 选项
### A
Neo4j是松散模式的,因此可以灵活更新数据库模型
### B
图数据建模需要尽可能将数据存储到节点里
### C
图数据模型需要尽可能多地拆分成关系
### D
图数据模型跟要实现的业务没有关系
\ No newline at end of file
{
"node_id": "",
"keywords": ["关系型数据库", "迁移到图数据库", "图数据建模"],
"export": ["rdbms-graphdb.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "rdbms-graphdb.md",
"notebook_enable": false
}
\ No newline at end of file
# 从关系型数据库到图数据模型
如果您熟悉具有表、列、关系基数和其他组件的关系数据模型,那么图形数据建模似乎并不陌生。数据模型的设计仍然需要基于访问、查询、性能期望和业务逻辑的需求。然而,图数据模型的结构布局略有不同。这些差异在这些指南前面的[概念:RDBMS 到图形](https://neo4j.com/developer/graph-db-vs-rdbms/)部分中讨论过。
## 数据模型转换技巧
让我们看看关系数据模型中的一些关键组件,并将它们转换为图形数据模型的组件。下面列出了帮助您转换关系图的步骤。
- **表到节点标签** - 关系模型中的每个实体表都成为图模型中节点上的标签。
- **行到节点** - 关系实体表中的每一行都成为图中的一个节点。
- **列到节点属性** - 关系表上的列(字段)成为图中的节点属性。
- **仅业务主键** - 删除技术主键,保留业务主键。
- **添加约束/索引** - 为业务主键添加唯一约束,为频繁查找属性添加索引。
- **关系的**外键 - 用**关系**替换另一个表的外键,然后删除它们。
- **无默认值** - 删除具有默认值的数据,无需存储这些数据。
- **清理数据** - 非规范化表中的重复数据可能必须被提取到单独的节点中以获得更清晰的模型。
- **将列索引到数组** - 索引列名称(如 email1、email2、email3)可能表示数组属性。
- **将表连接到关系** - 连接表被转换为关系,这些表上的列成为关系属性
在开始导入数据之前对图形模型有一个基本的了解是很重要的,因为随着需求的变化,可以更容易地结合该模型或稍后对其进行调整。在即将发布的指南中,您对图形数据建模的方式会影响查询、性能和模型更改。
问题:
下列描述中不正确的是哪一个?
## 答案
Neo4j里没有索引和约束
## 选项
### A
关系型数据库里的空值在Neo4j中不需要存储了
### B
关系型数据库表中的外键可以直接转换成图数据模型的关系
### C
Neo4j里没有索引和约束
### D
关系型数据库表中的列可以转换成属性图模型的属性,也可以拆分成更多的实体或关系
\ No newline at end of file
{
"node_id": "",
"keywords": ["图数据建模", "Neo4j数据建模", "Graph Data Modeling"]
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["数据导入", "ETL", "LOAD CSV", "Neo4j数据导入"],
"export": ["load-csv.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "load-csv.md",
"notebook_enable": false
}
\ No newline at end of file
# 使用 LOAD CSV 导入数据到Neo4j
在Neo4j中有几种不同的方法可以将 CSV 数据导入 Neo4j,每种方法都有不同的标准和功能。您选择的选项取决于数据集的大小,以及您对各种工具的熟悉程度。
让我们看看 Neo4j 读取和导入 CSV 文件的一些方法。
1. `LOAD CSV`Cypher 命令:此命令是一个很好的起点,可以处理中小型数据集(最多 1000 万条记录)。 *适用于任何设置,包括 AuraDB。*
2. `neo4j-admin`批量导入工具:命令行工具可用于直接加载大型数据集。 *适用于 Neo4j 桌面、Neo4j EE Docker 镜像和本地安装。*
3. Kettle 导入工具:映射并执行数据处理流程的步骤,适用于非常大的数据集,特别是如果开发人员已经熟悉使用此工具。 *适用于任何设置,包括 AuraDB。*
`LOAD CSV`子句是 Cypher 查询语言的一部分。我们的[Cypher 手册](https://neo4j.com/docs/cypher-manual/current/)包含一个专门介绍其用法的页面,并且 Neo4j 的各种博客、视频、解决方案和其他材料都使用了该命令。它使用简单,适用范围广。 `LOAD CSV`不仅仅是您的基本数据摄取机制,因为它将多个方面组合到一个操作中。
- 支持从 URI 加载/摄取 CSV 数据
- 将输入数据直接映射到复杂的图/域结构
- 处理数据转换
- 支持复杂的计算
- 创建或合并实体、关系和结构
`LOAD CSV`可以处理本地和远程文件,并且每个文件都有一些相关的语法。这很容易被忽略并最终导致访问错误,因此我们将尝试在此处澄清规则。
可以使用`file:///`文件名前的前缀加载**本地文件**。Neo4j 安全有一个默认设置,本地文件只能从 Neo4j 导入目录中读取,这取决于您的操作系统。
可以直接使用其 URL 引用**Web 托管的文件**,例如`https://host/path/data.csv`. 但是,必须设置权限,以便外部源可以读取该文件。
有几件事需要牢记,`LOAD CSV`还有一些有用的技巧可以处理您可能遇到的各种数据场景。
- 所有的CSV文件中的数据读取为字符串,所以你需要使用`toInteger()``toFloat()``split()`或类似功能的转换数值。
- 检查您的 Cypher 导入语句是否有拼写错误。标签、属性名称、关系类型和变量**区分大小写**
- 数据越干净,加载就越容易。尝试在加载前处理复杂的清理/操作。
问题:
关于`LOAD CSV`的描述不正确的是?
## 答案
`LOAD CSV`可以处理任意量级的数据
## 选项
### A
可以从Neo4j Browser中直接运行`LOAD CSV`来加载数据
### B
`LOAD CSV`可以加载本地和远程的CSV数据
### C
`LOAD CSV`可以处理任意量级的数据
### D
除了`LOAD CSV`还可以用批量导入工具、ETL工具和自己写的导入程序
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j数据导入", "APOC"],
"export": ["load-api.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "load-api.md",
"notebook_enable": false
}
\ No newline at end of file
# 从API中导入数据到Neo4j
我们可以将大量基于 JSON 的 Web API 导入 Neo4j,我们可以使用[Load JSON](https://neo4j.com/docs/labs/apoc/current/import/load-json)过程之一从这些 API 中检索数据,并将其转换为可供 Cypher 使用的值。
在从基于 JSON 的 REST API 导入数据之前,您应该已经安装了[APOC](https://neo4j.com/developer/neo4j-apoc)库。
- `apoc.load.json('url',path, config) YIELD value` - 如果 JSON 是数组,则将 JSON 作为值流导入,如果是映射,则导入单个值
- `apoc.load.jsonParams('url',{header:value},payload, config) YIELD value` - 从 JSON URL(例如 web-api)加载,同时发送标头/有效载荷以导入 JSON 作为值流(如果 JSON 是数组或单个值(如果它是地图))
- `apoc.load.jsonArray('url') YIELD value` - 从 JSON URL(例如 web-api)加载数组以将 JSON 作为值流导入
- `apoc.import.json(file,config)` - 将 json 列表导入到提供的文件中
默认情况下,禁止从文件系统导入。我们可以通过在 中设置以下属性来启用它`apoc.conf`
```ini
apoc.import.file.enabled=true
```
从属性`import`定义的目录中读取导入文件`dbms.directories.import`。这意味着我们提供的任何文件路径都相对于该目录。我们可以通过在 中设置以下属性来启用从文件系统上的任何位置读取文件`apoc.conf`
```ini
apoc.import.file.use_neo4j_config=false
```
问题:
下列说法中不正确的是?
## 答案
不支持从本地文件加载JSON
## 选项
### A
APOC (Awesome Procedures On Cypher) 是 Neo4j 的附加库,它提供了数百个过程和函数,并添加了许多有用的功能。
### B
可以使用Cypher处理加载的JSON文件
### C
不支持从本地文件加载JSON
### D
如果接口支持,Neo4j里可以自动进行分页查询API的数据
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j数据导入", "关系数据库到图数据库", "图数据模型"],
"export": ["load-rdbms.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "load-rdbms.md",
"notebook_enable": false
}
\ No newline at end of file
# 从关系型数据库导入数据到Neo4j
通常,在公司环境中,您在系统中拥有需要为新项目传输或操作的现有数据。新项目的部分或全部数据尚未在某处捕获的情况很少见。为了在新流程、应用程序或系统需要的地方获取现有数据,您需要执行提取-转换-加载 (ETL) 过程。很简单,您需要从现有系统导出数据,为新结构处理任何必要的数据操作,然后将转换后的数据导入新的数据存储。
将关系数据移动到图形有多种方法。
1. [LOAD CSV](https://neo4j.com/developer/guide-import-csv/):可能是从关系数据库导入数据的最简单方法。需要转储格式为 CSV 文件的单个实体表和连接表。
2. [APOC](https://neo4j-contrib.github.io/neo4j-apoc-procedures/):关于Cypher的很棒的程序。作为扩展库创建,为开发人员提供通用过程和功能。这个库对于复杂的转换和数据操作特别有用。有用的过程包括 apoc.load.jdbc、apoc.load.json 等。
3. [ETL 工具](https://medium.com/neo4j/neo4j-etl-tool-1-3-1-release-white-winter-2fc3c794d6a5):内部构建的 UI 工具,可将关系从 JDBC 连接转换为图形。允许以快速的性能和简单的用户体验为大型数据集批量导入数据。
4. [Kettle](https://medium.com/neo4j/getting-started-with-kettle-and-neo4j-32ff15b991f9):用于企业级数据导出和导入的开源工具。轻松处理各种数据源和大数据集,并组织数据流过程。
5. 其他 ETL 工具:还有一些供应商和社区工具可用于类似的 etl 流程和 GUI 交互,用于将各种格式的数据传入和传出 Neo4j。其中一些工具还可以绘制通过系统的数据流和转换。
6. [通过驱动程序编程](https://neo4j.com/developer/language-guides/):能够从关系数据库(或其他表格结构)中检索数据,并使用螺栓协议通过您选择的编程语言的驱动程序之一将其写入 Neo4j。
问题:
下列说法中不正确一项是?
## 答案
通过ETL工具导入数据时无需处理图数据模型
## 选项
### A
使用`LOAD CSV`需要先将关系型数据库的数据导出成CSV文件
### B
使用APOC可以直接连接到关系型数据库进行加载
### C
通过ETL工具导入数据时无需处理图数据模型
### D
通过编程语言的程序来导入数据的自定义程度最高
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j数据导入", "ETL", "数据导入工具"],
"export": ["data-importer.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "data-importer.md",
"notebook_enable": false
}
\ No newline at end of file
# Neo4j数据导入工具
请访问:<https://data-importer.graphapp.io/>
![](https://graphacademy.neo4j.com/courses/importing-data/2-using-data-importer/2-c-importing-CSV/images/data-importer.png)
访问<https://graphacademy.neo4j.com/courses/importing-data/>了解详细使用教程。
问题:
下列说法不正确的是?
## 答案
使用Data Importer导入数据前需要清理数据库
## 选项
### A
在导入数据之前要对数据模型进行建模
### B
无论使用哪种工具,都需要对数据进行准备
### C
使用Data Importer可以直观建立图数据模型
### D
使用Data Importer可以直接将数据导入到Neo4j图数据库中
### E
使用Data Importer导入数据前需要清理数据库
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j数据导入", "图数据模型", "CSV", "ETL", "数据映射"]
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j 客户端", "Neo4j 驱动", "Java", "Python", ".NET"],
"export": ["neo4j-driver.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "neo4j-driver.md",
"notebook_enable": false
}
\ No newline at end of file
# Neo4j编程语言驱动
Neo4j**正式支持**二进制 Bolt 协议的**.NET、Java、JavaScript、Go 和 Python 驱动程序**。我们的社区贡献者为所有协议和 API 的所有主要编程语言提供驱动程序。
从 Neo4j 3.0 开始,我们支持名为 Bolt 的二进制协议。它基于 PackStream 序列化,并通过证书支持 Cypher 类型系统、协议版本控制、身份验证和 TLS。对于 Neo4j 集群,Bolt 提供具有负载平衡和故障转移功能的智能客户端路由。
Neo4j 中默认启用二进制协议,因此您可以使用任何支持它的语言驱动程序。
如果您想以编程方式访问 Neo4j,您还可以使用 HTTP-API,它允许您:
- POST 一个或多个带有参数的 Cypher 语句
- 在多个请求上保持事务打开
- 选择不同的结果格式
问题:
下列说法中不正确都一个是?
## 答案
可以使用GraphQL对Neo4j数据库进行访问
## 选项
### A
Neo4j官方提供了.NET, Java, JavaScript, Python, Go等编程语言的客户端驱动程序
### B
Neo4j社区贡献了很多其他编程语言比如PHP, Ruby, R等的客户端驱动程序
### C
可以通过HTTP接口来使用任何编程语言对Neo4j进行访问
### D
可以使用GraphQL对Neo4j数据库进行访问
\ No newline at end of file
{
"node_id": "",
"keywords": ["GraphQL", "API", "GRAND", "全栈应用"],
"export": ["graphql.json", "grand-stack.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "grand-stack.md",
"notebook_enable": false
}
\ No newline at end of file
# GRAND全栈框架
GRANDstack 是一种技术组合,可协同工作,使开发人员能够构建数据密集型全栈应用程序。GRANDstack 的组成部分是:
- [**GraphQL**](https://graphql.org/) - 一种构建 API 的新范式,GraphQL 是一种描述数据并使客户端能够查询数据的方式。
- [**React**](https://reactjs.org/) - 用于构建基于组件的可重用用户界面的 JavaScript 库。
- [**Apollo**](https://www.apollographql.com/) - 一套工具,可协同工作以创建出色的 GraphQL 工作流。
- [**Neo4j 数据库**](https://neo4j.com/developer/)- 原生图形数据库,允许您以与您思考的方式相同的方式对数据进行建模、存储和查询:作为图形。
创建 GRANDstack 应用程序的最简单方法是通过运行此命令来使用[GRANDstack starter](https://grandstack.io/docs/getting-started-grand-stack-starter)
```
npx create-grandstack-app myapp
```
问题:
下列描述中,不正确的一项是?
## 答案
GRAND框架是搭配好的固定方案,不能拆分和跟其他方案组合
## 选项
### A
GRAND框架是基于Neo4j GraphQL和其他框架扩展而来的一套全栈解决方案
### B
使用GraphQL作为API接口可以简化数据模型的封装和接口复杂度
### C
GRAND框架是搭配好的固定方案,不能拆分和跟其他方案组合
### D
入门GRAND框架的方案推荐使用Starter项目模板
{
"type": "code_options",
"author": "shiny",
"source": "graphql.md",
"notebook_enable": false
}
\ No newline at end of file
# Neo4j GraphQL 库
Neo4j GraphQL 库是一个高度灵活、低代码、开源的 JavaScript 库,通过利用连接数据的力量,支持跨平台和移动应用程序的快速 API 开发。
使用 Neo4j 作为图形数据库,GraphQL 库使应用程序可以轻松地将应用程序数据从前端一直到存储都作为图来处理,避免重复的模式工作并确保前端和后端开发人员之间的完美集成.
通过为 Neo4j GraphQL 库提供一组描述图形数据形状的类型定义,它可以生成一个完整的可执行模式,其中包含执行查询和更改以与 Neo4j 数据库交互所需的所有附加类型。
对于针对此生成的模式执行的每个查询和更改,Neo4j GraphQL 库都会生成一个针对数据库执行的 Cypher 查询。
![](https://grandstack.io/assets/img/grandstack_architecture.png)
Neo4j GraphQL 库提供了一个大型功能集,用于使用 GraphQL 与 Neo4j 数据库进行交互:
- 为 CRUD 交互自动生成[查询](https://neo4j.com/docs/graphql-manual/current/queries/)[突变](https://neo4j.com/docs/graphql-manual/current/mutations/)
- 各种[类型](https://neo4j.com/docs/graphql-manual/current/type-definitions/types/),包括时间和空间类型
- 支持节点和关系属性
- 通过[`@cypher`指令](https://neo4j.com/docs/graphql-manual/current/type-definitions/cypher/)和/或[自定义解析器的](https://neo4j.com/docs/graphql-manual/current/custom-resolvers/)可扩展性
- 广泛的[过滤](https://neo4j.com/docs/graphql-manual/current/filtering/)[排序](https://neo4j.com/docs/graphql-manual/current/sorting/)选项
- 值自动[生成](https://neo4j.com/docs/graphql-manual/current/type-definitions/autogeneration/)[默认值的](https://neo4j.com/docs/graphql-manual/current/type-definitions/default-values/)选项
- 多个[分页](https://neo4j.com/docs/graphql-manual/current/pagination/)选项
- 全面的身份验证和授权选项 ( [Auth](https://neo4j.com/docs/graphql-manual/current/auth/) ),以及其他[访问控制](https://neo4j.com/docs/graphql-manual/current/type-definitions/access-control/)选项
- 用于与 GraphQL API 进行编程交互的[OGM](https://neo4j.com/docs/graphql-manual/current/ogm/)(对象图映射器)
问题:
关于下列说法,不正确的一项是?
## 答案
Neo4j GraphQL不需要客户端驱动可以直接连接到底层图数据库
## 选项
### A
GraphQL是一种实现REST API接口的编程风格
### B
GraphQL的优势包含为要获取的数据提供了完整且易于理解的定义
### C
Neo4j GraphQL提供了从图数据库到API层的现成框架
### D
Neo4j GraphQL不需要客户端驱动可以直接连接到底层图数据库
{
"node_id": "",
"keywords": ["Spark连接Neo4j", "Spark", "Neo4j"],
"export": ["spark-neo4j.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "spark-neo4j.md",
"notebook_enable": false
}
\ No newline at end of file
# Neo4j的Apache Spark连接器
Apache Spark 的 Neo4j 连接器旨在使图与 Spark 的集成变得容易。有两种有效的使用连接器的方法:
- **作为数据源**:在 Spark 中将任何节点或关系集作为 DataFrame 读取
- **作为接收器**:将任何 DataFrame 作为节点或关系的集合写入 Neo4j,或者;使用 Cypher 语句将 DataFrame 中的记录处理为您选择的图模式。
由于连接器基于新的 Spark 数据源 API,因此适用于 Python 和 R 等语言的其他 Spark 解释器也可以使用。
此连接器适用于 Neo4j 3.5 和 Neo4j 的整个 4+ 系列,无论是作为单个实例运行、在因果集群模式下运行,还是作为 Neo4j Aura 中的托管服务运行。连接器不依赖于企业功能,因此也可以与 Neo4j 社区一起使用,并具有适当的版本号。
此连接器当前支持 Spark 2.4.5+ with Scala 2.11 和 Scala 2.12 以及 Spark 3.0+ with Scala 2.12。根据 Spark 和 Scala 版本的组合,您将需要不同的 JAR。JAR 以以下形式命名`neo4j-connector-apache-spark_${scala.version}_${spark.version}_${connector.version}`
问题:
下列说法中,不正确的一项是?
## 答案
Spark连接器在开源社区版上无法使用
## 选项
### A
Spark 连接器可用于从Spark中读取或写入数据
### B
Spark 连接器使用Java驱动程序来连接底层Neo4j图数据库
### C
Spark擅长处理DataFrame,Neo4j擅长处理图数据,使用连接器可以发挥两个的优势
### D
Spark连接器在开源社区版上无法使用
{
"node_id": "",
"keywords": ["Kafka连接Neo4j", "kafka", "neo4j"],
"export": ["kafka-neo4j.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "kafka-neo4j.md",
"notebook_enable": false
}
\ No newline at end of file
# Neo4j的Apache kafka连接器
Kafka Connect 是 Apache Kafka 的开源组件,是一个框架,用于将 Kafka 与外部系统(例如数据库、键值存储、搜索索引和文件系统)连接起来。
Neo4j Streams 项目提供了一个 Kafka Connect Neo4j 连接器,它可以安装到 Confluent 平台中,从而实现:
- 通过模板化的 Cypher 查询将来自 Kafka 主题的数据直接摄取到 Neo4j 中;
- 流式处理 Neo4j 查询。
Neo4j Streams 将 Neo4j 与 Apache Kafka 事件流集成在一起,用作数据源,例如更改数据 (CDC) 或接收器以将任何类型的 Kafka 事件摄取到您的图形中。
Kafka Connect Neo4j Sink 插件将与 Confluent Cloud 以及大多数形式的 Apache Kafka 一起使用,包括使用单独的 Connect 框架和基础设施在本地运行。建议需要数据接收器功能的人使用此方法。
企业用户可以在他们现有的支持协议下使用 Neo4j Streams。Neo4j 社区用户也可以在社区支持下使用 Neo4j Streams。
- [Kafka Connect:Neo4j 源插件](https://neo4j.com/docs/labs/neo4j-streams/current/#_kafka_connect)[Confluent Hub](https://www.confluent.io/connector/kafka-connect-neo4j-sink/)
- [Neo4j 插件:更改数据源](https://neo4j.com/docs/labs/neo4j-streams/current/#_neo4j_streams_producer)
- [Neo4j 插件:接收器](https://neo4j.com/docs/labs/neo4j-streams/current/#_neo4j_streams_consumer)
- [Neo4j 插件:程序](https://neo4j.com/docs/labs/neo4j-streams/current/#_procedures)
- [Docker Compose 设置](https://neo4j.com/docs/labs/neo4j-streams/current/#docker)
![](https://neo4j.com/labs/kafka/_images/kafka-source-flow.png)
问题:
下列描述中哪一个是不正确的?
## 答案
Kafka连接器只能与Confluent平台一起使用
## 选项
### A
不需要同时配置Neo4j插件和Kafka Connect工作线程
### B
作为**Neo4j 插件**,neo4j-streams 运行在数据库内部,可以消费和生成消息到 Kafka。
### C
一个挑战是将Kafka中的消息转换成图数据模型,然后加载到Neo4j中
### D
Kafka连接器只能与Confluent平台一起使用
{
"type": "code_options",
"author": "shiny",
"source": "bi-neo4j.md",
"notebook_enable": false
}
\ No newline at end of file
# 在商业智能(BI)工具中使用Neo4j
[Neo4j BI 连接器](https://neo4j.com/bi-connector/)提供对来自商业智能 (BI) 工具(例如 Tableau、Looker、TIBCO Spotfire Server 和 Microstrategy)的 Neo4j 图形数据的直接访问。它是第一个支持企业就绪的产品,能够以无缝方式向 BI 用户提供实时、互联的数据结果,避免编码、自定义脚本和不受控制的访问。
![](https://dist.neo4j.com/wp-content/uploads/20211220163355/Neo4j-Connector-for-BI-n.svg)
用于 BI 的 Neo4j 连接器使数据分析师、调查员和数据科学家能够无缝地:
- 实时连接到 Neo4j 数据库
- 以与关系和 NoSQL 数据相同的方式选择图形数据
- 使用 SQL 查询以表格形式从 Neo4j 检索数据
- 分析和可视化图形数据结果,从高度连接的数据中获得独特的见解
Neo4j 企业版客户可以免费使用 Neo4j Connector for BI。在功能上,该产品:
- 基于 Java 数据库连接 (JDBC) 标准构建
- 将 SQL 翻译成 Neo4j 的原生图形优化 Cypher 语言
- 实时访问互联数据洞察
- 完全支持并准备好用于生产、企业部署
使用 Neo4j Connector for BI 将商业智能图数据用于创新和数字化转型项目。
问题:
下列描述中,不正确的一项是:
## 答案
不可以将特定的Cypher查询转换为BI识别的表
## 选项
### A
Neo4j BI 连接器允许用户从 Neo4j 图形数据库中检索只读结果
### B
BI系统用户不需要了解Neo4j的图数据查询语言Cypher
### C
Neo4j BI 连接器是一个JDBC驱动程序,用来跟Neo4j 图数据库交互
### D
Neo4j BI 连接器即时获取输入的 SQL 查询并将其转换为 Cypher 查询。
### E
不可以将特定的Cypher查询转换为BI识别的表
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j BI", "商务智能", "Power BI", "Tableau"],
"export": ["bi-neo4j.json"]
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j应用开发", "全栈应用", "GraphQL", "Spark", "Kafka", "BI"]
}
\ No newline at end of file
{
"node_id": "neo4j-298b201de8044453a2d6e8d02e64962d",
"keywords": []
"keywords": ["Cypher 查询语言", "图数据建模", "Neo4j数据导入", "Neo4j客户端驱动"]
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j图数据科学", "GDS", "Graph Data Science", "图机器学习"],
"export": ["neo4j-gds.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "neo4j-gds.md",
"notebook_enable": false
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j图算法", "图算法", "Graph Algorithm"],
"export": ["neo4j-graph-algorithms.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "neo4j-graph-algorithms.md",
"notebook_enable": false
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j图嵌入", "图嵌入", "图机器学习", "图深度学习"],
"export": ["neo4j-graph-embedding.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "neo4j-graph-embedding.md",
"notebook_enable": false
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j NLP", "自然语言处理", "语言理解"],
"export": ["neo4j-nlp.json"]
}
\ No newline at end of file
{
"type": "code_options",
"author": "shiny",
"source": "neo4j-nlp.md",
"notebook_enable": false
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["图数据科学", "Graph Data Science", "GDS", "图算法", "图嵌入", "图机器学习"]
}
\ No newline at end of file
{
"node_id": "",
"keywords": ["Neo4j企业版", "Neo4j集群", "Neo4j高可用", "Neo4j因果集群"],
"export": ["neo4j-enterprise.json"]
}
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册