1、概念:
SQL(Structured Query Language)数据库,指关系型数据库。主要代表:SQL Server、Oracle、MySQL、PostgreSQL。
NoSQL(Not Only SQL)泛指非关系型数据库。主要代表:MongoDB、Redis、CouchDB。
2、诞生原因:
随着互联网的不断发展,各类型的应用层出不穷,在这个云计算的时代,对技术提出了更多的需求,主要体现在这四个方面:
①低延迟的读写速度:应用快速的反应能极大地提升用户的满意度。
②海量的数据和流量:对于搜索这样大型应用而言,需要利用PB级别的数据和能应对百万级的流量。
③大规模集群的管理:系统管理员希望分布式应用能更简单的部署和管理。
④庞大运营成本的考量:IT经理们希望在硬件成本、软件成本和人力成本能够有大幅度地降低。
目前世界上主流的存储系统大部分还是采用了关系型数据库,其主要有以下优点:
①事务处理——保持数据的一致性。
②由于以标准化为前提,数据更新的开销很小
③可以进行join等复杂查询
虽然关系型数据库已经在业界的数据存储方面占据了不可动摇的地位,但是由于其天生的几个限制,使其很难满足上面这几个要求:
①扩展困难:由于存在类似join这要多表查询机制,使得数据库在扩展方面很艰难
②读写慢:这种情况主要发生在数据量达到一定规模时由于关系型数据库的系统逻辑非常复杂,使得其非常容易发生死锁等的并发问题,所以导致其读写速度下滑非常严重。
③成本高:企业级数据库的License价格很惊人,并且随着系统的规模而不断上升。
④有限的支撑容量:现有关系型解决方案还无法支撑Google这样海量的数据存储。
2、NoSQL优缺点:
优点:
①简单的扩展:典型例子是Cassandra,由于其架构是类似于经典的P2P,所以能通过轻松地添加新的节点来扩展这个集群。
②快速的读写:主要例子有Redis,由于其逻辑简单,而且纯内存操作,使得其性能非常出色,单节点每秒可以处理超过10万次读写操作。
③低廉的成本:这是大多数分布式数据库共有的特点,因为主要都是开源软件,没有昂贵的License成本。
缺点:
①不提供对SQL的支持:如果不支持SQL这样的工业标准,将会对用户产生一定的学习和应用迁移成本。
②支持的特性不够丰富:现有产品所提供的功能都比较有限,大多数NoSQL数据库都不支持事务,也不像MSSQL Server和Oracle那样能提供各种附加功能,比如BT和报表等。
③现有产品的不够成熟:大多数产品都还处于初创期。
3、NoSQL使用场景
①数据库表schema经常变化
②数据库表字段是复杂数据类型
③高并发数据库请求
④海量数据的分布式存储。
4、NoSQL与SQL的区别:
SQL数据库:
在使用之前需要定义表的一个模式
在表中存储相关联的数据
支持join多表查询
提供事务
使用一个强声明性语言查询
提供足够的支持,专业技能和工具
NoSQL数据库:
将相关联的数据存储在类似JSON格式,名称-值
可以保存没有指定格式的数据
保证更新一个文档,但不是多个文档
提供出色的性能和可伸缩性
使用JSON数据对象查询