来自维基百科:
[NoSQL数据库]的着名生产实现包括谷歌的BigTable,亚马逊的Dynamo和Cassandra.
但谷歌的BigTable 确实有一些SQL的变种,称为GQL.
我错过了什么?
NoSQL是所有与"标准"SQL数据库不同的数据库的总称,如MySQL,Microsoft SQL Server和PostgreSQL.
这些"标准"SQL数据库都是关系数据库,具有SQL查询语言并遵循ACID属性.这些属性基本上归结为一致性.
NoSQL数据库是不同的,因为它不支持所谓的"SQL数据库"的一个或多个这些关键功能:
一致性
关系数据
SQL语言
大多数这些功能齐头并进.
一致性是大多数NoSQL数据库与SQL数据库不同的地方.您可以从SQL数据库中拔出插件,它将确保您的数据仍然一致且未损坏.NoSQL数据库倾向于牺牲这种一致性以获得更好的可伸缩性.Google的Bigtable也是这样做的.
SQL数据库围绕规范化的关系数据.数据库确保这些关系保持有效和一致,无论您抛出什么.NoSQL数据库通常不支持关系,因为它们不支持一致性来强制执行这些关系.此外,当数据分布在多个服务器上时,关系数据对性能不利.
图表数据库是一个例外.这些被认为是NoSQL数据库,但具有关系数据的特征.事实上,这就是他们的全部!
SQL语言专为关系数据库而设计,即所谓的"SQL数据库".由于大多数NoSQL数据库与关系数据库非常不同,因此它们不需要SQL.此外,一些NoSQL数据库具有无法在SQL中表达的功能,因此需要不同的查询语言.
最后,但并非最不重要的,NoSQL只是一个流行语.它基本上意味着"除阁楼中旧的和可靠的MySQL服务器之外的任何东西",其中包括许多替代存储机制.即使是简单的文本文件也可以被认为是NoSQL解决方案:)
当人们说"NoSQL"时,他们通常所说的是"非关系型".据我所知,BigTable没有主键/外键,JOIN或任何类型的关系演算.
BigTable具有包含单词"SELECT"和"WHERE"的查询语法这一事实并不意味着它遵循关系数据库的原则.对于来自关系数据库的程序员来说,单实体类型的匹配更为熟悉,这更方便了一个"钩子".