在日常的编码中,我们常用的是SQL(结构化的查询语言)数据库,SQL是过去四十年间存储数据的主要方式。现在主流的SQL主要有MySQL、SQLServer、Oracel等数据库。NoSQL数据库自从20世纪60年代就已经存在了,现在主流的NoSQL有MongoDB, CouchDB, Redis 和Memcache等数据库。

SQL就不做过多的介绍了,我们来说一下NoSQL。NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

菜鸟教程的SQL简介:http://www.runoob.com/sql/sql-tutorial.html

菜鸟教程的NOSQL简介:http://www.runoob.com/mongodb/nosql.html

关于NoSQL和MySQL一点看法:

  1. SQL和NoSQL有着相同的目标:存储数据。但是它们存储数据的方式不同,这可能会影响到你开发的项目,一种会简化你的开发,一种会阻碍你的开发。尽管目前NoSQL数据库非常的火爆,但是NoSQL是不能取代SQL的--它仅仅是SQL的一种替代品。
  2. 一些项目可能会更适合使用SQL数据库,然而一些项目可能会比较适合使用NoSQL,有些项目使用哪一种都可以很好地达到预期的效果。
  3. SQL和NoSQL没有明显的区别。一些SQL数据库也采用了NoSQL数据库的特性,反之亦然。在选择数据库方面的界限变得越来越模糊了,并且一些新的混合型数据库将会在不久的将来提供更多的选择。

SQL和NoSQL的区别:

  1. SQL数据库提供关系型的表来存储数据,NoSQL数据库采用类JOSN的键值对来存储文档。                                               SQL中的表结构具有严格的数据模式约束,因此存储数据很难出错。                                                                          NoSQL存储数据更加灵活自由,但是也会导致数据不一致性问题的发生。
  2. 在SQL数据库中,除非你事先定义了表和字段的模式否则你无法向其中添加数据。在NoSQL数据库中,数据在任何时候都可以进行添加,不需要事先去定义文档和集合。                                                                                                         SQL在进行数据的逻辑操作之前我们必须要定义数据模式,数据模式可以在后期进行更改,但是对于模式的大改将会是非常复杂的。因此NoSQL数据库更适合于那些不能够确定数据需求的的工程项目(MongoDB会在集合中为每一个文档添加一个独一无二的id。如果你仍然想要定义索引,你也可以自己在之后定义)。

    模式中包含了许多的信息:主键 — 独一无二的标志就像ISBN唯一确定一条记录;索引 — 通常设置索引字段加快搜索的速度;关系 — 字段之间的逻辑连接;计功能例如触发器和存储程序  
  3. SQL具有数据库的规范化。NoSQL虽然可以同样使用规范化,但是更倾向非规范化。                                                        在SQL中我们需要增加一张新表tableB,一张旧表tableB关联新表只需使用外键B_id,用于引用tableB中的信息,这样的设计能够最小化数据的冗余,我们不需要为tableA重复的添加tableB的所有信息—只需要去引用就可以了。这项技术叫做数据库的规范化,具有实际的意义。我们可以更改tableB的信息而不用修改tableA中的数据。而NoSQL更多的是在tableA中为每项数据添加tableB的信息,这样会使查询更快,但是在更新出版社信息的记录变多时效率将会显著地下降。
  4. SQL具有JOIN操作。 NoSQL则没有

    SQL语言为查询提供了强大的JOIN操作。我们可以使用单个SQL语句在多个表中获取相关数据。而在NoSQL中没有与JOIN相同的操作,对于具有SQL语言经验的人来说是非常令人震惊的。这也是非规范化存在的原因之一。

  5. SQL具有数据完整性。NoSQL则不具备数据完整性

    大多数的数据库允许通过定义外键来进行数据库的完整性约束。在NoSQL数据库中则没有数据完整性的约束选项。你可以存储任何你想要存储的数据。理想情况下,单个文档将是项目的所有信息的唯一来源。

  6. SQL需要自定义事务。NoSQL 操作单个文档时具备事务性,而操作多个文档时则不具备事务性

    在SQL数据库中,两条或者多条更新操作可以结合成一个事务(或者全部执行成功否则失败)执行。将两条更新操作绑定为一个事务确保了它们要么全部成功要么全部失败。在NoSQL数据库中,对于一个文档的更新操作是原子性的。换句话说,如果你要更新一个文档中的三个值,要么三个值都更新成功要么它们保持不变。然而,对于操作多个文档时没有与事务相对应的操作。在MongoDB中有一个操作是transaction-like options,但是,需要我们手动的加入到代码中。

  7. SQL使用SQL语言。NoSQL使用类JSON

    SQL是一种声明性语言。SQL语言的功能强大,并且已经成为了一种国际的通用标准,尽管大多数系统在语法上有一些细微的差别。NoSQL数据库使用类似JOSN为参数的JavaScript来进行查询!基本操作是相同的,但是嵌套的JOSN将会产生复杂的查询。

  8. NoSQL比SQL更快

    通常情况下,NoSQL比SQL语言更快。这并没有什么好震惊的,NoSQL中更加简单的非规范化存储允许我们在一次查询中得到特定项的所有信息。不需要使用SQL中复杂的JOIN操作。也就是说,你的项目的设计和数据的需求会有很大的影响。一个好的SQL数据库的设计的表现一定会比一个设计不好的NoSQL数据库性能好很多,反之亦然。

适合使用SQL开发的项目:                                                                                                                                         

  1. 可以预先定义逻辑相关的离散数据的需求                                                                                                                     
  2. 数据一致性是必要的                                                                                                                                                   
  3. 具有良好的开发者经验和技术支持的标准的成熟技术

适合使用NoSQL开发的项目:                                                                                                                                    

  1. 不相关,不确定和逐步发展的数据需求                                                                                                                        
  2. 更简单或者更宽松的能够快速开始编程的项目
  3. 速度和可扩展性至关重要的

总结

SQL数据库:

  • 使用表存储相关的数据

  • 在使用表之前需要先定义标的模式

  • 鼓励使用规范化来减少数据的冗余

  • 支持使用JOIN操作,使用一条SQL语句从多张表中取出相关的数据

  • 需要满足数据完整性约束规则

  • 使用事务来保证数据的一致性

  • 能够大规模的使用

  • 使用强大的SQL语言进行查询操作

  • 提供大量的支持,专业技能和辅助工具

NoSQL数据库:

  • 使用类JSON格式的文档来存储键值对信息

  • 存储数据不需要特定的模式

  • 使用非规范化的标准存储信息,以保证一个文档中包含一个条目的所有信息

  • 不需要使用JOIN操作

  • 允许数据不用通过验证就可以存储到任意的位置

  • 保证更新的单个文档,而不是多个文档

  • 提供卓越的性能和可扩展性

  • 使用JSON数据对象进行查询

  • 是一种新型的技术

Logo

更多推荐