SQLvsNoSQL没有硝烟的战争!没有硝烟的战争!
SQL(结构化查询语言)数据库作为一个主要的数据存储机制已经超过40个年头了。随着web应用和像MySQL、PostgreSQL和
SQLite这些开源项的兴起,SQL使用量大大增加。
NoSQL数据库在20世纪60年代就已经出现了,但最近因为MongoDB、CouchDB,Redis和Apache Cassandra等才受到广泛
的关注。
你会发现很多教程都会解释如何根据你的兴趣选择去使用SQL还是NoSQL,但是很少讨论为什么应该去选择它。我希望能够
填补这一空白。在这篇文章中,我们将介绍基本的差异。在稍后的后续的文章中,我们将查看一些典型的场景,并确定最佳的
选择。
大多数的例子都适用于目前流行的MySQL SQL和MongoDB NoSQL数据库系统。其他SQL/NOSQL数据库都是类似的,但会
有细微的差别和语法特征。
SQL和NoSQL的圣战
在我们开始之前,先纠正一些所谓的神话…
神话1:NoSQL将取代SQL
这么说就好比说船将被车取代,因为它是新的技术。SQL和NoSQL做的是相同的事:数据存储。它们采取的方法不同,这可
能回帮组或阻碍你的项目。尽管感觉技术更新,并经常在最近上头条,NoSQL不是SQL的替代品——而是一种选择。
神话2:NoSQL比SQL更好或更坏
一些项目更适合使用SQL数据库,一些更适合NoSQL,而一些可以两者交替使用。这边文章不会是SitePoint Smackdown,因
为你不能在所有方面都应用相同的广泛性假设。
神话3:SQL和NoSQL天壤之别
这不一定是个事实。一些SQL数据库采用NoSQL的特点,反之亦然。选择可能会变得越来越模糊,NewSQL混合数据库可能
会在将来提供一些有趣的选择。
神话4:语言/框架决定了使用什么样的数据库
我们已经习惯了技术堆,比如——
LAMP: Linux, Apache, MySQL (SQL), PHP
MEAN: MongoDB (NoSQL), Express, Angular, Node.js
.NET, IIS and SQL Server
Java, Apache and Oracle.
有实践的、历史的和商业的原因来解释这些stack的发展——但不能认为它们就是规则。你可以在你的PHP或.NET项目中使用
MongoDB NoSQL数据库。你可以在Node.js中连接MySQL或者SQL服务器。你可能没有找到很多教程和资源,但是是你的需
求决定数据库的类型——而不是所谓的语言。
(有句话是这么说的,不要让生活有目地为难自己!选择一个不寻常的技术组合或者SQL和NoSQL组合是可行的,但困难的是找
到支持和聘请有经验的开发者)
有了这样的想法,我们来看看主要的差异。
SQL表VS NoSQL文档
SQL数据库提供相关数据表的存储。例如,如果你有一个网上书店,图书的信息将会被添加到一个book的表中:
每一行是一个不同的记录。设计是刚性的;你不能使用同一个表来存储不同的信息,或者在一个数字格式输入字符。
NoSQL数据库存储JSON格式的字段值对文档,比如: