您好,欢迎来到聚文网。 登录 免费注册
Neo4j实战

Neo4j实战

  • 装帧: 平装
  • 出版社: 机械工业出版社
  • 作者: (英)阿列克萨·武科蒂奇(Aleksa Vukotic) 等 著;张秉森,孔倩,张晨策 译
  • 出版日期: 2016-04-01
  • 商品条码: 9787111531128
  • 版次: 1
  • 开本: 16开
  • 页数: 246
  • 出版年份: 2016
定价:¥59 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
本书以实例为依托,详细地对实例做建模分析,并给出经过测试的源代码,读者可以按照书的介绍一步一步地实现每一个实例,这是一种学习建模和编程的极为便捷的方法。本书也是一本对使用Neo4j对图形数据进行设计、建模和查询的综合指导书。书中探索了处理和查询图形数据的各种工具及其强大功能,包括图形遍历的概念及其使用方法,也讨论了Neo4j的图形查询语言Cypher和如何使用SpringDataNeo4j将Neo4j集成到应用程序中,以及如何使用服务器模式和嵌入式模式等内容。
作者简介
Aleksa Vukotic之前在Open Credo担任数据管理实践,现任Noble Group的开发平台部主管。他是一个软件架构师和开发者、敏捷编程的倡导者、作者和培训师,并且是许多Neo4j项目的开发者,如用图形数据模型解决复杂的访问控制列表和推荐引擎问题。
Nicki Watt是Open Credo的首席顾问。她务实、心灵手巧,是一个问题解决专家,乐于使用“正确的工具完成工作”。Nicki一直使用Neo4j等开源工具以及框架参与各种项目,包括对基于引擎问题的探究和推荐。她也是Spring Data Neo4j项目的贡献者之一。
Tareq Abedrabbo是Open Credo的首席技术官(CTO)。他对编程语言有着强烈的兴趣,从Scala和Python到Google Go。他在几个NoSQL技术领域(包括Neo4j、MongoDB和Redis)有着很好丰富的知识,并在很早以前就开始积极从事Spring项目,是Spring Web Service项目的核心成员。 
目录
译者序
序言
前言
作者简介
第一部分Neo4j概述
第1章Neo4j数据库的一个应用案例3
1.1为什么要有Neo4j4
1.2关系数据库中的图形数据4
1.3Neo4j中的图形数据8
1.4大数据下的SQL联接操作与Neo4j图形遍历的对比10
1.5图形13
1.6Neo4j在NoSQL领域的地位13
1.6.1主键值存储14
1.6.2列族存储14
1.6.3面向文档的数据库15
1.6.4图形数据库15
1.6.5与NoSQL类数据库的比较15
1.7Neo4j具有与ACID兼容的数据格式16
1.8本章小结17
第2章Neo4j的数据模型18
2.1Neo4j中数据模型的类型18
2.1.1图表建模的一个简单实例19
2.1.2图表建模的一个复杂实例20
2.2领域建模22
2.3更多实例26
2.3.1地铁车站实例26
2.3.2乐队成员实例27
2.4本章小结29
第3章Neo4j开发入门30
3.1图形数据结构建模30
3.2使用Neo4jAPI34
3.2.1创建节点34
3.2.2创建关系36
3.2.3为节点添加属性38
3.2.4节点类型策略40
3.2.5为关系添加属性41
3.3节点标签43
3.4本章小结46
第4章强大的图形遍历功能47
4.1使用Neo4j核心JavaAPI进行遍历47
4.1.1寻找起始节点48
4.1.2遍历直接关系49
4.1.3遍历深度为2的关系51
4.1.4内存使用注意事项53
4.2使用Neo4j的遍历API进行遍历55
4.2.1使用Neo4j的内置遍历结构55
4.2.2实现一个自定义评估函数56
4.3本章小结59
第5章数据索引60
5.1创建索引项60
5.2通过邮箱地址查找用户62
5.3对多个匹配结果的处理64
5.4对索引过的数据进行修改的处理65
5.5自动索引66
5.5.1模式索引66
5.5.2自动索引69
5.6索引的成本/效益权衡70
5.6.1索引查询的性能优势71
5.6.2当更新和插入数据时索引对性能的影响72
5.6.3索引的存储73
5.7本章小结73
第二部分Neo4j应用开发
第6章Neo4j的查询语言Cypher77
6.1Cypher简介77
6.1.1Cypher入门78
6.1.2执行Cypher查询79
6.2Cypher的基本句法85
6.2.1模式匹配85
6.2.2查找起始节点89
6.2.3过滤数据92
6.2.4获得结果93
6.3用Cypher更新图形数据96
6.3.1创建新图形实体97
6.3.2删除数据99
6.3.3更新节点和关系属性99
6.4高级Cypher100
6.4.1聚合100
6.4.2函数101
6.4.3with语句的管道功能103
6.4.4Cypher的兼容性104
6.5本章小结104
第7章事务105
7.1事务的基础知识105
7.1.1添加事务107
7.1.2打好基础,循序渐进108
7.2事务的高级功能109
7.2.1事务的语义109
7.2.2事务中的读取与显式读锁111
7.2.3事务中的写入与显式写锁112
7.2.4无效锁的危害114
7.3与其他事务管理系统的集成114
7.4事务事件116
7.5本章小结117
第8章深度遍历118
8.1遍历的顺序118
8.1.1深度优先119
8.1.2广度优先121
8.1.3深度优先与广度优先顺序的比较122
8.2扩展关系124
8.2.1标准扩展器124
8.2.2用于扩展的顺序关系126
8.2.3自定义扩展器127
8.3管理……性130
8.3.1NODE_GLOBAL……性130
8.3.2NODE_PATH……性132
8.3.3其他……性类型133
8.4双向遍历134
8.5本章小结137
第9章SpringDataNeo4j138
9.1SDN适合做什么138
9.1.1什么是Spring以及Spring与SDN是怎样关联的140
9.1.2SDN适合做什么(及不适合做什么)140
9.1.3从哪里获得SDN141
9.1.4从哪里获得更多的信息141
9.2用SDN建模141
9.2.1原始POJO域建模142
9.2.2注释域模型144
9.2.3建模节点实体145
9.2.4建模关系实体148
9.2.5建模节点实体之间的关系150
9.3访问和持久化实体152
9.3.1支持Spring的配置152
9.3.2Neo4jTemplate类153
9.3.3资源库154
9.3.4其他选项157
9.4对象图形映射选项158
9.4.1简单映射158
9.4.2基于AspectJ的高级映射161
9.4.3对象映射总结164
9.5执行查询和遍历164
9.5.1注释查询164
9.5.2动态派生查询166
9.5.3遍历168
9.6本章小结168
第三部分Neo4j应用实例
第10章Neo4j的嵌入式模式与服务器模式171
10.1使用模式概述171
10.2嵌入式模式173
10.2.1核心Java集成173
10.2.2其他基于JVM的集成176
10.3服务器模式177
10.3.1Neo4j服务器概述178
10.3.2使用细粒度Neo4j服务器模式的RESTAPI179
10.3.3使用CypherNeo4j服务器模式RESTAPI端点181
10.3.4使用远程客户端库帮助访问Neo4j服务器182
10.3.5服务器插件和非托管扩展184
10.4权衡选项184
10.4.1对架构的考虑185
10.4.2对性能的考虑187
10.4.3其他需要考虑的事项190
10.5充分利用服务器模式190
10.5.1避免细粒度操作191
10.5.2使用Cypher192
10.5.3服务器插件194
10.5.4非托管扩展196
10.5.5流RESTAPI198
10.6本章小结199
第11章Neo4j的架构与应用200
11.1高层Neo4j架构200
11.1.1设置场景202
11.1.2硬盘202
11.1.3存储文件203
11.1.4Neo4j缓存205
11.1.5事务日志及可恢复性210
11.1.6编程API211
11.2Neo4j的高可用性212
11.2.1Neo4j集群概述213
11.2.2设置Neo4j集群216
11.2.3复制——读和写的策略218
11.2.4缓存分区222
11.2.5HA小结224
11.3备份225
11.3.1离线备份225
11.3.2在线备份227
11.3.3从备份中还原数据229
11.4本书可能没有涵盖但你可能会关注的问题229
11.4.1安全229
11.4.2监控229
11.5本章小结230
11.6最后的设想230
附录A安装Neo4j服务器231
附录B设置和运行示例程序236
附录C设置使用SDN的项目环境241
附录D获得更多的帮助247
摘要
前    言?Preface从很早以前开始,图形问题就是计算机编程中一些最普遍的问题。回想那时,尤其是在编程时,需要建立层次结构树、访问控制列表和映射表。当要存储图形的时候,程序员将图形转换成表格并使用关系数据库作为低层存储。我们不得不做大量的探究来保存最基本的图形数据,直到有了以Neo4j为代表的图形数据库,才有了其他的选择。
    十多年前,Neo4j就开始了它的生涯,2010年正式发布了1.0版本,2.0版本是在2013年12月发布的。我们当中的大多数人一直在积极使用Neo4j,并且见证了它的发展及在不同项目上的应用。图形数据库,尤其是Neo4j,获得了越来越高的关注度,越来越多的人和公司认识到,对于复杂的、具有挑战性的相互连接的数据,Neo4j是图形数据库中唯一的健壮和坚实的解决方案。
    我们非常高兴能够浓缩我们的真实工作经历及知识编写成这本实践性很强的书。本书将为你打下一个坚实的基础并创建一些帮助你尽快运行Neo4j的项目。
    关于本书Neo4j作为一个图形数据库在过去的大约十年间发生了很大的变化。从一个纯粹在基于Java领域内操作的图形数据库开始,它已经发展成为适应许多语言和框架的图形数据库。
    当我们开始着手写这本书的时候,最新版本是1.9。Neo4j 2.0版本是真正的规则颠覆者,引进了新的特性,包括非常期待的(内置)节点标签的概念。因此本书尽管还有一些与1.x相关的内容,但是已经更新到涵盖了2.0的特色,所有相关的样例代码和例子都已经专门经过了2.0版本的验证。到本书出版时无疑还会有新的版本,然而,本书所采取的深思熟虑的一步一步的方法,应该为你提供了学习、起步和运行任意的核心Neo4j 2.0+版本的基础知识和技能,当然,除了没有预见的巨大变化。
    由于Java是促使Neo4j诞生的语言,因此我们决定使用Java作为主要的语言以演示本书的各种技术和方法。此外,这在以前也是唯一一种可用语言,语言的选择也使我们能够包括一些章节详细讨论如何明确地利用本机核心Neo4j API的优点来做某些工作。这当然对基于Java的客户端是具有很大好处的。然而,如果我们重新从头开始,我们可能会花更多时间来讲Cypher,因为Cypher与图形数据库交互更加容易,且是跨平台的,包括Java、Shell等其他所有平台。然而,我们将这个留作可能的第2版,因为我们仍然相信本书中有许多核心基本概念和方法需要首先传达。本书假设使用的是最新版本的JDK 7。另外,本书附带的样例代码使用Maven作为我们创建依赖工具的选择。对于那些不熟悉Maven的用户,附录B中提供了一个快速入门帮助你起步与进入正常运行。
    应当指出的是,这并不意味着本书只是一本参考书。如果是那样的话,本书的篇幅将会长很多。本书的目标是给你足够的知识并理解每一个希望精通的领域,然后再继续向前。如果你想进一步探索特定的领域,书中提供了相关内容的链接,在那里你可以得到更多的相关信息。
    本书章节编排本书分为三部分。第一部分介绍并且涵盖数据模型、Neo4j入门和强大的遍历功能。第二部分讨论应用程序的开发并且涵盖Cypher和Spring。第三部分讨论产品实例。
    第1章介绍图形数据库的通用概念,包括浏览Neo4j的一些重要方面和最适合的应用场景。该章介绍Neo4j在NoSQL领域中能解决的一些问题,包括与传统关系数据库的对比。
    第2章考察如何及为什么在Neo4j中建模数据,包括在图形数据库中数据建模场景的通用方法。给出了来自不同领域的例子,让你了解在Neo4j中建模的灵活性。
    从第3章我们真正开始动手了。该章介绍Neo4j核心Java API,通过创建一个表示用户社交网络和他们喜欢的电影的图形的所有步骤来加深理解。该章涵盖创建和连接节点以及获取这些节点的附加信息。该章也探讨区分不同类型节点的策略,包括标签的使用。
    第4章建立这个社交网络的域,更深入地探讨核心API,尤其是重点探讨遍历功能(这里讲的是Neo4j遍历API),这是一个查询图形数据库的强大方法。
    第5章介绍Neo4j中可用的索引策略。创建和遍历图形数据是非常棒的,但是你需要一个找到起始点或多个起始点的策略,起始点是图形中开始遍历的点。在查看从Neo4j 2.0版本往后可用的内置索引选项前,你将从查看手动(传统)索引开始。
    第6章介绍Cypher,即Neo4j中人能读懂的查询语言。这一章介绍Cypher的性质,演示对图形操作的基本句法,也涵盖在Neo4j数据库的日常开发和维护中会用到的高级特性。
    第7章重点讨论在NoSQL空间中Neo4j的独特亮点之一——完全支持ACID事务,提供一些不同应用的例子以及在某些方面更深入的探究。
    虽然从第4章开始接触遍历功能,但编写高效的遍历是成功查询图形数据的关键。在第8章,我们更深入地挖掘遍历API的内部方法,因此你可以学习到如何以一个有效的方式用本机API解决最复杂的图形问题。
    第9章讨论面向图形对象的库Spring Data Neo4j(SDN)。尽管SDN不是Neo4j官方提供的,但是该章通过介绍SDN来重点演示Neo4j开源框架如何作为一个库去提供丰富的对象图形模型和Neo4j支持的数据之间进行可靠的、无缝的映射。该章再一次使用我们信任的用户及其所爱电影的社交网络来演示这些要点。
    第10章探讨在Neo4j中使用的两种主要模式,即嵌入式模式和服务器模式,本书主要讲解嵌入式模式的核心概念。该章也介绍了服务器模式,服务器模式可以被任何的客户端使用,并稍微深入地探讨每一种模式,比较各自的优缺点,包括如果你选择的是服务器模式的话,如何充分利用服务器。
    第11章介绍高级Neo4j架构。以该知识为框架,该章探讨当你准备将Neo4j投入到产品中时应该考虑哪些因素,包括扩展和其他使Neo4j高可用性的需求,以及当需要时如何备份和还原你的数据库。
    四个附录指导你完成安装、设置和运行Neo4j,还包括Maven和SDN以及提供寻求更多帮助的信息。
    代码约定和下载本书的所有源代码以代码体形式给出。在许多程序中,以注释的形式指出关键的概念,在文本中有时用编号给出有关代码的附加信息。
    书中给出的大部分代码能够在随带的样例源代码中以多种形式找到。样例源代码可以从华章网站(www.hzbook.com)上免费下载。
    样例源代码以一组JUnit样式的测试结构给出,其目的是强调或演示讨论中的特定代码。附录B给出了如何运行这些样例源代码的说明。
    致谢本书的编写经历了相当长的一段时间,因此,首先和最应该感谢的是我们所有的家人和朋友,他们不知疲倦地与我们在一起、忍受着我们,并且在深夜给我们准备咖啡以便我们能保持旺盛的精力。谢谢你们!
    首先,我们要感谢Open Credo,这是我们在写本书时工作的公司,给我们提供了能够在本书中分享经验的机会——大都是利用工作之余的时间,但是,也占用到非常宝贵的工作时间。这是非常令人感激的!
    特别要感谢Neo4j的朋友们,英国的Jim Webber和Ian Robinson、德国的Michael Hunger和整个朋友圈,他们不断地为Neo4j工作,但最重要的是他们的有价值评论和反馈帮助我们深入细致恰当地修改本书。非常感谢英国的朋友在我们遇到一些“有趣”的挑战时提供的指导。
    感谢我们的编辑Karen Miller,感谢她这段时间的耐心和理解,加上整个Manning团队的积极工作,使我们最终完成本书。这是一项艰苦的工作,非常感谢他们的支持和指导,使本书顺利出版。
    感谢我们的读者,他们在作者的在线论坛发布了修正和评论。感谢下面的相关人员,他们在开发期间阅读了我们的手稿并提供了宝贵的意见:Adam Frankl、Bill LaPrise、Brian Gyss、Christoph Jasinski、Frank Uzzolino、Fred Patton、Janeen Johnson、John D. Lewis、Joshua White、Mark Watson、Philippe Lamote、Pouria Amirian、Rikke Willer、Robert Gimbel、Rod Hilton和Stephen Kitt。
    还要感谢Jim Webber和Ian Robinson,他们为本书写了序言。还有Craig Taverner,是他作为技术顾问在出版前又阅读了一遍本书的手稿和例子的代码。
    还有其他许多以不同的方式做出贡献的人。我们无法通过名字提及每一个人,因为那样意味着这个致谢的篇幅将非常长,但是我们想要深挚地感谢曾经给过我们帮助使得本书得以出版的每一个人。

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网