知识卡片

图数据库与CODASYL网络模型表面相似但本质不同

普通读书笔记卡

内容

[[关系模型战胜网络模型的关键是查询优化器只需构建一次]]里提到的CODASYL网络模型和 现代图数据库乍看很像——都允许一条记录/顶点连接到多个其他记录/顶点,似乎图数据库 就是网络模型的复活。但两者有几个关键的本质区别。第一,CODASYL数据库有模式,明确 规定哪种记录类型可以嵌套在哪种记录类型里;图数据库没有这种限制,任何顶点都可以有 边连到任何其他顶点,给应用适应变化需求留出了更大的灵活性。第二,CODASYL中到达一条 特定记录只能靠遍历某条访问路径;图数据库中任何顶点都可以通过唯一ID直接引用,也可以 用索引查找具有特定值的顶点,不需要沿着预设路径走。第三,CODASYL中一条记录的后继是 有序集合,数据库必须维护这个顺序(影响存储布局),插入新记录时还要操心它在集合里 的位置;图数据库中顶点和边本身不排序,只有在查询结果输出时才谈得上排序。第四, CODASYL的所有查询都是命令式的,难写且容易被架构变化打破;图数据库虽然也支持命令式 遍历,但大多数都提供了Cypher、SPARQL这类高级声明式查询语言。这四点差异共同说明: “允许多对多关联”这个表面特征相同,不足以判断两个数据模型的本质是否一致——真正决定 一个模型好不好用的,是它有没有强加不必要的结构约束(如固定模式、固定访问路径、 强制排序)、以及查询方式是声明式还是命令式。

参考来源

- 位置:《数据密集型应用系统设计》第二章《数据模型与查询语言》"图形数据库与网络 模型相比较"(源文件:_epub-src/ch2_split_004.html) - 结论依据:原文逐条对比CODASYL网络模型与图数据库在模式限制、记录访问方式、记录 顺序、查询方式声明式还是命令式四个方面的差异,直接支撑本卡片关于两者本质不同的 结论。 - 原始内容:在CODASYL中,数据库有一个模式,用于指定哪种记录类型可以嵌套在其他 记录类型中。在图形数据库中,不存在这样的限制……在CODASYL中,达到特定记录的 唯一方法是遍历其中的一个访问路径。在图形数据库中,可以通过其唯一ID直接引用任何 顶点……在CODASYL,所有查询都是命令式的……在图形数据库中……大多数图形数据库也 支持高级声明式查询语言,如Cypher或SPARQL。