2

来自维基百科:

[NoSQL 数据库] 的著名生产实施包括 Google 的 BigTable、亚马逊的 Dynamo 和 Cassandra。

但是 Google 的 BigTable确实有一些 SQL 变体,称为GQL

我错过了什么?

4

3 回答 3

18

NoSQL 是所有不同于“标准”SQL 数据库的数据库的总称,例如 MySQL、Microsoft SQL Server 和 PostgreSQL。

这些“标准”SQL 数据库都是关系数据库,具有 SQL 查询语言并遵守ACID 属性。这些属性基本上归结为一致性

NoSQL 数据库不同,因为它不支持所谓的“SQL 数据库”的以下一项或多项关键功能:

  • 一致性
  • 关系数据
  • SQL 语言

大多数这些功能齐头并进。

一致性

一致性是大多数 NoSQL 数据库与 SQL 数据库不同的地方。您可以从 SQL 数据库中拔出插头,它将确保您的数据仍然一致且未损坏。NoSQL 数据库倾向于牺牲这种一致性以获得更好的可扩展性。谷歌的 Bigtable 也是这样做的。

关系数据

SQL 数据库围绕规范化的关系数据展开。数据库确保这些关系保持有效和一致,无论您向它抛出什么。NoSQL 数据库通常不支持关系,因为它们不支持强制执行这些关系的一致性。此外,当数据分布在多个服务器上时,关系数据对性能不利。

一个例外是图形数据库。这些被认为是 NoSQL 数据库,但具有关系数据。事实上,这就是他们的全部内容!

SQL 语言

SQL 语言是专门为关系数据库设计的,即所谓的“SQL 数据库”。由于大多数 NoSQL 数据库与关系数据库有很大不同,因此它们不需要 SQL。此外,一些 NoSQL 数据库具有根本无法用 SQL 表达的特性,因此需要不同的查询语言。

最后但同样重要的是,NoSQL 只是一个流行词。它的基本意思是“除了阁楼上的旧且可信赖的 MySQL 服务器之外的任何东西”,其中包括许多替代存储机制。即使是简单的文本文件也可以视为 NoSQL 解决方案 :)

于 2010-11-23T12:55:59.860 回答
6

当人们说“NoSQL”时,他们通常的意思是“非关系”。据我所知,BigTable 没有任何类型的主键/外键、JOIN 或关系演算。

BigTable 具有包含单词“SELECT”和“WHERE”的查询语法这一事实并不意味着它遵循关系数据库的原则。让来自关系数据库的程序员更熟悉单实体类型匹配,这更像是一种方便或“钩子”。

于 2010-11-23T12:18:13.473 回答
0

Google 的 BigTable 确实有一些 SQL 变体,称为 GQL

嗯,这就是重点。他们确实有一种语言是 No(t) SQL。只有这样才有足够的理由被分开。

您应该在所有 NoSQL 数据库(图形、文档、大表......)中看到的唯一共同点是它们不响应 SQL 查询。

支持 SQL 对内部数据的组织方式和您可以使用的算法有很大的限制。NoSQL 拒绝这些限制来实施替代算法以改进成为完全 SQL 合规性受害者的重要功能。

于 2014-02-03T15:49:29.913 回答