
戴夫·贝克伯杰 乔希·佩里曼
现实世界中的数据往往并不是能以行列形式呈现的表格型数据,而是富含关系信息的复杂网络。对于挖掘这类数据的潜在价值,图数据库具有明显的优势。本书介绍如何针对真实场景设计和实现图数据库。你将学习图论的基础知识,并尝试构建基于图数据库的社交网络应用程序和推荐引擎等。你将掌握图数据库开发的所有重要概念,包括递归遍历、图数据建模、查询调优、性能调优、图分析,以及如何避免超级节点等反模式。学完本书后,你将有能力构建基于图数据库的应用程序,从而显著地提升数据价值。本书示例采用开源图计算框架TinkerPop及其查询语言Gremlin,但所述概念均适用于Neo4j等基于Cypher的图数据库。
一图胜万言——《图数据库实战》读后 Tom Shi 2023/4/20 是从什么时候开始,工作中开始涉及数据处理和数据库?这个问题很早以前就不再纠结了,因为已经记不清楚。反而是现在好像没有哪个工作甚至爱好,是与数据和数据库完全无关的。但作为一个老IT,我真的了解数据和数据库吗?这个还真不敢把话说满。至少,在读《图数据实战》之前,我对关系型数据库的理解,和读完之后就是完全不一样的。 《图数据库实战》这么low的书名,我感觉跟其内容完全不匹配。不过,本书的两位作者——被誉为图数据库领域的“意见领袖”的戴夫·贝克伯杰,还有拥有20多年复杂系统构建的数据构架师乔希·佩里曼——应该是完全不介意的吧。至少我认知里,始终在一线编程解决实际问题的程序员和工程师们,对于这种没啥实际意义的名头,基本上都不大愿意为此浪费时间。 先说我的读后“结论”,如果是不在第一线的非编程人员,那么本书第一部分是最值得反复阅读的。对于理解图数据库概念,甚至如我一样重新认识理解关系型数据库,都是非常有帮助的。第二三部分,需要一定的系统构建和编程的背景知识,阅读门槛稍高。但其实只要有一些基本概念,哪怕对其中具体的代码一知半解,也不影响理解其中的思路,关键是从实操中理解系统构架和从功能到数据的逻辑思路,这个对于非IT专业却需要与开发人员共同合作的工程人员或者业务人员来说,是非常有帮助的一件事情。所以,其实我个人是建议,即便看起来感觉乏味吃力,后半部分也依然是值得认真研读的。 首先,本书开篇就给出了一张图,充分说明了数据库工具是如何一步步演化到图数据库的。从这个演进梯次中其实可以看出,我们日常工作中运用最多的,并不是特别复杂的那些类型,反而是最基本的“键值型数据库”。但是,随着现在各个行业数字化转型的风潮渐起,业务和客户双方的需求,都对本行业提出了越来越高的数据理解和运用要求。而对现实世界中各种事务之间关系的描述,如何能够纳入结构化的数据体系,就构成了关于图数据库的最初话题。 其次,当前社会对于生产力和生产要素的主流认知中,数据早已是不言自明的新兴力量。因此,新工业或者说新时代的根基——底层数据库技术的进步,就成为关键。数据,源于人类对现实世界的抽象。现实世界中有实体,也有实体之间的关系。实体⼜可能是由⼀组部件通过确定关系构成,部件也可能是由更细微的元器件构成。其相互关系均存在构成逻辑的确定性和运⾏存续过程中的不确定性。因此,数据库技术,必须对实体和实体间的关系,予以同等权重的关注,否则就不足以满足当下和未来,社会对于数据、对于技术的需求。 最后,数据事实上已经成为社会公认的一种新资产形式。而对数据的结构化,是实现这种新资产价值,即发现隐藏在⼤量数据中的规律化、特殊性特征,构成了基于数据的数据,的基本手段。进一步,基于数据资产的增值,则体现在这类结构化数据进一步挖掘和分析的过程中。 这部分论述在书中所占篇幅很小,但个人认为很值得思考。接下来则是确定“图”的概念,书中的定义是: “图,是⼀种⼏乎⽆处不在、⽤来思考现实世界场景的⽅法,因为图能够抽象出这些场景要表现的项(item)和关系,从⽽能够快速、⾼效地处理数据中的连接。” 这⾥的图,在基本概念上,是对应于表。也就是说,表中的数据是对应和排列关系,以及表与表的关键关系。数据之间更复杂的关系,就需要抽象、分拆出更多的对应排列关系,构建更多的表,在表的条⽬间建⽴更多对应关系。图则把关键数据项之间关系突出出来,相⽐表,图可以包容更多更复杂的关系和逻辑。简言之,图就是顶点和边的集合。顶点代表实体或者节点,边则代表关系。起源于莱昂哈德·欧拉1736年的“哥尼斯堡七桥问题”开创了图论,也为今天的图数据库奠定了数学基础。 相比图数据库,传统的关系型数据库中,数据关系不是数据,⽽是结构。而在图数据库中,关系与数据同等重要,甚至关系本身还可以具有属性,即关于关系的数据,可以在图数据库中直接表达并进行计算。这种近乎动态的关系记录和运算模式,肯定是更接近现实世界的。 但是,技术的进步从来不是以新技术否定老技术。对于优秀的工程师来说,对特定技术的偏好并不是应有的好个人品质;根据面对的实际问题,适用最恰当最合适的技术,才是。 对于图数据库和关系数据库来说,同样如此。在关系数据库中,关系是唯⼀且锁定的,关系也是⽆属性的。关系之间不同数据的键值对,构成了基础的数据累积原则,即归类排序。而在图数据库中,类似关系数据库中的关系被强化,数据和关系的逻辑模型⼀旦抽象成功,即构成图数据库的基本数据单元。每个单元只保存⼀组键值对,对应逻辑模型中的所有属性定义。同类数据不归类,排序需要在遍历抽取基础上单独计算。 由此可见,中对于数据的处理方面,两者各有擅⻓。以过去所涉及的各类业务来说,感觉如果没有完备、健全的关系型数据作基础,图数据库在已有超长存续时间的业务中,要想发挥作用,所面临的困难,几乎是无法逾越的。 最后,引用书中按数据复杂性排序的数据引擎分类—— 键值数据库:所有数据都由唯⼀标识符(键)和关联的数据对象(值)表示。 列存储数据库(⼜名⾯向列、宽列式数据库):数据按列来存储,可能每⾏有⼤量的列,也可能每⾏的列数不⼀样。 ⽂档数据库(⼜名⾯向⽂档数据库):将数据存储到带有唯⼀键的⽂档中,该⽂档可以具有不同的模式,也可以包含嵌套数据。 关系数据库:将数据存储在包含具有严格模式⾏结构的表中,允许在表之间连接⾏来建⽴关系。 图数据库:将数据存储为顶点(节点、组件)和边(关系)。
很不错的入门的书,就算没有太多数据库的背景知识也可以看懂,内容也不太多,很快就可以读完。 可能出现的各方面的问题都讲到了,有不少坑真是后悔没早点读,哈哈哈。 整本书的思路比较清晰,娓娓道来的感觉,讲的非常不错,图论部分梦回大学时候的离散数学。
入门的书,对图数据库的存储原理,图数据库的设计都有涉及,但并没有深入某一种类型的数据库。其实图数据库的存储关系型数据库大致也能实现,但查询语言无法解决,就会导致程序跟数据库直接需要很多次的通讯,通讯成本,解释成本就很高。
国内为数不多的讲解图数据库基础的书籍。虽然这本书用的图数据库并不是Neo4j,但是通过阅读这本书,却让我更理解了Neo4j的一些概念。 这本书是通过一个具体的实例去讲解,如何对一个项目设计图数据库,如何确定节点和关系,属性应该放置到节点中还是关系上。所有的这些思考,作者都在书中根据他的想法给出了答案。这点对于刚刚接触图数据库的我来说,就好比是把一个应用按步骤的拆分给你看,并且告诉你,为什么要这么设计。 所以,在读完这本书之后,我很快的阅读完了Neo4j那本书,并且开始了对neo的操作。
为数不多的从工程角度来解析图结构设计的数,更是为数不多的gremlin的教材
主要讲germlin数据库。里面关于图的思维方式引导的不错。
作为入门读物很不错,很多内容在讲模式和用处而不是贴代码。
可能适合新手,但是这是一本实战,太啰嗦了
基础讲的很清楚,就是有些翻译有点别扭
把图数据库的操作比喻为密室逃脱,挺有意思