数据密集型应用系统设计Read Note-第二章-数据模型与查询语言

34 阅读3分钟

数据系统基础

二、数据模型与查询语言

数据的表示,由上而下

  1. 现实世界建模,通过对象、数据结构、api

  2. 通用数据模型(例如 JSON 或 XML 文档、关系数据库中的表或图模型)

  3. 内存、磁盘、网络的字节格式(数据库工程师)

  4. 电流,光脉冲(硬件工程师)

关系模型和文档模型

IMS(用于 IBM),层次模型,树状,类似文档数据库的 json 模型,很好支持一对多,较难支持多对多

出现关系模型(后来的 sql)和网络模型

网络模型:由 ConferenceonDataSystemLanguages(CODASYL)标准化,层次模型的推广,每个记录有多个父节点,由于相同记录有多条不同路径,需要手动选择路径,并且数据模型更改困难,需要大量手写代码

关系模型:定义所有数据格式,关系即元组的集合,没有复杂的嵌套结构,也没有复杂的访问路径,“访问路径“由查询优化器自动生成

之后出现 NoSQL,包括文档数据库和图数据库

文档模型:某种方式层次模型,目标用例是数据来自于自包含文档,且一个文档与其他文档之间的关联很少

对于多对一和多对多,关系模型和文档模型都由唯一标识符引用(外键,文档引用)

数据查询语言

命令型明确指出执行步骤

声明型指定数据模式和条件,隐藏了底层实现步骤和引擎实现细节,在数据库中好于命令式

MapReduce,两者都不是,底层的编程模型,计算集群分布执行

图状数据模型

针对相反的场景,目标用例是所有数据都可能会互相关联

属性图:顶点,边,可以看做两个关系表,一个顶点表,一个边表

cypher 查询语言,声明式

三元存储

(主体,key,value),(主体,边 label,客体)

SPARQL:RDF 数据模型的三元存储查询语言

图模型和网络模型比较

  1. 网络模型指定了嵌套关系,限制了嵌套,图模型没有限制,任意顶点都可以连向其它顶点

  2. 网络模型获取特定记录只能遍历其中一条访问路径,图模型可以通过顶点唯一 id 获取顶点,也可以索引查找某个顶点

  3. 网络模型记录的自己录是有序集合,图模型顶点和边无序

  4. 网络模型所有查询都是命令式,难以编写,易被模式变更破坏,图模型可以用命令式代码,也可以用声明式语言,如 Cypher 和 SPARQL

Datalog:谓语(主体,客体)的表达方式

定义新谓语的规则,从数据或其他规则派生而来,每次完成一小块,派生出复杂的查询