TLDR

本文总结了数据库发展35年来的教训。目的是避免一遍遍重复之前的错误。年轻人没有过去错误的经验,重复发现发明之前的错误。

总结

数据库的理念可以划分为9个纪元:

  1. Hierarchical (IMS)
  2. Network
  3. Relational
  4. Entity-Relational
  5. Extended-Relational
  6. Semantic
  7. Object-oriented
  8. Object-relational
  9. 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了。