编辑推荐
本书基于Neo4j数据库3.5版本及其对应的ALGO和APOC扩展包,详细介绍了近二百个主要过程和函数的定义、相关理论、使用方法、代码样例,让广大Neo4j图数据库的设计和开发人员能够快速掌握正确和高效的图数据库分析方法及其应用开发技能。
 ;
内容简介
本书共13章,全面、系统和详尽地介绍Neo4j图数据库扩展的概念、APOC和ALGO扩展包的使用、以及开发服务器扩展的方法。内容分为四个部分,依次为:Neo4j 图数据库扩展介绍;APOC 扩展包函数和过程指南;ALGO 扩展包函数和过程指南;开发和测试方法。
作者简介
张老师是微云数聚(北京)科技有限公司创始人、中国IT界元老、中国图数据库先导者、大数据领域资深专家、WPS曲线汉字全套核心技术的发明人。1985年研究生毕业于国防科技大学,获中国首届信息系统工程硕士。
目录
第一部分 ; 概述
第1章 ; Neo4j图数据库扩展概述 / 3
1.1 ; Neo4j图数据库平台 / 3
1.1.1 ; 图数据库是当今最热门的NoSQL数据库类别 / 3
1.1.2 ; Neo4j图数据库平台 / 4
1.1.3 ; 原生图数据库 / 5
1.2 ; Neo4j数据库扩展 / 7
1.2.1 ; 背景 / 7
1.2.2 ; APOC扩展库的内容 / 8
1.2.3 ; ALGO扩展库的内容 / 12
1.2.4 ; ALGO扩展库的未来版本 / 14
第2章 ; 扩展包的安装和配置 / 18
2.1 ; 扩展包的下载 / 18
2.2 ; 扩展包的安装和配置 / 18
2.2.1 ; 在Neo4j Desktop中自动安装 / 18
2.2.2 ; 手动安装 / 19
2.2.3 ; 在Docker容器中安装 / 19
2.2.4 ; 测试安装 / 20
2.2.5 ; 在线文档 / 20
第二部分 ; APOC扩展包使用指南
第3章 ; 路径扩展过程 / 23
3.1 ; 路径扩展过程概述 / 23
3.2 ; 主要参数说明 / 25
3.2.1 ; 标签过滤器(labelFilter) / 25
3.2.2 ; 关系过滤器(relationshipFilter) / 25
3.2.3 ; 标签和关系序列(Sequence) / 26
3.2.4 ; 唯一性规则(Uniqueness) / 27
3.2.5 ; 理解Cypher的模式匹配 / 28
3.3 ; 基本路径扩展过程 / 32
3.3.1 ; 定义 / 32
3.3.2 ; 应用 / 32
3.3.3 ; 过程概述 – apoc.path.expand / 33
3.3.4 ; 过程调用接口 – apoc.path.expand / 33
3.3.5 ; 示例 – 创建三国人物关系图 / 33
3.3.6 ; 示例 – apoc.path.expand / 34
3.4 ; 可配置的路径扩展过程 / 35
3.4.1 ; 定义 / 35
3.4.2 ; 过程概述 – apoc.path.expandConfig / 36
3.4.3 ; 过程调用接口 – apoc.path.expandConfig / 36
3.4.4 ; 示例 – apoc.path.expandConfig / 37
3.5 ; 搜索子图 / 38
3.5.1 ; 定义 / 38
3.5.2 ; 应用 / 39
3.5.3 ; 过程概述 – apoc.path.subgraphNodes / 39
3.5.4 ; 过程调用接口 – apoc.path.subgraphNodes / 39
3.5.5 ; 示例 – apoc.path.subgraphNodes / 41
3.6 ; 搜索最小生成树 / 42
第4章 ; 查询任务管理 / 43
4.1 ; 查询任务管理概述 / 43
4.2 ; 按照条件循环执行 – commit / 46
4.2.1 ; 定义 / 46
4.2.2 ; 应用 / 47
4.2.3 ; 过程概述 – apoc.periodic.commit / 47
4.2.4 ; 过程调用接口 – apoc.periodic.commit / 47
4.2.5 ; 示例 – apoc.periodic.commit / 47
4.3 ; 按照集合内容循环执行 – iterate / 48
4.3.1 ; 定义 / 48
4.3.2 ; 应用 / 49
4.3.3 ; 过程概述 – apoc.periodic.iterate / 49
4.3.4 ; 过程调用接口 – apoc.periodic.iterate / 49
4.3.5 ; 示例 – apoc.periodic.iterate / 50
4.4 ; 异步执行Cypher查询 – submit / 51
4.4.1 ; 定义 / 51
4.4.2 ; 应用 / 51
4.4.3 ; 过程概述 / 51
4.4.4 ; 示例 / 51
4.5 ; 自定义Cypher函数和过程 / 52
4.5.1 ; 定义 / 52
4.5.2 ; 应用 / 52
4.5.3 ; 过程调用接口 / 52
4.5.4 ; 示例 / 54
4.6 ; Cypher执行过程 / 54
4.6.1 ; 定义 / 54
4.6.2 ; 应用 / 56
4.6.3 ; 过程调用接口 – apoc.cypher.run / 56
4.6.4 ; 示例 – apoc.cypher.run / 56
4.6.5 ; 过程调用接口 – apoc.cypher.runTimeboxed / 56
4.6.6 ; 示例 – apoc.cypher.runTimeboxed / 57
4.6.7 ; 过程调用接口 – apoc.cypher.doIt / 58
4.6.8 ; 示例 – apoc.cypher.doIt / 58
4.6.9 ; 过程调用接口 – apoc.cypher.runFiles / 59
4.6.10 ; 过程调用接口 – apoc.cypher.runSchemaFiles / 60
4.6.11 ; 过程调用接口 – apoc.cypher.parallel / 60
4.6.12 ; 示例 – apoc.cypher.parallel / 61
4.6.13 ; 过程调用接口 – apoc.cypher.mapParallel / 61
4.6.14 ; 示例 – apoc.cypher.mapParallel / 61
4.7 ; Cypher执行的条件分支 / 62
4.7.1 ; 定义 / 62
4.7.2 ; 应用 / 62
4.7.3 ; 过程调用接口 – apoc.*.when / 62
4.7.4 ; 示例 – apoc.when / 63
4.7.5 ; 过程调用接口 – apoc.case / 63
4.7.6 ; 示例 – apoc.cypher.*case / 64
第5章 ; 数据导入和导出 / 65
5.1 ; 数据导入和导出概述 / 65
5.2 ; 导出到CSV文件 – export.csv.* / 69
5.2.1 ; 定义 / 69
5.2.2 ; 应用 / 69
5.2.3 ; 过程概述 / 70
5.2.4 过程调用接口 – export.csv.all / 70
5.2.5 示例 – export.csv.all / 70
5.2.6 过程调用接口 – export.csv.data / 71
5.2.7 示例 – export.csv.data / 71
5.2.8 过程调用接口 – export.csv.graph / 72
5.2.9 示例 – export.csv.graph / 72
5.2.10 过程调用接口 – export.csv.query / 73
5.2.11 示例 – export.csv.query / 73
5.3 导出到JSON文件 / 73
5.3.1 定义 / 73
5.3.2 应用 / 74
5.3.3 过程概述 / 74
5.3.4 过程调用接口 – export.json.all / 74
5.3.5 示例 – export.json.all / 74
5.3.6 过程调用接口 – export.json.data / 74
5.3.7 示例 – export.json.data / 75
5.3.8 过程调用接口 – export.csv.graph / 75
5.3.9 示例 – export.json.graph / 76
5.3.10 过程调用接口 – export.json.query / 76
5.3.11 示例 – export.json.query / 76
5.4 导出到Cypher查询文件 / 77
5.4.1 定义 / 77
5.4.2 应用 / 77
5.4.3 过程概述 / 77
5.4.4 过程调用接口 – export.cypher.all / 77
5.4.5 示例 – export.cypher.all / 78
5.4.6 过程调用接口 – export.cypher.data / 79
5.4.7 示例 – export.cypher.data / 79
5.4.8 过程调用接口 – export.cypher.graph / 79
5.4.9 示例 – export.cypher.graph / 80
5.4.10 过程调用接口 – export.cypher.query / 80
5.4.11 示例 – export.cypher.query / 81
5.4.12 过程调用接口 – export.cypher.schema / 81
5.4.13 示例 – export.cypher.schema / 82
5.5 导入CSV文件 / 82
5.5.1 定义 / 82
5.5.2 应用 / 82
5.5.3 过程概述 / 82
5.5.4 过程调用接口 – apoc.load.csv / 83
5.5.5 示例 – apoc.load.csv / 84
5.6 导入JSON数据 / 85
5.6.1 定义 / 85
5.6.2 应用 / 87
5.6.3 过程概述 / 87
5.6.4 过程调用接口 – apoc.load.json / 87
5.6.5 示例 – apoc.load.json / 88
5.7 导入XML 文件 / 90
5.7.1 定义 / 90
5.7.2 导入XML文档 – apoc.xml.import / 90
5.7.3 示例 – apoc.xml.import / 92
5.7.4 XML文档加载 – apoc.load.xml / 94
5.7.5 示例 – apoc.load.xml / 95
5.8 访问其他Neo4j数据库 / 96
5.8.1 概述 / 96
5.8.2 过程定义 – apoc.bolt.execute / 97
5.8.3 过程调用接口 – apoc.bolt.execute / 97
5.8.4 示例 – apoc.bolt.execute / 98
5.8.5 过程定义 – apoc.bolt.load / 99
5.9 从JDBC源导入数据 / 99
5.9.1 概述 / 99
5.9.2 过程定义 – apoc.load.driver / 101
5.9.3 过程调用接口 – apoc.load.driver / 101
5.9.4 过程定义 – apoc.load.jdbc / 102
5.9.5 过程调用接口 – apoc.load.jdbc / 102
5.9.6 示例 – apoc.load.jdbc / 102
5.9.7 过程定义 – apoc.load.jdbcUpdate / 103
5.9.8 过程调用接口 – apoc.load.jdbcUpdate / 103
5.9.9 示例 – apoc.load.jdbcUpdate / 104
5.9.10 过程定义 – apoc.model.jdbc / 104
5.9.11 过程调用接口 – apoc.model.jdbc / 104
5.9.12 示例 – apoc.model.jdbc / 105
第6章 图重构 / 107
6.1 图重构概述 / 107
6.2 克隆节点 / 108
6.2.1 定义 / 108
6.2.2 过程概述 / 109
6.2.3 过程调用接口 – apoc.refactor.cloneNodes / 109
6.2.4 示例 – apoc.refactor.cloneNodes / 109
6.3 克隆节点及其关系 / 110
6.3.1 定义 / 110
6.3.2 过程概述 / 110
6.3.3 过程调用接口 – apoc.refactor.cloneNodesWithRelationships / 110
6.4 克隆子图 / 110
6.4.1 定义 / 110
6.4.2 过程概述 / 111
6.4.3 过程调用接口 – apoc.refactor.cloneSubgraph / 111
6.4.4 示例 – apoc.refactor.cloneSubgraph / 111
6.5 合并节点 / 112
6.5.1 定义 / 112
6.5.2 过程概述 / 112
6.5.3 过程调用接口 – apoc.refactor.mergeNodes / 112
6.5.4 示例 – apoc.refactor.mergeNodes / 112
6.6 合并关系 / 113
6.6.1 定义 / 113
6.6.2 过程概述 / 113
6.6.3 过程调用接口 – apoc.refactor.mergeRelationships / 114
6.6.4 示例 – apoc.refactor.mergeRelationships / 114
6.7 重定向关系 / 115
6.7.1 定义 / 115
6.7.2 过程概述 / 115
6.7.3 过程调用接口 – apoc.refactor.from / 115
6.7.4 示例 – apoc.refactor.from / 116
6.8 反转关系 / 116
6.8.1 定义 / 116
6.8.2 过程概述 / 116
6.8.3 过程调用接口 – apoc.refactor.invert / 117
6.8.4 示例 – apoc.refactor.invert / 117
6.9 设置关系类型 / 117
6.9.1 定义 / 117
6.9.2 过程概述 / 118
6.9.3 过程调用接口 – apoc.refactor.setType / 118
6.9.4 示例 – apoc.refactor.setType / 118
6.10 将关系转换成节点 / 118
6.10.1 定义 / 118
6.10.2 过程概述 / 119
6.10.3 过程调用接口 – apoc.refactor.extractNode / 119
6.10.4 示例 – apoc.refactor.extractNode / 119
6.11 将节点转换为关系 / 120
6.11.1 定义 / 120
6.11.2 过程概述 / 120
6.11.3 过程调用接口 – apoc.refactor.collapseNode / 120
6.11.4 示例 – apoc.refactor.cloneNodes / 121
6.12 标准化为布尔值 / 121
6.12.1 定义 / 121
6.12.2 过程概述 / 121
6.12.3 过程调用接口 – apoc.refactor.normalizeAsBoolean / 121
6.12.4 示例 – apoc.refactor.normalizeAsBoolean / 122
6.13 分类 / 123
6.13.1 定义 / 123
6.13.2 过程概述 / 123
6.13.3 过程调用接口 – apoc.refactor.categorize / 123
6.13.4 示例 – apoc.refactor.categorize / 124
6.14 重命名 / 125
6.14.1 定义 / 125
6.14.2 过程概述 / 125
6.14.3 示例 – apoc.refactor.rename.nodeProperty / 125
第7章 数据库运维 / 127
7.1 数据库运维概述 / 127
7.2 使用触发器 / 129
7.2.1 概述 / 129
7.2.2 过程概述 – apoc.trigger.add / 130
7.2.3 过程调用接口 – apoc.trigger.add / 131
7.2.4 示例 – apoc.trigger.add / 131
7.3 管理索引 / 132
7.3.1 概述 / 132
7.4 查看元数据 / 133
7.4.1 概述 / 133
7.4.2 过程概述 – apoc.meta.* / 134
7.4.3 过程调用接口 – apoc.meta.* / 134
7.4.4 示例 – apoc.meta.* / 135
7.5 数据库监控 / 136
7.5.1 概述 / 136
7.5.2 过程概述 – apoc.monitor.* / 136
7.5.3 过程调用接口 – apoc.monitor.* / 136
7.5.4 示例 – apoc.monitor.* / 136
第8章 工具函数和过程 / 138
8.1 工具函数和过程概述 / 138
8.2 节点相关操作 / 143
8.2.1 概述 / 143
8.3 路径相关操作 / 145
8.3.1 概述 / 145
8.3.2 函数概述 – apoc.path.combine / 146
8.3.3 函数调用接口 – apoc.path.combine / 146
8.3.4 示例 – apoc.path.combine / 146
8.3.5 函数概述 – apoc.path.create / 147
8.3.6 函数调用接口 – apoc.path.create / 147
8.3.7 示例 – apoc.path.create / 147
8.3.8 函数概述 – apoc.path.elements / 147
8.3.9 函数调用接口 – apoc.path.elements / 147
8.3.10 示例 – apoc.path.elements / 148
8.3.11 函数概述 – apoc.path.slice / 148
8.3.12 函数调用接口 – apoc.path.slice / 148
8.3.13 示例 – apoc.path.slice / 148
8.4 并行节点搜索 / 149
8.4.1 概述 / 149
8.4.2 函数概述 – apoc.search.node / 150
8.4.3 函数调用接口 – apoc.search.node / 150
8.4.4 示例 – apoc.search.node / 150
8.5 地图和空间计算相关功能 / 150
8.5.1 概述 / 150
8.5.2 过程概述 – apoc.spatial.geocode / 152
8.5.3 过程调用接口 – apoc.spatial.geocode / 152
8.5.4 示例 – apoc.spatial.geocode / 152
8.5.5 过程概述 – apoc.spatial.reverseGeocode / 153
8.5.6 过程调用接口 – apoc.spatial.reverseGeocode / 153
8.5.7 示例 – apoc.spatial.reverseGeocode / 153
8.6 集合相关操作 / 154
8.7 图生成 / 157
8.7.1 概述 / 157
8.7.2 过程概述 – apoc.generate.er / 157
8.7.3 过程调用接口 – apoc.generate.er / 158
8.7.4 示例 – apoc.generate.er / 158
8.7.5 过程概述 – apoc.generate.ws / 159
8.7.6 过程调用接口 – apoc.generate.ws / 160
8.7.7 示例 – apoc.generate.ws / 160
8.7.8 过程概述 – apoc.generate.ba / 161
8.7.9 过程调用接口 – apoc.generate.ba / 162
8.7.10 示例 – apoc.generate.ba / 163
8.7.11 过程概述 – apoc.generate.complete / 164
8.7.12 过程调用接口 – apoc.generate.complete / 164
8.7.13 示例 – apoc.generate.complete / 164
8.7.14 过程概述 – apoc.generate.simple / 165
8.7.15 过程调用接口 – apoc.generate.simple / 165
8.7.16 示例 – apoc.generate.simple / 165
第9章 虚拟图 / 167
9.1 虚拟图概述 / 167
9.2 虚拟节点和关系 / 168
9.2.1 概述 / 168
9.2.2 过程概述 – apoc.create.vNode / 170
9.2.3 过程调用接口 – apoc.create.vNode / 171
9.2.4 示例 – apoc.create.vNode / 171
9.2.5 过程概述 – apoc.create.vNodes / 171
9.2.6 过程调用接口 – apoc.create.vNodes / 171
9.2.7 示例 – apoc.create.vNodes / 172
9.2.8 过程概述 – apoc.create.vRelationship / 172
9.2.9 过程调用接口 – apoc.create.vRelationship / 172
9.2.10 示例 – apoc.create.vRelationship / 173
9.2.11 过程概述 – apoc.create.vPattern / 174
9.2.12 过程调用接口 – apoc.create.vPattern / 174
9.2.13 示例 – apoc.create.vPattern / 174
9.2.14 过程概述 – apoc.create.vPatternFull / 175
9.2.15 过程调用接口 – apoc.create.vPatternFull / 175
9.2.16 过程概述 – apoc.nodes.collapse / 176
9.2.17 过程调用接口 – apoc.nodes.collapse / 176
9.2.18 示例 – apoc.nodes.collapse / 177
9.3 虚拟图 / 178
9.3.1 概述 / 178
9.3.2 过程概述 – apoc.graph.fromData / 179
9.3.3 过程调用接口 – apoc.graph.fromData / 179
9.3.4 示例 – apoc.graph.fromData / 179
9.3.5 过程概述 – apoc.graph.fromPath / 179
9.3.6 过程调用接口 – apoc.graph.fromPath / 180
9.3.7 示例 – apoc.graph.fromPath / 180
9.3.8 过程概述 – apoc.graph.fromPaths / 180
9.3.9 过程概述 – apoc.graph.fromCypher / 180
9.3.10 过程调用接口 – apoc.graph.fromCypher / 180
9.3.11 示例 – apoc.graph.fromCypher / 181
9.3.12 过程概述 – apoc.graph.fromDocument / 181
9.3.13 过程调用接口 – apoc.graph.fromDocument / 181
9.3.14 示例 – apoc.graph.fromDocument / 182
9.3.15 过程概述 – apoc.nodes.group / 183
9.3.16 过程调用接口 – apoc.nodes.group / 184
9.3.17 示例 – apoc.nodes.group / 185
第三部分 ALGO扩展包使用指南
第10章 路径搜索 / 189
10.1 路径搜索概述 / 189
10.2 广度和深度优先搜索 / 192
10.3 最短路径 / 192
10.3.1 概述 / 192
10.3.2 过程概述 – apoc.shortestPath* / 193
10.3.3 过程调用接口 – algo.shortestPath* / 193
10.3.4 示例 – algo.shortestPath / 194
10.4 A*最短路径 / 196
10.4.1 概述 / 196
10.4.2 过程概述 – apoc.shortestPath.astar* / 196
10.4.3 过程调用接口 – algo.shortestPath* / 196
10.4.4 示例 – algo.shortestPath.astar* / 197
10.5 单源起点最短路径 / 198
10.5.1 概述 / 198
10.5.2 过程概述 – apoc.shortestPath.deltaStepping* / 199
10.5.3 过程调用接口 – algo.shortestPath.deltaStepping* / 199
10.5.4 示例 – algo.shortestPath.deltaStepping* / 200
10.6 全图最短路径 / 201
10.6.1 概述 / 201
10.6.2 过程概述 – algo.allShortestPaths* / 201
10.6.3 过程调用接口 – algo.allShortestPaths* / 201
10.6.4 示例 – algo.allShortestPaths / 202
10.7 K-条最短路径 / 203
10.7.1 概述 / 203
10.7.2 过程概述 – algo.kShortestPaths* / 204
10.7.3 过程调用接口 – algo.kShortestPaths* / 204
10.7.4 示例 – algo.kShortestPaths / 206
10.8 最小生成树 / 206
10.8.1 概述 / 206
10.8.2 过程概述 – algo.spanningTree.* / 207
10.8.3 过程调用接口 – algo.spanningTree.minimum / 207
10.8.4 示例 – algo.spanningTree.minimum / 208
10.9 随机游走 / 209
10.9.1 定义 / 209
10.9.2 应用 / 209
10.9.3 过程概述 / 209
10.9.4 简单过程调用接口 / 210
10.9.5 完整过程调用接口 / 210
10.9.6 示例 – algo.randomWalk / 211
第11章 社团检测 / 212
11.1 社团检测概述 / 212
11.1.1 算法一览 / 212
11.1.2 图的聚集成群特征 / 214
11.1.3 过程使用说明 / 215
11.2 三角计数和集聚系数 / 216
11.2.1 概述 / 216
11.2.2 过程概述 – algo.triangle.stream / 217
11.2.3 过程调用接口 – algo.triangle* / 217
11.2.4 示例 – algo.triangle.stream / 218
11.2.5 过程概述 – algo.triangleCount* / 218
11.2.6 过程调用接口 – algo.triangle* / 218
11.2.7 示例 – algo.triangleCount.stream / 219
11.3 强连通分量 / 219
11.3.1 概述 / 219
11.3.2 过程概述 – algo.scc / 220
11.3.3 过程调用接口 – algo.scc / 221
11.4 连通分量 / 221
11.4.1 概述 / 221
11.4.2 过程概述 – algo.unionFind* / 222
11.4.3 过程调用接口 – algo.unionFind* / 223
11.4.4 示例 – algo.unionFind* / 224
11.5 标签传播算法 / 224
11.5.1 概述 / 224
11.5.2 过程概述 – algo.labelPropagation* / 226
11.5.3 过程调用接口 – algo.labelPropagation* / 226
11.5.4 示例 – algo.unionFind* / 227
11.6 Louvain模块度算法 / 228
11.6.1 概述 / 228
11.6.2 过程概述 – algo.louvain* / 230
11.6.3 过程调用接口 – algo.louvain* / 230
11.6.4 示例 – algo.louvain* / 232
11.7 小结 / 233
第12章 中心性算法 / 234
12.1 中心性算法概述 / 234
12.2 度中心性 / 237
12.2.1 概述 / 237
12.2.2 过程概述 – algo.degree* / 238
12.2.3 过程调用接口 – algo.degree* / 238
12.2.4 示例 – algo.degree* / 239
12.3 紧密中心性 / 240
12.3.1 概述 / 240
12.3.2 过程概述 – algo.closeness* / 241
12.3.3 过程调用接口 – algo.closeness* / 241
12.3.4 示例 – algo.closeness* / 242
12.4 协调中心性 / 242
12.4.1 概述 / 242
12.4.2 过程概述 – algo.harmonic* / 243
12.4.3 过程调用接口 – algo.harmonic* / 243
12.4.4 示例 – algo.harmonic* / 244
12.5 间接中心性 / 244
12.5.1 概述 / 244
12.5.2 过程概述 – algo.betweenness* / 245
12.5.3 过程调用接口 – algo.betweenness* / 246
12.5.4 示例 – algo.betweenness* / 247
12.6 特征向量中心性 / 247
12.6.1 概述 / 247
12.6.2 过程概述 – algo.eigenvector* / 248
12.6.3 过程调用接口 – algo.eigenvector* / 248
12.6.4 示例 – algo.eigenvector* / 249
12.7 页面排行 / 250
12.7.1 概述 / 250
12.7.2 过程概述 – algo.pageRank* / 252
12.7.3 过程调用接口 – algo.pageRank* / 252
12.7.4 示例 – algo.pageRank* / 253
12.8 小结 / 254
第13章 相似度算法 / 255
13.1 相似度算法概述 / 255
13.1.1 相似度过程 / 255
13.1.2 什么是相似度 / 256
13.2 Jaccard相似度 / 257
13.2.1 概述 / 257
13.2.2 函数/过程概述 – algo.similarity.jaccard* / 258
13.2.3 调用接口 – algo.similarity.jaccard / 258
13.2.4 示例 – algo.similarity.jaccard* / 260
13.3 重叠相似度 / 260
13.3.1 概述 / 260
13.3.2 函数/过程概述 – algo.similarity.overlap* / 261
13.3.3 调用接口 – algo.similarity.overlap / 261
13.4 余弦相似度 / 262
13.4.1 概述 / 262
13.4.2 函数/过程概述 – algo.similarity.cosine* / 263
13.4.3 调用接口 – algo.similarity.cosine / 263
13.4.4 示例 – algo.similarity.cosine* / 264
13.5 欧几里德相似度 / 265
13.5.1 概述 / 265
13.5.2 函数/过程概述 – algo.similarity.euclideanDistance* / 265
13.5.3 调用接口 – algo.similarity.euclideanDistance* / 266
13.5.4 示例 – algo.similarity.euclideanDistance * / 267
第四部分 Neo4j数据库扩展开发指南
第14章 数据库扩展开发 / 271
14.1 数据库扩展开发概述 / 271
14.2 关于安全性 / 272
14.2.1 沙箱 / 272
14.2.2 白名单 / 273
14.3 创建数据库扩展项目 / 273
14.3.1 创建新项目 / 273
14.3.2 指定项目信息 / 275
14.3.3 创建程序包和过程类 / 277
14.4 创建数据库扩展过程 / 279
14.4.1 第一个过程 – hello / 279
14.4.2 编译和打包 – hello / 281
14.4.3 部署和测试 – hello / 283
14.4.4 小结 / 283
14.5 开发扩展函数 / 285
14.5.1 调用扩展函数 / 285
14.5.2 开发扩展函数 / 285
14.6 开发扩展汇总函数 / 286
14.6.1 调用汇总函数 / 286
14.6.2 编写用户定义的汇总函数 / 286
14.7 细粒度图数据访问控制 / 287
14.7.1 方法 / 288
14.7.2 定义用户和角色 / 288
14.7.3 实现扩展过程 / 288
第15章 自定义的图遍历 / 289
15.1 自定义的图遍历概述 / 289
15.2 Neo4j 遍历框架 / 289
15.2.1 主要概念 / 290
15.2.2 遍历框架Java API / 290
15.3 生成测试图 / 292
15.4 k-度邻居统计 – Cypher的实现 / 292
15.5 k-度邻居统计 – 扩展过程的实现 / 293
15.5.1 创建过程 / 293
前沿
本书的内容
Neo4j是当今全球领先的图数据库软件,起源于开源的图数据库项目,经过十余年的发展,已经在很多企业、研究机构中有着广泛和成功的应用。随着数据库规模的增加,以及对图算法类型、查询性能和数据库管理功能等要求越来越高,Neo4j推出了扩展包APOC和ALGO以满足这些要求。
APOC 和ALGO 都是Neo4j开发和共享的数据库扩展,它们包含了很多实用的算法过程和函数。APOC提供了丰富的与查询执行、数据集成、数据库管理等相关的过程和函数,而ALGO则包含常用的图算法过程。APOC是Awesome Procedures Of Cypher的简称,同时也是电影《黑客帝国》中的一个角色;ALGO的名字就很容易明白了,它就是英文ALGOrithms(算法)的开始部分。
APOC和ALGO的内容丰富、功能强大,作为Neo4j数据库功能的扩充,是实现高性能查询、数据库集成、复杂算法等复杂应用所必须的。然而,国内的技术人员苦于一直没有关于APOC和ALGO介绍的中文资料,无法真正发挥它们的价值。另一方面,英文在线文档中使用的数据样例也不是中国用户所熟悉和了解的。这对于深刻理解像图算法这样的复杂概念来说又增加了不少难度。
出于上面的原因,我们在策划《图数据库技术丛书》系列的第三本时,选择了介绍APOC和ALGO扩展包。
本书基于Neo4j数据库3.5版本及其对应的ALGO和APOC扩展包,详细介绍了近二百个主要过程和函数的定义、相关理论、使用方法、代码样例,让广大Neo4j图数据库的设计和开发人员能够快速掌握正确和高效的图数据库分析方法及其应用开发技能。
本书分成四个部分:
(1)概述(第1~2章),介绍Neo4j数据库扩展的起源和安装配置方法;
(2)APOC扩展包使用指南(第3~9章),介绍APOC中7类主要过程和方法的使用;
(3)ALGO扩展包使用指南(第10~13章),介绍ALGO中4类图算法相关过程和方法的使用;
(4)Neo4j数据库扩展开发指南(第14~15章),介绍使用Java开发数据库扩展过程和函数的方法。
全书共分15章,各章节介绍如下:
第1章 Neo4j图数据库扩展概述。回顾Neo4j图数据库扩展的起源和来历,并概述两个主要扩展包APOC和ALGO的内容。对于2020年4月最新发布的Graph Data Science扩展包,及其对ALGO扩展包中相关图算法过程所做的接口改变也进行了介绍。
第2章 扩展包的安装和配置。介绍扩展包在不同Neo4j版本中的安装、配置和测试方法。
第3章 路径扩展过程。介绍APOC中与路径扩展相关的过程,通过实例说明如何对图中节点和关系进行更加高效的遍历,也介绍了APOC中对子图操作的过程。
第4章 查询任务管理。介绍查询的更新方法,特别是如何通过控制批次大小减少事务对内存的要求、如何通过指定并发性提高查询执行性能。本章还介绍了动态Cypher查询执行方法和条件分支执行。
第5章 数据导入和导出。介绍从各种数据源,包括XML、JSON、JDBC以及外部Neo4j数据库导入数据到Neo4j的方法,以及从Neo4j导出图或图的一部分到各种格式/目的数据存储的方法。
第6章 图重构。图重构是对图数据库中节点、关系和属性定义的变更和转换操作。APOC提供的重构过程支持节点的合并、到关系的转换,关系的合并、重定向、反转、到节点的转换,根据属性值创建节点等操作。
第7章 数据库运维。主要介绍APOC中关于数据库触发器、索引管理、元数据和监控相关指标的过程和函数。
第8章 工具函数和过程。介绍APOC中路径对象相关操作、地图相关过程、集合操作;本章还介绍了几种主要的图生成过程。
第9章 虚拟图。虚拟图是仅存在于内存的图。虚拟图的创建和查询操作包括虚拟节点和关系的创建和查询。在内存中的图对象是许多图算法的输入。
第10章 路径搜索。最短路径是图算法和分析中最基本的一类方法。ALGO扩展包提供若干常用最短路径搜索方法,以及最小生成树和随机游走的算法过程。
第11章 社团检测。介绍ALGO包中提供的几类相关算法过程:三角结构搜索、连通分量、标签传播、模块度方法。
第12章 中心性算法。介绍ALGO包中提供的几类中心性算法过程:维度中心性、紧密中心性、协调中心性、间接中心性、特征向量中心性和页面排行。
第13章 相似度算法。介绍ALGO包中支持的几种计算节点和/或关系相似度的函数和方法,包括Jaccard相似度、重叠相似度、余弦相似度以及几何相似度。对图学习相关概念和方法,例如特征工程、图嵌入也做了介绍。
第14章 数据库扩展开发。详细、完整地介绍如何使用Java开发客户化的Neo4j数据库扩展过程和函数。
第15章 自定义的图遍历。在第14章的基础之上,进一步深入介绍如何基于Neo4j的“遍历框架”实现高效的图遍历过程。
如何使用本书
本书提供APOC和ALGO扩展包中多数过程和方法的使用参考,每个过程或方法均包括:
? 概述:说明过程和函数的用途、相关理论和方法;
? 调用接口:查询、参数说明和返回值;
? 示例:基于样例数据的Cypher。
本书章节按照过程所属的扩展包(APOC或ALGO)、然后是功能类别进行组织。如果你知道要进行什么样的操作、实现什么样的功能,可以通过目录找到对应的章节。
如果你要查找特定的过程或函数,可以从“目录”后的“ALGO过程和函数索引”、“APOC过程和函数索引”按照字母顺序找到它们所在的章节。
格式及说明
为方便区别不同的内容,本书中使用的特定排版格式。举例说明如下(按照在书中出现的先后顺序排列)。
(1)Linux命令行:
U
N
I
X mkdir plugins
pushd plugins
wget https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/3.5/apoc-3.5-all.jar
popd
docker run --rm -e NEO4J_AUTH=none -p 7474:7474 -v $PWD/plugins:/plugins -p 7687:7687 neo4j:3.5
(2)Cypher查询(包含注释行):
C
Y
P
H
E
R // 2.2 (1) 测试ALGO扩展包安装
CALL algo.list
// 2.2 (2) 测试APOC扩展包安装
RETURN apoc.version()
(3)过程定义:
下面的图例表示过程apoc.path.expandConfig:
? 支持有向图;
? 无关于权重图,即图中关系上是否带权重属性对过程没有影响;
? 返回结果到客户端;
? 不更新数据库;
? 低复杂度,通常是O(N)、O(LogN)或O(N*LogN);
? 不支持并行执行(单进程)。
过程 apoc.path.expandConfig
(4)过程接口:
过程接口 CALL apoc.path.subgraphNodes(
startNode
Node/list,config
) YIELD node
(5)Neo4j数据库配置选项(在neo4j.conf文件中指定):
neo4j.conf apoc.jobs.pool.num_threads=10
(6)CSV文件内容:
C
S
V name,genre,zi,weapon,title
刘备,男,玄德,双锏,昭烈皇帝
关羽,男,云长,青龙偃月刀;长剑,汉寿亭候
(7)JSON文件内容:
J
S
O
N {
"store": {
"book": [
{
"category": "reference"
}
],
"bicycle": {
"color": "red", "price": 19.95
}
},
"expensive": 10
}
(8)XML文档内容:
XML
<目录>
<图书 id="bk101">
<作者>罗贯中
<书名>三国演义
<出版日期>2000-10-01
<简介>中国古代四大名著之一。三国指的是魏、蜀汉、吴。
(9)Java代码:
J
A
V
A package com.mypackage;
import org.neo4j.graphdb.GraphDatabaseService;
public class Procedures {
@Context
public GraphDatabaseService db;
@Context
public Log log;
}
(10)重要技巧,建议使用:
重要技巧 仅在对路径进行扩展时定义序列才是重要的。因此,如果只需要搜索能够到达的节点,或者路径的序列由其他规则选择,那应当避免使用序列sequence参数。例如,我们建议在apoc.path.subgraphNodes()、apoc.path.subgraphAll()和apoc.path.spanningTree()过程中不要使用序列,因为这些过程中实现的高效匹配唯一节点算法会干扰序列化路径寻址的执行。
(11)警告信息,避免使用:
避免使用 除非明确知道需求、数据特征、而且已经测试过相关逻辑,否则不要使用NONE作为唯一性规则,因为这样会在遍历有环的图时形成无限循环,从而影响数据库运行。
(12)重要提示,谨慎使用:
小心使用 仅当数据库是存储在SSD(固态硬盘)时才使用parallel:true选项,因为SSD具有更好的随机读写速率。如果是物理硬盘,则不要使用并行选项,因为这反而会降低整体执行效率。
源码下载与技术支持
本书中所有样例数据、Cypher代码和Java项目和代码均可以在这里免费访问:
https://github.com/Joshua-Yu/neo4j-extensions-book
如有问题,欢迎在Neo4j中文社区中留言:http://neo4j.com.cn。
作者联系邮箱:张帜:zhizh@we-yun.com,俞方桦:yufanghua@yahoo.com。
致 谢
每一本书从构思到编写到出版都不是一蹴而就的,其中不仅仅有编者的辛勤努力,也与更多人的支持和付出密不可分。这里,我首先要感谢张帜老师,作为丛书的主编,是他激励我写这本书、积极与出版社联系,并在撰写过程中给予我很多指导。
我还要感谢Neo4j的同事们。在写作过程中无论什么时候我有问题,他们都及时耐心地回复我,他们似乎是7×24小时在线、永远不知疲倦。对于本书的内容,他们也提出了宝贵的建议和意见。
我要感谢来自华为和平安科技的用户们,他们提供的关于过程文档和代码的反馈意见,不仅对本书的内容有积极的参考价值,还使得存在的代码缺陷、文档疏漏得到及时修正。
特别感谢清华大学出版社的编辑老师们,有了他们的竭力支持和精雕细琢,本书才得以顺利问世。
在本书撰写的过程中,尤其感谢我的家人给予的支持和帮助;特别地,谨以此书纪念我的母亲。
期望这本书能够给中国大数据和图数据库领域的同行们提供有益的借鉴和参考,特别为图数据库的研究和应用发展尽绵薄之力。由于时间仓促,以及笔者能力所限,书中难免有错误及不足之处,敬请读者海涵,并提出宝贵意见。我们会在后续的版本中予以更正和补充。
俞方桦
2020年1月3日于悉尼
Neo4j 图数据库扩展指南:APOC和ALGO pdf下载声明
本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版