【DDIA笔记】【ch2】 数据模型和查询语言 -- 文档模型中Schema的灵活性

简介: 【6月更文挑战第8天】网状模型是层次模型的扩展,允许节点有多重父节点,但导航复杂,需要预知数据库结构。关系模型将数据组织为元组和关系,强调声明式查询,解耦查询语句与执行路径,简化了访问并通过查询优化器提高效率。文档型数据库适合树形结构数据,提供弱模式灵活性,但在Join支持和访问局部性上不如关系型。关系型数据库通过外键和Join处理多对多关系,适合高度关联数据。文档型数据库的模式灵活性体现在schema-on-read,写入时不校验,读取时解析,牺牲性能换取灵活性。适用于不同类型或结构变化的数据场景。

网状模型

network model是hierarchical model 的一种扩展:允许一个节点有多个父节点。它被数据系统语言会议的委员会进行了标准化,因此也被称为CODASYL模型。

多对一和多对多都可以由路径来表示。访问记录的唯一方式是顺着元素和链接组成的链路进行访问,这个链路叫访问路径。难度犹如在n-维空间中进行导航。

内存有限,因此需要严格控制遍历路径,并且需要事先知道数据库的拓扑结构,这就意味着得针对不同应用写大量的专用代码。

关系模型

在关系模型中,数据被组织成元组(tuples),进而集合成关系(relations);在SQL中分别对应行(rows)和表(tables)。

表只是一种实现,关系的说法来自集合论,指的是几个集合的笛卡尔积的子集。 R ⊆ (D1×D2×D3 ··· ×Dn) (关系用符号 R 表示,属性用符号 Ai 表示,属性的定义域用符号 Di 表示)

其主要目的和贡献在于提供了一种声明式的描述数据和构建查询的方法。即,相比网络模型,关系模型的查询语句和执行路径相解耦,查询优化器(Query Optimizer 自动决定执行顺序、要使用的索引),即将逻辑和实现解耦。

举个例子:如果想使用你的方式对你的数据集进行查询,你只需要在新的字段上建立一个索引。那么在查询时,你并不需要改变你的用户代码,查询优化器便会动态的选择可用索引。

文档型 vs 关系型

根据数据类型来选择数据模型

文档型 关系型
对应关系 数据有天然的一对多、树形嵌套关系,如简历。 通过外键 + Join 可以处理 多对一,多对多关系
代码简化 数据具有文档结构,则文档模型天然合适,用关系模型会使得建模繁琐、访问复杂。但不宜嵌套太深,因为只能手动指定访问路径,或者范围遍历 主键,索引,条件过滤
Join 支持 对 Join 支持的不太好 支持的还可以,但 Join 的实现会有很多难点
模式灵活性 弱 schema,支持动态增加字段 强 schema,修改 schema 代价很大
访问局部性 1. 一次性访问整个文档,较优
2. 只访问文档一部分,较差
分散在多个表中

对于高度关联的数据集,使用文档型表达比较奇怪,使用关系型可以接受,使用图模型最自然。

文档模型中Schema的灵活性

说文档型数据库是schemaless不太准确,更贴切的应该是schema-on-read

数据模型 编程语言 性能 & 空间
schema-on-read 写入时不校验,而在读取时进行动态解析。 弱类型 动态,在运行时解析 读取时动态解析,性能较差。写入时无法确定类型,无法对齐,空间利用率较差。
schema-on-write 写入时校验,数据对齐到 schema 强类型 静态,编译时确定 性能和空间使用都较优。

文档型数据库使用场景特点:

  1. 有多种类型的数据,但每个放一张表又不合适。
  2. 数据类型和结构由外部决定,你没办法控制数据的变化。
目录
相关文章
|
1月前
|
存储 SQL 缓存
优化ClickHouse查询性能:最佳实践与调优技巧
【10月更文挑战第26天】在大数据分析领域,ClickHouse 以其卓越的查询性能和高效的列式存储机制受到了广泛的关注。作为一名已经有一定 ClickHouse 使用经验的开发者,我深知在实际应用中,合理的表设计、索引优化以及查询优化对于提升 ClickHouse 性能的重要性。本文将结合我的实践经验,分享一些有效的优化策略。
92 3
|
5月前
|
负载均衡 数据管理
ClickHouse的分布式查询流程
ClickHouse的分布式查询流程
|
6月前
|
存储 关系型数据库 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 多对一和多对多
【6月更文挑战第7天】该文探讨数据模型,比较了“多对一”和“多对多”关系。通过使用ID而不是纯文本(如region_id代替"Greater Seattle Area"),可以实现统一、避免歧义、简化修改、支持本地化及优化搜索。在数据库设计中,需权衡冗余和范式。文档型数据库适合一对多但处理多对多复杂,若无Join,需应用程序处理。关系型数据库则通过外键和JOIN处理这些关系。文章还提及文档模型与70年代层次模型的相似性,层次模型以树形结构限制了多对多关系处理。为克服层次模型局限,发展出了关系模型和网状模型。
61 6
|
6月前
|
SQL JSON NoSQL
【DDIA笔记】【ch2】 数据模型和查询语言 -- 关系模型与文档模型
【6月更文挑战第6天】关系模型是主流数据库模型,以二维表形式展示数据,支持关系算子。分为事务型、分析型和混合型。尽管有其他模型挑战,如网状和层次模型,但关系模型仍占主导。然而,随着大数据增长和NoSQL的出现(如MongoDB、Redis),强调伸缩性、专业化查询和表达力,关系模型的局限性显现。面向对象编程与SQL的不匹配导致“阻抗不匹配”问题,ORM框架缓解但未完全解决。文档模型(如JSON)提供更自然的嵌套结构,适合表示复杂关系,具备模式灵活性和更好的数据局部性。
55 0
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
2月前
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
3月前
|
存储 SQL 缓存
数据库测试|Elasticsearch和ClickHouse的对决
由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。
数据库测试|Elasticsearch和ClickHouse的对决
|
2月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
6月前
|
DataWorks API 调度
DataWorks产品使用合集之在调度配置配置了节点的上游节点输出,没办法自动生成这个flow的依赖,该怎么操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之建了 polar 与clickhouse的数据源。为什么数据库这里总是mysql呢
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。