关系型数据库 VS 非关系型数据库
一、关系数据库?
1.概念
关系数据库是使用关系模型来组织数据的数据库。简单地说,关系模式是一个二维表格模型。
主要代表:SQL Server、Oracle、Mysql、PostgreSQL。
2.优势
(1)。通俗易懂,二维表的结构与现实世界非常接近,二维表通俗易懂。
(2)简单易用,常用的SQL语句,操作关系型数据库非常方便。
(3)易于维护关系型数据库 VS 非关系型数据库,数据库的ACID属性大大降低了数据冗余和数据不一致的概率。
3.瓶颈
(1) 海量数据的读写效率。
对于高并发的网站,往往达到每秒几万个请求,对于传统的关系型数据库,硬盘I/O是一个很大的挑战。
(2) 高可扩展性和可用性。
在基于Web的结构中,数据库是最难横向扩展的。当一个应用系统的用户和访问量日益增加时,数据库没有办法像Web服务器那样通过增加更多的硬件和服务节点来扩展其性能。和负载能力。
二、从关系到非关系
关系数据库最大的优点是事务的一致性。这个特性使得关系型数据库适用于所有需要高一致性的系统。例如:银行系统。
但是在 Web 应用中,对这种一致性的要求并没有那么严格,并且允许有一定的时间间隔,所以关系数据库的特性并不那么重要。相反,关系数据库为保持一致性付出的巨大代价是读写性能差。但是微博、Facebook等应用对并发读写的要求极高,关系型数据库已经无法应对。因此,关系型数据库必须更换为新的数据结构存储。于是,非关系型数据库应用诞生了。
三、非关系型
1.概念
NoSQL非关系型数据库主要是指那些一般不保证ACID的非关系型分布式数据存储系统,主要代表MongoDB、Redis、CouchDB。
NoSQL 提出了另外一个概念,通过 key 和 value 存储,结构不稳定。每个元组可以有不同的字段。这不限于固定的结构,可以减少一些时间和空间开销。. 这样,为了获取用户的不同信息,就不需要像关系数据库那样进行多表查询了。只需要根据key取回对应的value即可。
2.类别
非关系型数据库大多是开源的,实现比较简单,而且大多是针对某些特性的应用需求而出现的。根据不同的结构化方式和应用场景,分为以下几类。
(1)高性能并发读写的键值数据库
主要特点是具有极高的并发读写性能,如Redis、Tokyo Cabint等。
(2)面向文档的数据库,用于海量数据访问
特点是可以在海量数据库中快速查询数据。例如 MongoDB 和 CouchDB。
(3)对于可扩展的分布式数据库
主要解决的问题是传统数据库的可扩展性缺陷。
3.缺点
但是因为Nosql的约束很少,所以不能像sql一样提供where字段属性的查询。因此,它适用于存储相对简单的数据。有些不能持久化数据,所以需要和关系型数据库结合。
四、比较
1.存储?
Sql通常以数据库表的形式存储,比如存储用户信息。如果在 SQL 中添加外部关系,则需要在原表中添加外键来关联外部数据表。如下:
NoSql以key-value的形式存储
2.事务
在SQL中,如果需要在同一个批次中更新多个表,即其中一个表更新失败,其他表也不会更新成功。这种场景可以通过事务来控制,在所有命令完成后统一提交事务。Nosql 中没有事务的概念,每个数据集都是原子的。
3.数据表与数据集
关系是表格的,存储在数据表的行和列中。相互关联,易于提取。块不是关系的,而是存储在一起的。
4.预定义结构与动态结构
在 SQL 中关系型数据库,数据只有在定义了位置和表结构后才能添加,例如定义表的主键、索引和外键。表结构定义后可以更新,但如果结构变化比较大,就会变得更加复杂。
在 Nosql 数据库中,可以随时随地添加数据。不需要预先定义。
5.存储规范与存储代码
为了规范,关系数据库将数据分配到最小的逻辑表中进行存储,以避免重复,获得简化的空间利用率。但是多表之间的关系是有限的,多表的管理有点复杂。
精简存储当然可以节省宝贵的数据存储空间,但现在随着社会的发展,在磁盘上付出的代价已经可以忽略不计了。
非关系型是扁平的数据集合,数据经常可以重复,单个数据库很少分开,而是整体存储,整块读取数据效率更高。
6.向上扩展与向外扩展
为了支持更多的并发,SQL数据采用垂直扩展来提高处理能力,通过提高计算机性能来提高处理能力。
NoSql横向扩展,非关系型数据库自然分布,所以可以通过集群实现负载均衡。
7.其他方面
例如:Relational是一种结构化查询语言,NoSql是一种更简单更准确的数据访问方式;SQl 数据库大多价格昂贵,而 NoSql 大多是开源的。
五、选择?
目前很多大型互联网都会选择MySql+NoSql的组合,因为SQL和NoSql各有优缺点。
关系型数据库适用于存储结构化数据,例如用户账户和地址:
(1)这些数据通常需要结构化查询,比如Join,这个时候关系型数据库会更胜一筹。
(2)这些数据的大小和增长率通常是可以预料的。
(3)事务性的关系型数据库 VS 非关系型数据库,一致的关系型数据库,适合存储更复杂的数据。
NoSql适合存储非结构化数据,比如:文章、评论:
(1)这些数据通常用于混淆,比如全文搜索,机器学习,适合存储更简单的数据。
(2)这些数据是海量的,增长速度是不可预测的。
(3)key获取数据效率很高,但是对join或者其他结构化查询的支持比较差。
总结:
SQL 数据库仍然很强大,可以可靠地处理事务并保持事务完整性。仅当您的数据非常大并且操作扩展需要更分布式的系统时才考虑 NoSql 数据库。
原文链接:/lzj3462144/article/details/70973368
评论前必须登录!
注册