图数据库(第二版)Lan Robinson 笔记
第一章 简介
1.2 图领域概览
图领域分类:
- 图数据库 主要用于联机事务图的持久化技术,通常直接实时地被应用程序访问。(OLTP)
- 图计算引擎 主要用于离线图分析的技术,通常按一系列步骤执行。(OLAP)
1.2.1 图数据库
图数据库支持对图数据模型的增删改查。与其他关系型或noSql数据库相比,无需通过外键等额外处理来推测实体间的关联。
1.2.2 图计算引擎
可以使我们在大数据集上使用全局图算法。
1.3 图数据库的威力
1.3.1 性能
与关系型或noSql数据库相比,图数据库会有绝对的性能提升。随着数据集的增大,关系型数据库处理密集join查询的性能会随之变差,而图数据库在数据集增大时,性能趋向于保持不变,因为只与图的一部分相关。图数据库每个查询的执行时间只和满足查询条件的那部分遍历的图的大小(而不是整个图的大小)有关。
1.3.2 灵活性
图具有天然可扩展性,可以对已存在的结构中添加不同种类的新联系、新节点、新标签和新子图,而且不会破坏已有的查询或应用程序的功能。
1.3.3 敏捷性
图数据库没有模式可循,但这并不是一个风险, 反而促使我们更贴近业务规则。
1.4 小结
图模型可以简单而传神地表示关联数据,从而简化开发应用程序。
第二章 关联数据的存储选择
2.1 关系型数据库缺少联系
关系型数据库设计之初时为了处理纸质表格以及格式化结构,但在处理联系上却做的不好。联系确实存在于关系型数据库自身的术语中,但只出现在建模阶段,作为连接表的手段。
关系型数据库无法定义关系的权重,随着数据集的结构越发复杂和不规整,将出现大量的表连接、稀疏行和非空检查逻辑。关系世界中的连通性都将转化为连接操作,会阻碍性能。
外键约束增加了开发、维护成本,而目的仅仅是为了让数据库能够表达表之间的联系。
2.2 NoSQL数据库也缺少联系
键值数据库、文档数据库、基于列的数据库,存储的都是无关联的值/文档/列,因此很难用于关联数据。
对于这些数据库,一种广泛的做法是添加外键。然而这需要在应用层连接聚合数据,代价很高。
2.3 图数据库拥抱联系
图模型中的路径与关系数据模型中的关系呈现高度一致性,无需在应用中构建关联关系,而是直接在数据库中体现。实验结果表明,在查询关联数据时,图数据库是最佳选择。
图数据库具有免索引连接的特性,可以不用外键而天然地表示关联性。
第三章 使用图进行数据建模
我们已经在用图交流,我们喜欢把领域中的信息要素抽象成圆圈和方框,然后用箭头和直线把它们连起来,以此来表达它们之间的关联。
3.4.2 系统管理领域中的图建模
关系建模将白板上的设计图转化成E-R图,而后转化为表格。而图建模将设计图中的每个实体转化为节点,将其相关角色转换为标签,特性转换为属性,将其与临近实体间的关系转换为联系。图模型提供数据的方式和应用程序请求数据的方式基本一致。
3.5 跨域模型
图模型支持跨领域建模,即一个节点可以属于不同的领域,如一部戏剧既可以是文学领域的作品,也可以是剧院节目表上的作品,在文学领域和剧院领域中可以共用同一个戏剧节点。
3.6.4 发展中的领域
在图中,更倾向于添加新的节点和联系来增加信息或成分,而不是修改已有的模型。增加新的节点和联系不会影响已有的查询并且是完全安全的。
第四章 构建基于图数据库的应用
4.1 数据建模
4.1.1 根据应用程序的需要描述模型
有些向数据提出的问题能帮助我们定义实体的联系。
4.1.2 用节点表示事物,用联系表示结构
对于双向联系,我们应在查询时忽略方向,而非使用两个联系。
第六章 图数据库的内部结构
6.1 原生图处理
如果图数据库存储在免索引邻接属性,那么我们说它具有原生处理能力。
6.2 原生图存储
以Neo4j数据库为例说明如何架构图数据库。
Neo4j将图数据存储在若干不同的存储文件中。每个存储文件包含图的特定部分的数据(例如,节点、联系、标签和属性都有各自独立的存储),图结构与属性数据的分离,促进了高性能的图遍历。
节点存储文件用来存储节点的记录。Neo4j的节点存储是固定大小的记录存储,其中,一个节点记录的第1个字节表示“是否在使用”,它告诉数据库该记录目前是被用于存储节点还是可以回收。接下来的4字节表示关联到该节点的第一个联系,随后4字节表示该节点的第一个属性的ID。标签的5字节指向该节点的标签存储,最后的extra是标志保留位。
相应的,联系被存储在联系存储文件中,联系记录的大小也是固定的。每个联系记录包含联系的起始节点ID和结束节点ID、联系类型的指针(存储在联系类型存储区),其实节点和联系节点的上一个联系和下一个联系,以及一个指示当前记录是否位于联系链最前面。
节点存储文件和联系存储文件只关注图的结构而不是属性数据,从节点查找属性数据,可能会涉及磁盘I/0,因为它们存储在不同的文件中,这种设计可以提高节点搜索的速度。这两种存储文件都使用固定大小的记录,以便存储文件内任何记录的位置都可以根据ID迅速计算出来。