关系型数据库VS⾮关系型数据库
关系型
1.概念
关系型数据库是指采⽤了关系模型来组织数据的数据库。简单来说,关系模式就是⼆维表格模型。
主要代表:SQL Server, Oracle, Mysql, PostgreSQL。
2.优点
(1)容易理解,⼆维表的结构⾮常贴近现实世界,⼆维表格,容易理解。
(2)使⽤⽅便,通⽤的sql语句使得操作关系型数据库⾮常⽅便。
(3)易于维护,数据库的ACID属性,⼤⼤降低了数据冗余和数据不⼀致的概率。
3.瓶颈
(1 )海量数据的读写效率。
对于⽹站的并发量⾼,往往达到每秒上万次的请求,对于传统关系型数据库来说,硬盘I/o是⼀个很⼤的挑战。
(2) ⾼扩展性和可⽤性。
在基于web的结构中,数据库是最难以横向拓展的,当⼀个应⽤系统的⽤户量和访问量与⽇俱增的时候,数据库没有办法像web Server那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能⼒。
从关系型到⾮关系型
关系型数据库的最⼤优点就是事务的⼀致性,这个特性,使得关系型数据库中可以适⽤于⼀切要求⼀致性⽐较⾼的系统中。⽐如:银⾏系统。
但是在⽹页应⽤中,对这种⼀致性的要求不是那么的严格,允许有⼀定的时间间隔,所以关系型数据库这个特点不是那么的重要了。相反,关系型数据库为了维护⼀致性所付出的巨⼤代价就是读写性能⽐较差。⽽像微博、facebook这类应⽤,对于并发读写能⼒要求极⾼,关系型数据库已经⽆法应付。所以必须⽤⼀种新的数据结构存储来替代关系型数据库。所以⾮关系型数据库应⽤⽽⽣。
⾮关系型
1.概念
NoSQL⾮关系型数据库,主要指那些⾮关系型的、分布式的,且⼀般不保证ACID的数据存储系统,主要代表MongoDB,Redis、CouchDB。
NoSQL提出了另⼀种理念,以键值来存储,且结构不稳定,每⼀个元组都可以有不⼀样的字段,这种就不会局限于固定的结构,可以减少⼀些时间和空间的开销。使⽤这种⽅式,为了获取⽤户的不同信息,不需要像关系型数据库中,需要进⾏多表查询。仅仅需要根据key来取出对应的value值即可。
2.分类
⾮关系数据库⼤部分是开源的,实现⽐较简单,⼤都是针对⼀些特性的应⽤需求出现的。根据结构化⽅法和应⽤场景的不同,分为以下⼏类。
(1)⾯向⾼性能并发读写的key-value数据库
主要特点是具有极⾼的并发读写性能,例如Redis、Tokyo Cabint等。
(2)⾯向海量数据访问的⾯向⽂档数据库
特点是,可以在海量的数据库快速的查询数据。例如MongoDB以及CouchDB.
(3)⾯向可拓展的分布式数据库
解决的主要问题是传统数据库的扩展性上的缺陷。
3.缺点
数据库简单吗
但是由于Nosql约束少,所以也不能够像sql那样提供where字段属性的查询。因此适合存储较为简单的数据。有⼀些不能够持久化数据,所以需要和关系型数据库结合。
对⽐
1.存储上?
Sql通常以数据库表的形式存储,例如存储⽤户信息,SQL中增加外部关系的话,需要在原表中增加⼀个外键,来关联外部数据表。如下:NoSql采⽤key-value的形式存储
2.事务
SQL中如果多张表需要同批次被更新,即如果其中⼀张表跟新失败的话,其他表也不会更新成功。这种场景可以通过事务来控制,可以在所有命令完成之后,再统⼀提交事务。在Nosql中没有事务这个概念,每⼀个数据集都是原⼦级别的。
3.数据表 VS 数据集
关系型是表格型的,存储在数据表的⾏和列中。彼此关联,容易提取。⽽⾮关系型是⼤块存储在⼀起。
4.预定义结构 VS 动态结构
在sql中,必须定义好地段和表结构之后,才能够添加数据,例如定义表的主键、索引、外键等。表结构可以在定义之后更新,但是如果有⽐较⼤的结构变更,就会变的⽐较复杂。
在Nosql数据库中,数据可以在任何时候任何地⽅添加。不需要预先定义。
5.存储规范 VS 存储代码
关系型数据库为了规范性,把数据分配成为最⼩的逻辑表来存储避免重复,获得精简的空间利⽤。但是多个表之间的关系限制,多表管理就有点复杂。
当然精简的存储可以节约宝贵的数据存储,但是现在随着社会的发展,磁盘上付出的代价是微不⾜知道的。
⾮关系型是平⾯数据集合中,数据经常可以重复,单个数据库很少被分开,⽽是存储成为⼀个整体,这种整块读取数据效率更⾼。
6.纵向拓展 VS 横向拓展
为了⽀持更多的并发量,SQL数据采⽤纵向扩展,提⾼处理能⼒,通过提⾼计算机性能来提⾼处理能⼒。
NoSql通过横向拓展,⾮关系型数据库天然是分布式的,所以可以通过集来实现负载均衡。
7.其他⽅⾯
⽐如:关系型是结构化查询语⾔,NoSql是采⽤更简单⽽且精确的数据访问⽅式;SQl数据库⼤多⽐较昂贵,⽽NoSql⼤多是开源的。
选择
⽬前许多⼤型互联⽹都会选⽤MySql+NoSql的组合⽅案,因为SQL和NoSql都有各⾃的优缺点。
关系型数据库适合存储结构化数据,⽐如:⽤户的账号、地址:
(1)这些数据通常需要做结构化查询,⽐如说Join,这个时候,关系型数据库就要胜出⼀筹。
(2)这些数据的规模、增长的速度通常是可以预期的。
(3)事务性、⼀致性,适合存储⽐较复杂的数据。
NoSql适合存储⾮结构化数据,⽐如:⽂章、评论:
(1)这些数据通常⽤于模糊处理,例如全⽂搜索、机器学习,适合存储较为简单的数据。
(2)这些数据是海量的,并且增长的速度是难以预期的。
(3)按照key获取数据效率很⾼,但是对于join或其他结构化查询的⽀持就⽐较差。
总结:
SQL数据库依然强⼤,可以可靠的处理事务并且保持事务的完整性,只有你的数据⾮常⼤,操作扩展需要更加分布式的系统时,才考虑NoSql数据库。
mysql与sql的区别有哪些?
SQL: 结构化查询语⾔(Structured Query Language),是⼀种⽤于操作数据库的语⾔,它是⽤于所有数据库的基本语⾔。
1、本质上:
SQL,是⼀种数据库语⾔,有标准的,相当于C语⾔;⽽MySQL是DBMS,数据库管理系统,是⼀个数
据库软件或应⽤程序。
2、⽬的上:
SQL⽤于访问,更新和操作数据库中的数据;⽽,MySQL是⼀种RDBMS,它允许保持数据库中存在的数据。
3、更新上:
SQL的语⾔是固定的,命令保持不变;⽽,MySQL可以获得频繁的更新。
4、使⽤上:
要学习SQL语⾔了才能有效地使⽤它;⽽,MySQL可以通过下载和安装就可轻松获得并使⽤。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。