一、概念



  SQL (Structured Query Language) 数据库,指关系型数据库。主要代表:SQL Server,Oracle,MySQL(开源),PostgreSQL(开源)。



  NoSQL(Not Only SQL)泛指非关系型数据库。主要代表:MongoDB,Redis,CouchDB。



二、区别

1、存储方式



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



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



在SQL中,必须定义好表和字段结构后才能添加数据,例如定义表的主键(primary key),索引(index),触发器(trigger),存储过程(stored procedure)等。 表结构可以在被定义之后更新,但是如果有比较大的结构变更的话就会变得比较复杂。在NoSQL中,数据可以在任何时候任何地方添加,不需要先定义表。NoSQL也可以在数据集中建立索引.



    SQL有固定的结构,表与表之间关联关系,更改方便.NoSQL没有固定的结构,关系可以很松撒.更改不是很方便.



4、SQL中的JOIN查询



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




6、事务



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



 



7、增删改查语法



 



8、查询性能



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



三、补充



  目前许多大型互联网项目都会选用MySQL(或任何关系型数据库) + NoSQL的组合方案。



 



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



  1)这些数据通常需要做结构化查询(嗯,好像是废话),比如join,这时候,关系型数据库就要胜出一筹



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



  3)事务性、一致性



 



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



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



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



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



  4)按key获取数据效率很高,但是对join或其他结构化查询的支持就比较差



 



CAP理论,这样的数据库是不存在的。 





四.总结

     

有结构,需要关联的数据,用上事务管理的,数据增长可预期的数据 用SQL数据库(关系型数据库)  如:需要表数据关联的数据

    没有固定结构,数据关联不紧密  用NoSQL数据库储存    如:会话、配置文件、参数、购物车等