答案 0 :(得分:18)
NoSQL是所有与“标准”SQL数据库不同的数据库的总称,如MySQL,Microsoft SQL Server和PostgreSQL。
这些“标准”SQL数据库都是关系数据库,具有SQL查询语言并且遵循ACID properties。这些属性基本上归结为一致性。
NoSQL数据库不同,因为它不支持所谓的“SQL数据库”的一个或多个这些关键功能:
其中大部分功能齐头并进。
一致性是大多数NoSQL数据库与SQL数据库不同的地方。您可以从SQL数据库中拔出插件,它将确保您的数据仍然一致且未损坏。 NoSQL数据库倾向于牺牲这种一致性以获得更好的可伸缩性。 Google的Bigtable也是这样做的。
SQL数据库围绕规范化的关系数据。数据库确保这些关系保持有效和一致,无论您抛出什么。 NoSQL数据库通常不支持关系,因为它们不支持一致性来强制执行这些关系。此外,当数据分布在多个服务器上时,关系数据对性能不利。
例外是graph databases。这些被认为是NoSQL数据库,但具有关系数据的特征。事实上,这就是他们的全部意义!
SQL语言专为关系数据库而设计,即所谓的“SQL数据库”。由于大多数NoSQL数据库与关系数据库非常不同,因此它们不需要SQL。此外,一些NoSQL数据库具有无法在SQL中表达的功能,因此需要不同的查询语言。
最后,但并非最不重要的是,NoSQL只是一个流行语。它基本上意味着“阁楼中除了旧的和可靠的MySQL服务器之外的任何东西”,其中包括很多的替代存储机制。即使是简单的文本文件也可以被认为是NoSQL解决方案:)
答案 1 :(得分:6)
当人们说“NoSQL”时,他们通常所说的是“非关系型”。据我所知,BigTable没有主键/外键,JOIN或任何类型的关系演算。
BigTable具有包含单词“SELECT”和“WHERE”的查询语法这一事实并不意味着它遵循关系数据库的原则。对于来自关系数据库的程序员来说,单实体类型的匹配更为熟悉,这更方便了一个“钩子”。
答案 2 :(得分:0)
Google的BigTable确实有一些SQL变体,名为GQL
嗯,这就是重点。它们的语言是No(t)SQL。只有这个原因才能被分类。
你应该在NoSQL数据库(图形,文档,大表......)中看到的唯一共同点是它们不回答SQL查询。
支持SQL对内部数据的组织方式和可以使用的算法有很大的限制。 NoSQL拒绝这些限制来实现替代算法,以改进完全SQL合规性的受害者的重要功能。