TLDR
本文总结了数据库发展35年来的教训。目的是避免一遍遍重复之前的错误。年轻人没有过去错误的经验,重复发现发明之前的错误。
总结
数据库的理念可以划分为9个纪元:
- Hierarchical (IMS)
- Network
- Relational
- Entity-Relational
- Extended-Relational
- Semantic
- Object-oriented
- Object-relational
- Semi-sturctured(XML)
Hierarchical IMS
- 纯树形结构,节点必须有父节点
- 可以按照连续、B树或者Hash的方式存储
- record-at-a-time的方式查询。个人理解有点像for each,每次只处理一条数据。record之间聚合需要应用程序来做。用树形结构存储也确实很难处理节点之间数据的关系。
- 物理数据独立性(Physical Data Independence),物理存储层面可以按需优化,不会影响应用使用。
- 逻辑数据独立性(Logical Data Independence). Logical Base can be a subtree of Physical base.
Network
- record-at-a-time
- 数据有存在独立性
- 只支持两两关系
Relational
- KISS原则,简单的语义。
- 具有完全的物理和逻辑独立性
- set-at-a-time
- IBM的DB2很关键
ER
R++等等。在SQL层面扩展,实现泛化等等
cons:
- 性能上没有提升,用户80年代只在乎Transaction的性能提升。
Object-oriented
OODB(object oriented dbms)。本地的序列化方法. CAD等软件使用。
cons:
- 市场小,只面向客户端开发。
- 需要为每种语言开发。
- 没有通用标准
Object Relational
Postgres等
- UDT, UDF等等,解决GIS存储的问题。
- Stored Procedure
- 使用通用的编程语言
comment:
- 没法Scale,需要DBA单独管理。公司现在使用的方式其实更类似于Network,RDB只存储每个节点的信息和网络的关系。目的是将运算尽量移除DB,通过扩展服务实例来Scale out。
XML
两种情况
schema-last:
schema放在数据出现之后定义,可以用XML来表示。必须Schema-last的场景很少。
跨企业的数据交换:
XML是自描述的,可以穿透防火墙等等。
comments:
作者还预言了会有一个XML的子集来替代XML,就是Json了。