关系模型与文档模型
关系模型
关系模型式当今最流行的数据库模型,统指这一类数据库,特点如下:
将数据以关系呈现给用户(比如:一组包含行列的二维表)
提供操作数据集合的关系算子
常见分类:
事务型(TP):银行交易、火车票
分析型(AP):数据报表、监控表盘
混合型(HTAP)
关系模型诞生很多年后,虽然不时有各种挑战者,比如上世纪七八十年代的网状模型和层次模型,但始终仍未有根本的能撼动其地位的新模型。直到近十年来,随着移动互联网的普及,数据爆炸性增长,各种处理需求越来越精细化,催生了数据模型的百花齐放。
NoSQL的诞生
NoSQL(Non-SQL,后来有人转解为Not only SQL),是对不同于传统的关系数据库的数据库管理系统的统称。根据DB-Engines Ranking - popularity ranking of database management systems ,现在最受欢迎的NoSQL前几名为:MongoDB、Redis、ElasticSearch、Cassandra。
催动因素有:
处理更大数据集:更强伸缩性、更高吞吐量
开源免费的兴起:冲击了原来把握在厂商的标准
特化的查询操作:关系数据库难以支持的,比如图中的多跳分析
表达能力更强:关系模型约束太严,限制太多
面向对象和关系模型的不匹配
目前大多数应用程序开发都使用面向对象的编程语言来开发,这导致了对 SQL 数据模型的普遍批评:如果数据存储在关系表中,那么需要一个笨拙的转换层,处于应用程序代码中的对象和表,行,列的数据库模型之间。模型之间的不连贯有时被称为 阻抗不匹配
ORM框架可以帮我们解决这个事情,但是仍然不太方便。
换另一个角度来说,关系模型很难直观的表示一对多的关系。比如简历上,一个人可能有多段教育经历和多段工作经历。
文档模型:使用JSON和XML的天然嵌套
关系模型:使用SQL模型就将职位、教育单独拿一张表,然后在用户表中使用外键关联。
在简历的例子里,文档模型还有几个优势:
模式灵活:可以动态增删字段,如工作经历
更好的局部性:一个人的所有属性被集中访问的同时,也被集中存储。
结构表达语义:简历与联系信息、教育经历、职业信息等隐含一对多的树状关系可以被JSON的树状结构明确表达出来。