《数据密集型应用系统设计》读书笔记整理(2)-- 数据模型与查询语言


语言的边界就是世界的边界。
——Ludwig Wittgenstein,《逻辑哲学论》(1922)

应用程序使用中间层来进行抽象化,每层都通过提供一个简洁的数据模型来隐藏下层的复杂性。

关系模型与文档模型

关系模型的目标就是将实现细节隐藏在更简洁的接口后面。现在大多数开发采用面向对象的编程语言,与数据库模型之间需要一个转换层,即对象-关系映射(ORM)框架。

关系

一对多关系,表示存在着树状结构或结构化的数据,JSON表示可以将该树结构显式化。JSON表示比多表模式具有更良好的局部性,所有信息都在一个地方,一次查询就够了,带来了较好的性能。这种自包含的文档,适合使用面向文档的数据库(例如MongoDB),它更接近于应用程序使用的数据结构。

但对于多对一的关系,如果数据库不支持联表,应用程序就需要使用多次查询来模拟联表,联表工作就从数据库转移到了应用层。
在表示多对一和多对多关系时,关系数据库和文档数据库没有根本的不同。都需要进行联表或多次查询来解析标识符。在应用代码复杂度的层面上来看,高度关联的数据,文档模型不太合适,关系模型可以胜任。

文档数据库是读时模式,数据结构是隐式的,在读取时才解释;
关系数据库是写时模式,数据结构是显式的,写入时遵循数据库之前定义的模式。

数据查询语言

SQL是一种声明式查询语言,而常用的编程语言都是命令式:

  • 声明式查询语言指定所需的数据格式,结果应满足什么条件,如何转换数据,而不用指明如何实现这一目标。
  • 命令式查询语言告诉计算机以特定顺序执行某些操作。

图状数据模型

当多对多的关系变多时,数据之间的关联越来越复杂,将数据模型转化为图模型会更自然。
图由两种对象组成:顶点(结点或实体)和边(关系或弧)。
三元存储:所有信息都以非常简单的三部分形式存储(主体、谓语、客体)

图数据库和文档数据库有个共同点,它们通常不会对存储的数据强加某个模式,可以使应用程序更容易适应不断变化的需求。


参考文献:
[1] (美)Martin Kleppmann. 数据密集型应用系统设计(赵军平,吕云松,耿煜,李三平 译)[M]. 北京:中国电力出版社,2018.

Published

Author

Levin

Category

Web Arch

Tags

web arch book report
Disqus loading now...