Answers:
NoSQL代表“不仅SQL”,而且通常表示该数据库不是关系数据库,在过去的几十年中它非常流行。
NoSQL在最近几年如此流行的主要原因是,当关系数据库从一台服务器中成长出来时,它不再那么容易使用。换句话说,它们在分布式系统中无法很好地扩展。您提到的Google,Yahoo,Facebook和Amazon(我对Digg不太了解)的所有大型网站都有大量数据,并且出于多种原因将数据存储在分布式系统中。可能是数据不适合在一台服务器上,或者对高可用性有要求。
可以通过CAP定理描述分布式系统的属性。在这三个属性中,您最多只能拥有两个:
Amazon Dynamo使用最终一致性来获取所有三个属性。本文迪纳摩:亚马逊的高度可用的key-value存储是值得学习一下NoSQL数据库和分布式系统时阅读。Amazon Dynamo具有A和P属性。
Google对BigTable采取另一种方法,该方法具有C和A属性。
正如我在开始时所写的那样,还有许多其他种类的NoSQL数据库,它们是为不同的需求而设计的。例如图数据库(如Neo4j),文档数据库(如CouchDB)和多模型/对象数据库(如OrientDB)。
最后,我想说的是关系数据库将继续流行。它们非常灵活且可维护。但是它们并不总是最佳选择。
NoSQL是一个非常宽泛的术语,通常称为“不仅仅是SQL”。该术语在非RDBMS社区中不再受欢迎。
您会发现NoSQL数据库没有几个共同的特征。它们可以大致分为以下几类:
这是一个很大的问题,但是在本《分布式数据库概览》中已经很好地回答了。
一个简短的答案:
NoSQL数据库可以省去ACID的各个部分,以实现某些其他好处-分区容限,性能,分配负载或通过添加新硬件进行线性扩展。
至于何时使用它们-完全取决于应用程序的需求。
NoSQL是一种没有传统RDBMS那样的固定模式的数据库。对于NoSQL数据库,架构由开发人员在运行时定义。他们不针对数据库编写普通的SQL语句,而是使用API来获取所需的数据。NoSQL数据库通常可以轻松地在不同的物理服务器上扩展,而无需知道您要查找的数据在哪台服务器上。
但是,要想获得所有这些灵活性,还需要进行一些权衡:与SQL Server,Oracle,DB2,MySQL等RDBMS系统相比,NoSQL数据库缺少很多漂亮的功能。没有Service Broker,事务日志记录,ETL包等。
NoSQL并不是什么新鲜事物。它实际上已经存在了50-60年。那时它被称为COBOL。同样的想法,只是另一个小组提出了。
基本上省去了关系设置,主键和外键以及保持事务安全性所涉及的额外开销,通常可以极大地提高性能。但是,这并不是新数据库/数据存储所独有的,例如,MySQL已通过绕过层调整为在“ NoSQL级别”执行。
简而言之,如果您可以承担可能丢失数据的风险,那么通常可以获得令人印象深刻的性能。大多数NoSQL系统都这样做。例如,MongoDB在方便时会暂存要写入的数据更改。数据本身是安全和事务安全的,但保留在易失性存储(内存)中。如果您断电,则不能100%确保您没有丢失数据,或者您没有损坏的数据。
在安全性和性能之间进行权衡。
一个好的起点是Wikipedia条目。本质上是将一个表中的数据与另一个表中的数据相关联,而是将它们存储为键值对,并且没有数据库架构,而是由代码来处理。
一些站点同时使用NoSQL和典型的RDBMS服务器,但存储不同的数据。因此,您不必选择一个。
我在MongoDB NoSQL数据库和Oracle上进行了大量工作。
架构图
SQL数据库具有其自己的预定义架构来存储结构化数据。
在NoSQL数据库中,没有预定义的架构,此处架构是基于数据元素的最动态的元素。
可扩展性
SQL数据库是垂直可伸缩的,这意味着如果要扩展SQL基本数据库,则需要增强安装DBMS系统的硬件。有时这是可伸缩性限制的地方。
NoSQL数据库是水平可伸缩的,这意味着如果要扩展它,我们需要添加更多的节点并根据自己的需要和所需的功能创建分发网络。这就是它们减少数据库负载的方式
资料检索
在基于SQL的数据库中,要定义和处理数据,我们可以使用SQL(结构化查询语言),它现在非常强大。
在NoSQL数据库方面,查询集中在集合和文档上。有时,它称为UnQL(非结构化查询语言)。这仍处于发展阶段,因此每个NoSQL数据库的供应商各不相同。
有关关键差异的更多信息,请访问我的博客:SQL和NoSQL数据库之间的差异