关系型数据库与NoSQL的对比
SQL(结构化的查询语言)数据库是过去四十年间存储数据的主要方式。20世纪90年代末随着Web应用和MySQL、PostgreSQL和SQLite等开源数据库的兴起,用户爆炸式的增长。
NoSQL数据库自从20世纪60年代就已经存在了,直到MongoDB, CouchDB, Redis 和 Apache Cassandra等数据库的流行才获取了更多的关注。
你可以很容易地找到许多关于如何使用一款特定的SQL或NoSQL的教程,但是很少有讨论你为什么优先的使用一款而不适用另一款。我希望我能够填补这个空白。在这篇文章中将会介绍它们之间的不同。在后续的文章中,我们将会根据典型的场景来确定最佳的选择。
大多数的例子都适用于流行的关系型数据库MySQL和MongoDB NoSQL数据库.其它的SQL/NoSQL也是类似的,但是在语法和特点上会有一些细微的差别。
SQL与NoSQL之间的战争
在我们进一步讨论之前,我们先不去考虑各种观点......
观点一:NoSQL将会取代SQL
这个观点就像是说船将会取代汽车,因为船是一种新的技术一样,这是不可能发生的事情。SQL和NoSQL有着相同的目标:存储数据。它们存储数据的方式不同,这可能会影响到你开发的项目,一种会简化你的开发,一种会阻碍你的开发。尽管目前NoSQL数据库非常的火爆,但是NoSQL是不能取代SQL的--它仅仅是SQL的一种替代品。
观点二:NoSQL要比SQL好/坏
一些项目可能会更适合使用SQL数据库,然而一些项目可能会比较适合使用NoSQL,有些项目使用哪一种都可以很好地达到预期的效果。本文不支持任何一方,因为没有一种方式可以使用到所有的项目中去。
观点三:SQL与NoSQL之间有明显的差别
这个观点并不是很正确。一些SQL数据库也采用了NoSQL数据库的特性,反之亦然。在选择数据库方面的界限变得越来越模糊了,并且一些新的混合型数据库将会在不久的将来提供更多的选择。
观点四:语言或框架决定使用何种数据库
我们已经习惯于使用一些现有的框架进行开发,例如:
- LAMP:Linux,Apache,MySQL(SQL),PHP
- MEAN:MongoDB(NoSQL),Express,Angular,Node.js
- .NET,IIS和SQL Server
- Java,Apache和Oracle
由于很多实际的,历史的和商业化的原因导致了这些框架的发展,但是它们并不是一种规则约束。你可以在你的PHP和.NET的项目中使用MongoDB。也可以在Node.js中使用MySQL或者
延伸阅读
学习是年轻人改变自己的最好方式