目 录
第1章 Neo4j图数据库基础 1
1.1 图数据库背景知识 2
1.1.1 图数据库历史 2
1.1.2 图数据库应用领域 6
1.1.3 主流图数据库介绍 7
1.2 图数据库基础概念 11
1.2.1 图数据模型 11
1.2.2 图计算引擎 12
1.3 图数据库与关系数据库的对比 13
1.3.1 关系数据库的弊端 13
1.3.2 图数据模型的优势 13
1.4 图数据库与其他NoSQL数据库的对比 15
1.4.1 其他NoSQL数据库的弊端 15
1.4.2 将键值对存储与图数据库相关联 15
1.4.3 将文档存储与图数据库相关联 16
1.5 Neo4j概述 16
1.6 Neo4j版本升级与变化 18
1.7 Neo4j的体系结构 22
1.7.1 免索引邻接 22
1.7.2 Neo4j底层存储结构 24
1.7.3 Neo4j的遍历方式 27
1.7.4 Neo4j的存储优化 29
1.8 Neo4j版本全貌 29
1.8.1 Neo4j AuraDB 29
1.8.2 Neo4j Desktop 29
1.8.3 Neo4j Sandbox 30
1.8.4 Neo4j社区版 30
1.8.5 Neo4j企业版 31
第2章 Neo4j基础入门 32
2.1 Neo4j的安装部署 32
2.1.1 Neo4j安装包的下载 33
2.1.2 在各个操作系统上的安装 35
2.1.3 Neo4j的启动 40
2.2 Neo4j管理平台的使用 43
2.2.1 Neo4j Desktop桌面管理平台的使用 43
2.2.2 Web管理平台的使用 45
2.2.3 cypher-shell命令的使用 48
2.3 Neo4j图数据中基本元素与概念 51
2.3.1 节点 51
2.3.2 关系 52
2.3.3 属性 53
2.3.4 路径 53
2.3.5 遍历 54
2.4 官方入门实例介绍 54
2.4.1 创建图数据 55
2.4.2 检索节点 56
2.4.3 查询关系 58
2.4.4 思考与练习 61
2.4.5 清空数据库 62
2.5 批量导入工具的使用 63
2.5.1 ETL导入工具的使用 63
2.5.2 获取CSV文件 75
2.5.3 使用Load CSV指令导入到Neo4j 78
2.5.4 使用neo4j-import工具导入到Neo4j 80
第3章 Neo4j之Cypher 82
3.1 Cypher概述 82
3.1.1 Cypher是什么 82
3.1.2 模式(Patterns) 84
3.1.3 查询和更新图 86
3.1.4 事务 86
3.1.5 唯一性 87
3.1.6 兼容性 88
3.2 基本语法 89
3.2.1 类型 89
3.2.2 表达式 89
3.2.3 变量 92
3.2.4 参数 92
3.2.5 运算符 95
3.2.6 注释 96
3.2.7 模式 96
3.2.8 列表 99
3.2.9 空值 105
3.3 语句 106
3.3.1 MATCH语句 106
3.3.2 OPTIONAL MATCH语句 116
3.3.3 WHERE语句 117
3.3.4 START语句 128
3.3.5 Aggregation语句 129
3.3.6 LOAD CSV语句 135
3.3.7 CREATE语句 139
3.3.8 MERGE语句 143
3.3.9 SET语句 152
3.3.10 DELETE语句 156
3.3.11 REMOVE语句 157
3.3.12 FOREACH语句 158
3.3.13 CREATE UNIQUE语句 159
3.3.14 RETURN语句 162
3.3.15 ORDER BY语句 166
3.3.16 LIMIT语句 168
3.3.17 SKIP语句 169
3.3.18 WITH语句 171
3.3.19 UNWIND语句 173
3.3.20 UNION语句 174
3.3.21 CALL语句 176
3.4 函数 180
3.4.1 断言函数 180
3.4.2 标量函数 183
3.4.3 列表函数 190
3.4.4 数学函数 195
3.4.5 字符串函数 203
3.4.6 自定义函数 208
3.5 索引 209
3.5.1 简介 209
3.5.2 创建索引 211
3.5.3 列出索引 212
3.5.4 删除索引 213
3.5.5 未来的索引 213
3.6 全文索引 213
3.6.1 创建全文索引 214
3.6.2 基于全文索引的查询 215
3.6.3 删除全文索引 216
3.7 约束 216
3.7.1 简介 216
3.7.2 创建约束 217
3.7.3 删除约束 218
3.7.4 列出约束 218
3.8 数据库管理 219
3.8.1 列出数据库 219
3.8.2 创建数据库(仅企业版) 220
3.8.3 更改数据库 221
3.8.4 停止数据库 221
3.8.5 启动数据库 221
3.8.6 删除数据库 221
3.8.7 WAIT选项(仅企业版) 222
3.8.8 创建数据库别名(仅企业版) 222
3.8.9 更改数据库别名(仅企业版) 223
3.8.10 删除数据库别名 223
3.9 查询调优 223
3.9.1 Cypher查询选项 223
3.9.2 查询性能分析 227
3.9.3 索引使用 227
3.9.4 基础查询调优举例 244
3.9.5 高级查询调优举例 248
3.9.6 USING语句 256
3.10 执行计划 270
3.10.1 执行计划运算符详细介绍 271
3.10.2 Expand 运算符 279
3.10.3 组合运算符 284
3.10.4 行运算符 299
3.10.5 更新运算符 310
3.10.6 最短路径规划 313
第4章 Neo4j程序开发 318
4.1 Neo4j开发入门 318
4.1.1 Java嵌入式开发模式 318
4.1.2 各语言驱动包开发模式 318
4.2 Java API嵌入式开发模式 319
4.2.1 Java开发前的准备工作 320
4.2.2 创建Neo4j图实例 324
4.2.3 图数据遍历功能 329
4.2.4 数据索引 336
4.2.5 用户自定义过程 343
4.2.6 用户自定义函数 350
4.2.7 用户自定义聚合函数 350
4.2.8 事务管理 352
4.2.9 使用Java在线备份Neo4j 358
4.2.10 使用JMX监控Neo4j 358
4.3 各语言驱动包开发模式 360
4.3.1 驱动开发入门 360
4.3.2 客户端应用 367
4.3.3 Cypher语句工作流 381
4.3.4 数据类型 386
4.3.5 异常和错误处理 389
4.4 Neo4j HTTP API 389
4.4.1 简介 389
4.4.2 认证和授权 390
4.4.3 发现API 391
4.4.4 Cypher事务API 391
4.5 其他开发技术介绍 407
4.5.1 Spring-Data-Neo4j 407
4.5.2 Spring-Data-Neo4在项目中的部署 407
4.5.3 使用Neo4j-OGM的对象图映射 408
4.5.4 使用JDBC连接Neo4j 409
4.5.5 JCypher 409
4.5.6 Groovy&Grails:Neo4j Grails插件 410
4.5.7 Clojure:Neocons 410
4.5.8 Scala:AnormCypher 410
4.5.9 JPA:Hibernate OGM 411
第5章 Neo4j数据库管理 412
5.1 部署与配置 412
5.1.1 系统需求 412
5.1.2 neo4j.conf文件 414
5.1.3 文件位置 415
5.1.4 重要端口 417
5.1.5 设置初始密码 417
5.1.6 密码和用户的恢复 418
5.1.7 等待Neo4j启动 421
5.1.8 使用数据收集器 421
5.1.9 配置Neo4j连接器 422
5.1.10 动态设置 424
5.1.11 事务日志 426
5.1.12 安装证书 428
5.2 备份与恢复 428
5.2.1 备份简介 428
5.2.2 执行备份 430
5.2.3 恢复备份 433
5.3 认证和授权 434
5.3.1 简介 434
5.3.2 内置角色 435
5.3.3 细粒度访问控制 436
5.3.4 与LDAP集成 451
5.3.5 管理过程权限 456
5.3.6 相关术语 457
5.4 安全管理 458
5.4.1 安全扩展 458
5.4.2 SSL框架 458
5.4.3 术语 460
5.4.4 浏览器凭证处理 461
5.4.5 安全清单 461
5.5 监控管理 462
5.5.1 指标 462
5.5.2 日志 468
5.5.3 查询管理 471
5.5.4 事务管理 474
5.5.5 连接管理 475
5.5.6 监控因果集群 477
5.5.7 监控单个数据库状态 482
5.6 性能管理 485
5.6.1 内存配置 485
5.6.2 索引配置 489
5.6.3 调整垃圾收集器 492
5.6.4 Bolt线程池配置 493
5.6.5 Linux文件系统调优 494
5.6.6 磁盘、内存及其他提示 494
5.6.7 统计和执行计划 495
5.6.8 压缩存储 497
5.7 数据库管理相关工具 498
5.7.1 导入工具 498
5.7.2 Cypher Shell 501
5.7.3 转存和加载数据库 504
5.7.4 解绑核心服务器 505
5.7.5 一致性检查工具 505
第6章 存储过程库APOC 507
6.1 安装 507
6.1.1 APOC核心库的安装 507
6.1.2 APOC完整库的安装 507
6.1.3 配置选项 508
6.1.4 安装验证 509
6.2 用法 509
6.2.1 语法 509
6.2.2 帮助手册 509
6.2.3 运行注意事项 509
6.3 过程和函数 510
6.3.1 Neo4j运维类 510
6.3.2 APOC运维类 510
6.3.3 数据操作类 511
6.3.4 数据库集成类 512
6.3.5 图操作类 512
第7章 图数据科学库GDS 515
7.1 简介 515
7.2 安装 516
7.2.1 支持的Neo4j版本 516
7.2.2 Neo4j Desktop 516
7.2.3 Neo4j服务器版 517
7.2.4 Neo4j企业版 517
7.2.5 Neo4j Docker 517
7.2.6 Neo4j因果集群 517
7.2.7 其他配置项 517
7.2.8 系统需求 518
7.3 常见用法 519
7.3.1 内存估计 519
7.3.2 创建图 521
7.3.3 运行算法 522
7.3.4 日志记录 523
7.3.5 系统监控 524
7.4 图管理 525
7.4.1 图目录 525
7.4.2 节点属性 532
7.4.3 实用函数 533
7.4.4 GDS库上的Cypher 533
7.4.5 匿名图 533
7.4.6 管理图目录(企业版) 534
7.5 主要算法 534
7.5.1 中心性算法 534
7.5.2 社区检测算法 534
7.5.3 相似度算法 535
7.5.4 路径搜索算法 535
7.5.5 拓扑链路预测算法 536
7.5.6 节点嵌入算法 536
7.6 机器学习 536
7.6.1 节点分类管道 536
7.6.2 链路预测管道 542
7.6.3 管道目录 543
7.6.4 模型目录 543
7.7 Python客户端 545
7.7.1 安装 545
7.7.2 Python客户端的使用 546
7.7.3 与Cypher API之间的映射关系 547
7.7.4 图对象 547
7.7.5 算法执行 549
第8章 集群技术与Fabric 550
8.1 因果集群 550
8.1.1 初识因果集群 551
8.1.2 操作视图 551
8.1.3 因果一致性 553
8.2 因果集群部署 554
8.2.1 配置含有单个实例和多副本实例的集群 554
8.2.2 配置含有核心实例的集群 555
8.2.3 现有集群添加核心服务节点 557
8.2.4 现有集群添加辅助服务节点 558
8.2.5 现有集群剥离辅助服务节点 558
8.2.6 连接辅助服务节点 559
8.3 因果集群迁入初始化数据 559
8.3.1 数据迁入介绍 559
8.3.2 通过数据库转存进行集群数据迁入(离线) 560
8.3.3 通过数据库备份进行数据迁入(在线) 560
8.3.4 使用导入工具进行数据迁入 563
8.4 因果集群内部成员发现 563
8.4.1 概述 563
8.4.2 使用服务器地址列表进行发现 563
8.4.3 使用具有多个记录的DNS进行发现 564
8.4.4 在Kubernetes中发现 564
8.5 因果集群内部加密 564
8.5.1 概述 565
8.5.2 部署示例 565
8.6 因果集群内部结构 566
8.6.1 选举与领导 566
8.6.2 领导权均衡 567
8.6.3 多数据库与调节器 567
8.6.4 服务器端路由 567
8.6.5 存储副本 569
8.6.6 磁盘状态 569
8.7 Fabric 570
8.7.1 Fabric概述 570
8.7.2 Fabric部署示例 570
8.8 Fabric配置 572
8.8.1 Fabric数据库安装 572
8.8.2 认证与授权 575
8.8.3 重要设置 576
8.9 Fabric查询 577
8.10 使用复制命令分片数据 579
第9章 Neo4j应用案例 582
9.1 应用案例概述 582
9.2 欺诈检测 585
9.2.1 第一方银行欺诈 586
9.2.2 保险欺诈 592
9.2.3 电子商务欺诈 596
9.2.4 小结 597
9.3 科研导图 597
9.4 电子邮件监测 605
9.5 工商企业图谱 610
9.6 社交网络 616
9.7 Neo4j在汽车生产和零件制造业中的作用 623
9.7.1 汽车企业数据概览 624
9.7.2 供应链管理 625
9.7.3 保修分析 626
9.7.4 客户360 628
9.7.5 知识图谱 629
9.7.6 真实的案例 630
第10章 Neo4j高级应用 632
10.1 Bloom可视化工具 633
10.1.1 功能介绍 633
10.1.2 安装方法 634
10.1.3 界面及展示效果 636
10.1.4 灵活的定制化查询 636
10.2 ETL工具 637
10.2.1 功能介绍 637
10.2.2 ETL工具的安装 637
10.2.3 使用ETL工具从关系数据库导入 640
10.2.4 压缩包版命令行ETL工具的导入 646
10.3 高级索引 648
10.3.1 空间索引(Neo4j Spatial) 648
10.3.2 自定义中文全文索引 656
10.4 在Docker环境下部署Neo4j 662
10.4.1 Docker概述 663
10.4.2 Docker安装Neo4j的优点 663
10.4.3 Docker安装Neo4j 663
10.5 在Kuberenetes环境下部署Neo4j 665
10.5.1 关于Neo4j Helm 665
10.5.2 Neo4j Helm的使用 665
10.5.3 配置Neo4j Helm 665
10.5.4 部署 666
10.6 Neo4j与图计算 670
10.6.1 Neo4j-Spark-Connector 671
10.6.2 Neo4j-Spark-Connector提供的API 674
10.7 Neo4j与自然语言处理 675
10.7.1 计算聚合相关性 675
10.7.2 将文本数据建模为邻接图 676
10.7.3 加载数据 677
10.7.4 挖掘单词之间的关系 678
10.8 Neo4j 中运行本体推理 681
10.8.1 安装Neosemantics (n10s)组件 681
10.8.2 本体模型与数据模型 683
10.8.3 使用Tushare获取数据 684
10.8.4 对数据进行预处理 687
10.8.5 将CSV数据导入Neo4j 689
10.8.6 运行推理查询 691
10.9 Neo4j与区块链 694
10.9.1 比特币区块链 694
10.9.2 区块链数据格式 697
10.9.3 图数据建模 699
10.9.4 数据写入Cypher语句 700
10.9.5 查询区块链数据 703
10.10 Kafka与Neo4j数据同步 705
10.10.1 Kafka简介 705
10.10.2 Kafka安装运行 706
10.10.3 Neo4j Streams插件安装部署 707
10.10.4 从Kafka同步数据到Neo4j 708