关系型数据库和非关系型数据库在存储结构上有着很大的不同,而这种差异也导致他们在使用上有着很大的不同。本文从数据模型、运行方式、([查询)效率和体系架构等方面对这两种数据库进行比较。
![关系型数据库和非关系型数据库的区别有哪些 关系型数据库和非关系型数据库的区别有哪些](//ziboxinyan.com/sgpjbg/images/nc364_2.jpg)
#### 数据模型
关系型数据库源于帕雷托模型,它采用二维表存储数据,表中的每一行表示一条记录,表中的每列表示一种属性。关系型数据库建立在表的基础上,且表之间可以建立键值引用,所以支持事务完整性、参照完整性、表达完整性等特性,这就是关系型数据库的主要特点。
而非关系型数据库源于列式数据库,它不像关系型数据库那样采用表的形式,而是采用一种被称为结构化查找表(structured query table)的一种文档存储结构,在存储过程中,将数据转换为一个个JSON格式的文档存储起来。这样做的好处是能够减少冗余,同时还更加灵活,比如结构可以在不同的文档中不同。
#### 运行方式
关系型数据库具有完整的数据的搜索、索引和检索功能。它的查询语句按照一定的标准编写,如 SQL 语言的查询子句。在理论上,操作关系型数据库只需要提供完善的索引和分布式跟踪技术,即可轻松满足对整体数据的查找和更新。
与关系型数据库不同,非关系型数据库有一种新颖的查询方式,即无需按照某个特定标准写查询语句。它的查询语言是基于JSON提供的属性条件查询技术,可以以更灵活的方式来检索数据,如基于范围的查询,基于points-in-polygon 或某种数值条件的查询。且非关系型数据库的查询语句可以添加不同的函数,比如聚合函数,来获得复杂的信息。
#### 查询效率
从查询效率上来说,关系型数据库的高性能查询也相当可观。因为关系型数据库几乎不会处理文档本身,而完全依赖于索引来将数据快速组织起来,所以其大多数查询操作的时间复杂度都是 O(log n) 级别的,且查询效率受到索引的大小及索引建立的方式有很大的影响。
相比较之下,在对非关系型数据库进行查询时,由于不需要维护索引这一步骤,所以一般而言,查询效率会明显高于关系型数据库。非关系型数据库支持范围查找,只要定义范围,就可以快速找到文档,这大大减少了时间成本。
#### 开发成本
对于关系型数据库,在采用之前,一般都需要对它的表结构进行设计,比如定义字段类型,建立唯一索引等,这一过程需要花费相当多的时间和精力,而且有可能出现数据冗余等情况。另外,使用关系型数据库还会涉及作业安