前言
试着回想你上一次在社交媒体平台上搜索某个人的时候。
你会去看结果页上的什么内容呢?
最可能的是,你从个人信息结果列表的名字开始看。然后可能大部分的时间都花在探究“共同好友”部分,从而回忆起自己是如何认识某人的。
我们在社交媒体上探究共同好友的人类本能行为,启发我俩写了这本书。尽管初衷一致,我们写这本书的原因却不尽相同。
首先,你是否停下来思考过,应用程序里的“共同好友”部分是如何生成的?
作为被要求交付搜索结果页里的“共同好友”模块的工程师,他们需要创建一个错综复杂的工具和数据的合集来解决这个极其复杂的分布式问题。我们其中一个做过这些功能,另一个写过用来交付它们的工具。我们热衷于从我们的共同经验中理解和教导他人,这是我们合著此书的第一个原因。
其次,第二个原因在于,任何使用社交媒体的人都会凭直觉直接从“共享好友”部分推理出一个人的背景。这种推理和思考数据内部关系的过程被我们称为图思维,这就是我们所说的人类通过关联数据来理解生活的方式。
我们都是如何习得这个技能的呢?
并没有一个明确的时间点标识着我们学会了该技能。处理人物、地点、事物之间的关系就是我们的思考方式本身。
无论是在现实生活中还是在数据中,人们都能轻松地从关系中推断出背景,这也是图思维浪潮兴起的根源。
而当谈到对图思维的理解时,人们大致分成两个阵营:一边认为图(graph)只意味着条形图;另外一边则认为图表之类的过于复杂。不管是哪一种,这些思维过程都应用了传统的方法来思考数据和技术。但问题是局势已变,工具已经进化,有新的知识等着你学习。
我们相信,图是强大的、可部署的。图技术可以使你的工作效率更高——我们曾经合作过的一些团队如是说。
本书将这两种思维方式结合起来。
图思维缩小了人类日常生活与使用数据做决策之间的差距。想象一下,把整个世界看成一个带有行和列的电子表格,并试图使其全部合理化。对于大多数人来说,这种做法不自然,而且会适得其反。
这是因为人们是通过关系来驾驭和理解生活的。计算机才需要数据库,并且只能在行列数据的世界中运行。
图思维是一种通过以关系为中心的方法来解决复杂问题的方法。图技术弥补了“关系”与现代计算机基础设施的线性内存限制之间的差距。
随着越来越多的人通过应用图思维来学习如何使用图技术进行构建,你可以想象下一波创新将带来什么。
本书的目标读者
本书旨在教会读者两件事。首先,通过提出问题和推理数据,教会读者形成图思维。其次,我们将带读者学会用代码解决最常见的复杂图问题。
这些新概念通常与需要跨多个不同工程部门执行的任务交织在一起。
数据工程师和架构师是将想法从开发转变为生产的核心。我们编写本书旨在向读者展示如何使用图数据和图工具解决从开发到生产过程中可能出现的常见假设。对数据工程师或数据架构师来说,另一个好处是可以通过理解图思维来获悉世界上更多的可能性。对用图数据解决的各种问题进行综合有助于打造新的模式,以在生产应用程序时使用。
数据科学家和数据分析师可能最受益于推理如何使用图数据来回答有趣的问题。本书中的所有示例都是为了将查询优先的理念应用于图数据而构建的。数据科学家或分析师的另外的好处是了解在生产应用程序中使用分布式图数据的复杂性。在本书中,我们将讲解常见的开发陷阱及其在生产环境中的解决过程,以便可以构想出新类型的问题来解决。
计算机科学家将学习如何使用函数式编程和分布式系统中的技术来查询和推理图数据。
我们将概述程序遍历图数据的基本方法,并使用图工具逐步介绍它们的应用。在此过程中,我们还将介绍分布式技术。
我们将关注图数据和分布式复杂问题的交叉领域,这是一个任何技术人员都想要学习的热门工程话题。
本书目标
本书的第一个目标是,使用图论、数据库模式、分布式系统、数据分析和许多其他领域的概念,以独特的交集形成我们在本书中所说的图思维。一个新的应用领域需要新的术语、示例和技术。本书是读者理解这一新兴领域的基础。
在过去十年的图技术中,出现了一系列在生产系统中使用图数据的通用模式。本书的第二个目标就是教会读者这些模式。我们将定义、说明、构建和实施团队使用图技术解决复杂问题的最流行方式。学完本书后,读者将拥有一套使用图技术构建的解决常见问题的模板。
本书的第三个目标是改变读者的思维方式。理解图数据并将其应用于自己的问题,会使思维过程发生范式转变。我们将通过大量示例让读者了解其他人在应用程序中思考和解释图数据的常见方式,帮助读者学会把图思维应用到技术决策中。
本书主要内容
本书大致由以下内容组成:
●第1章讨论图思维并提供将其应用于复杂问题的详细过程。
●第2章和第3章介绍将在后续各章中使用的基本图概念。
●第4章和第5章应用图思维和分布式图技术构建C360银行应用程序,这是现如今最流行的图数据用例。
●第6章和第7章通过电信行业用例介绍分层数据和嵌套图数据。第6章为第7章解决的常见问题奠定了基础。
●第8章和第9章通过示例详细讨论跨图数据的路径查找,该示例通过路径量化社交网络中的信任。
●第10章和第12章教读者使用图数据的协同过滤来设计一个受Netflix启发的推荐系统。
●第11章是一章补充内容,说明如何将实体解析应用于多个数据集的合并,从而在一个大图中进行集体分析。
除第1、11章外,每两章(第4章和第5章,第6章和第7章,第8章和第9章,第10章和第12章)都遵循相同的结构。每组中的前一章介绍开发环境中的新概念和新示例,后一章深入探讨实际部署需要解决的生产细节问题,例如性能和可扩展性。
排版约定
本书中使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽粗体(Constant width bold)
表示应该由用户输入的命令或其他文本。
等宽斜体(Constant width italic)
表示应由用户提供的值或由上下文确定的值替换的文本。
该图示表示提示或建议。
该图示表示一般性说明。
该图示表示警告或注意。
示例代码
可以从https://github.com/datastax/graph-book下载补充材料(示例代码、练习、勘误等)。
你也可以在推特上关注我们:https://twitter.com/Graph_Thinking。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布本书的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
The Practitioner's Guide to Graph Data,作者Denise Koessler Gosnell和Matthias Broecheler,由O'Reilly出版,书号978-1-492-04407-9。
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permissions@oreilly.com联系我们。
O'Reilly在线学习平台(O'Reilly Online Learning)
40多年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O'Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn。
本书配套网站http://www.oreilly.com/catalog/9781492044079上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://www.oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://www.youtube.com/oreillymedia
致谢
我们要感谢一群了不起的人,他们贡献了时间和专业知识来为我们提供建议以改进本书。
我们非常荣幸能与Jeff Bleiel领导的世界级编辑团队合作。我们的技术编辑团队Alexey Ott、Lorina Poland和Daniel Kuppitz运用了他们在创建、构建和撰写图技术方面的丰富经验,直接将本书提升到了只有在他们的帮助下才能达到的水平。我们十分感谢他们为提高本书的质量和正确性所做的努力。
我们还要感谢DataStax支持和鼓励我们合作创作本书。我们非常感谢DataStax Graph Engineering团队成员的支持和审阅,以及他们在我们共同创作时所做的产品更改:Eduard Tudenhoefner、Dan LaRocque、Justin Chu、Rocco Varela、Ulises Cerviño Beresi、Stephen Mallette和Jeremiah Jordan。我们特别感谢Bryn Cooke,他协调并实施了大量的额外工作来支持本书中的想法。
还有其他许多人抽出时间来支持我们,所做的事情远远超过了他们的本职工作,就像DataStax一样。我们要感谢Dave Bechberger、Jonathan Lacefield和Jonathan Ellis对本书的专业贡献和推广。感谢Daniel Farrell、Jeremy Hanna、Kiyu Gabriel、Jeff Carpenter、Patrick McFadin、Peyton Casper、Matt Atwater、Paras Mehra、Kelly Mondor和Jim Hatcher:在整个创作过程中,我们的对话产生的影响比想象中的要大得多。
本书中所有的故事和示例都受到了我们与世界各地同事的合作和经验的启发。为此,我们想感谢与我们交谈并帮助塑造本书叙述的图英雄:Matt Aldridge、Christine Antonsen、David Boggess、Sean Brandt、Vamsi Duvvuri、Ilia Epifanov、Amy Hodler、Adam Judelson、Joe Koessler、Eric Koester、Alec Macrae、Patrick Planchamp、Gary Richardson、Kristin Stone、Samantha Tracht、Laurent Weichberger和Brent Woosley。与他们每个人交谈和分享的信息都融入了我们有幸在本书中分享的故事。感谢他们的意见、经验和想法。
Denise还想向那些在本书写作过程中指导过她的人表达她个人的谢意:“感谢Teresa Haynes和Debra Knisley,是你们点燃了我对图论的热情,这种热情每天都在驱动着我,没有你们,我就不会开始这段旅程。感谢Mike Berry,是你教会了我如何完成工作,以及如何永无止境地追寻下一个伟大设想。感谢Ted Tanner,是你打开了一扇门,向我展示了什么是匠心打造和卓越交付——时机和执行就是一切。感谢Mike Canzoneri,是你临门一脚才有了这本书。最重要的是感谢Ty——这位非官方的‘第三作者’,你伴随我走过了每一步,感谢你永无止境的积极性。”