首页 理论教育 NoSQL与SQL数据库的区别及云计算

NoSQL与SQL数据库的区别及云计算

时间:2023-11-26 理论教育 版权反馈
【摘要】:图7-3数据添加NoSQL也可以在数据集中建立索引。从这点来看,NoSQL可能更加适合初始化数据还不明确或者未定的项目中。NoSQL暂未提供类似JOIN的查询方式对多个数据集中的数据进行查询,所以大部分NoSQL使用非规范化的数据存储方式存储数据。而NoSQL中没有事务这个概念,每一个数据集的操作都是原子级的。7)查询性能在相同水平的系统设计的前提下,因为NoSQL中省略了JOIN查询的消耗,故在理论上其性能是优于SQL的。

NoSQL与SQL数据库的区别及云计算

NoSQL数据库与传统的SQL数据库主要在以下几方面存在差异[2]

1)存储方式

SQL数据存在于特定结构的表中,而NoSQL数据则更加灵活和可扩展,存储方式可以是JSON文档、哈希表或者其他方式。

SQL通常以数据库表形式存储数据。例如,记录员工入职数据,见表7-1。

表7-1 员工入职数据存储(SQL)

而NoSQL存储方式比较灵活。例如使用类JSON文件存储上表中张三的入职数据,如图7-2所示。

图7-2 员工入职数据存储(NoSQL)

2)表/数据集合的数据的关系

在SQL中,必须定义好表和字段结构后才能添加数据。例如,定义表的主键(Primary Key)、索引(Index)、触发器(Trigger)、存储过程(Stored Procedure)等。表结构可以在被定义之后更新,但是如果有比较大的结构变更的话就会变得比较复杂。

在NoSQL中,数据可以在任何时候任何地方添加,不需要先定义表。例如,图7-3中这段代码会自动创建一个新的“员工表”数据集合。

图7-3 数据添加(NoSQL)

NoSQL也可以在数据集中建立索引。以MongoDB为例,会自动在数据集合创建后创建唯一值_id字段,这样的话就可以在数据集创建后增加索引。从这点来看,NoSQL可能更加适合初始化数据还不明确或者未定的项目中。

3)外部数据存储

SQL中,如果需要增加外部关联数据,规范化做法是在原表中增加一个外键,关联外部数据表。例如,需要在员工表中增加审核人信息,见表7-2。

表7-2 增加审核人信息(SQL)

然后再在原来的入职员工表中增加审核人外键,具体见表7-3。

表7-3 增加审核人外键(SQL)

这样,如果需要更新审核人个人信息,只需要更新审核人表而不需要对借阅人表进行更新。(www.xing528.com)

而在NoSQL中除了这种规范化的外部数据表做法以外,还能用图7-4的非规范化方式把外部数据直接放到原数据集中,以提高查询效率。其缺点也比较明显,更新审核人数据的时候会比较麻烦。

4)SQL中的JOIN查询

SQL中可以使用JOIN表链接方式将多个关系数据表中的数据用一条简单的查询语句查询出来。NoSQL暂未提供类似JOIN的查询方式对多个数据集中的数据进行查询,所以大部分NoSQL使用非规范化的数据存储方式存储数据。

5)数据耦合性

SQL中不允许删除已经被使用的外部数据。例如,审核人表中的“李科长”已经被分配给了入职员工“张三”,那么在审核人表中不允许删除李科长这条数据,以保证数据完整性。而NoSQL中则没有这种强耦合的概念,可以随时删除任何数据。

6)事务

图7-4 增加外部数据存储(NoSQL)

SQL中,如果多张表数据需要同批次被更新,即如果其中一张表更新失败的话,其他表也不能更新成功。这种场景可以通过事务来控制,可以在所有命令完成后再统一提交事务。而NoSQL中没有事务这个概念,每一个数据集的操作都是原子级的。

7)查询性能

在相同水平的系统设计的前提下,因为NoSQL中省略了JOIN查询的消耗,故在理论上其性能是优于SQL的。

8)适用范围不同

关系型数据库适合存储结构化数据,如用户的账号、地址

·这些数据通常需要做结构化查询,比如JOIN,此时关系型数据库更胜一筹;

·这些数据的规模、增长的速度通常是可以预期的;

·事务性、一致性。

NoSQL适合存储非结构化数据,如文章、评论:

·这些数据通常用于模糊处理,如全文搜索、机器学习

·这些数据是海量的,而且增长的速度是难以预期的;

·根据数据的特点,NoSQL数据库通常具有无限(至少接近)伸缩性;

·按Key获取数据效率很高,但是对JOIN或其他结构化查询的支持就比较差。

基于它们的适用范围不同,目前许多大型互联网项目都会选用关系型数据库加NoSQL的组合方案。目前为止,还没有出现一个能够通吃各种场景的数据库,而且根据CAP理论,这样的数据库是不存在的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈