首页 > 图书中心 >图书详情
Neo4j 图数据库扩展指南:APOC和ALGO
作者:俞方桦
丛书名:图数据库技术丛书
定价:79元
印次:1-1
ISBN:9787302555483
出版日期:2020.07.01
印刷日期:2020.06.18
本书共13章,全面、系统和详尽地介绍Neo4j图数据库扩展的概念、APOC和ALGO扩展包的使用、以及开发服务器扩展的方法。内容分为四个部分,依次为:Neo4j 图数据库扩展介绍;APOC 扩展包函数和过程指南;ALGO 扩展包函数和过程指南;开发和测试方法。
more >前 言 本书的内容 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 <id>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 <?xml version="1.0"?> <目录> <图书 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日于悉尼
more >