NoSQL 和传统的 RDBMS 有什么区别?

Spr*_*dzy 71 nosql rdbms database-recommendation

NoSQL 和传统的 RDBMS 有什么区别?

在过去的几个月里,NoSQL 经常在技术新闻中被提及。与传统的 RDBMS 相比,它最重要的特征是什么?差异发生在什么级别(物理、逻辑)?

哪里是使用 NoSQL 的最佳场所?为什么?

Jon*_*nas 61

NoSQL 代表“不仅是 SQL”,通常意味着数据库不是关系数据库,这在过去的几十年中非常流行。

NoSQL 之所以近几年如此火爆,主要是因为当关系型数据库从一台服务器上长出来时,它就不再那么好用了。换句话说,它们在分布式系统中不能很好地扩展。你提到的所有大网站,谷歌、雅虎、Facebook 和亚马逊(我对 Digg 不太了解)都有大量数据,并且出于多种原因将数据存储在分布式系统中。可能是数据不适合一台服务器,或者有高可用性要求

CAP定理

分布式系统的特性可以用CAP 定理来描述。在三个属性中,您最多只能拥有两个:

  • Ç?onsistency
  • A ? 可用性
  • 容忍网络P?artitioning

Amazon Dynamo 使用最终一致性来接近获得所有三个属性。本文迪纳摩:亚马逊的高度可用的key-value存储学习NoSQL数据库和分布式系统时很值得一读。Amazon Dynamo 具有 A 和 P 属性。

Google 对BigTable采取了不同的方法,它具有 C 和 A 属性。

其他 NoSQL 数据库

正如我在开头写的那样,还有许多其他类型的 NoSQL 数据库,它们是为不同的需求而设计的。例如像Neo4j这样的图形数据库、像CouchDB这样的文档数据库和像OrientDB这样的多模型/对象数据库。

最后,我想说关系数据库将继续流行。它们非常灵活且可维护。但它们并不总是最好的选择。

  • “不仅”是一种改造,早期的 NoSQL 运动狂热地反对关系数据库。然后他们击中了现实世界。 (6认同)
  • 很好,详尽的答案。 (2认同)

Jer*_*hka 22

NoSQL 是一个非常广泛的术语,通常被称为“不仅是 SQL”。该术语在非 RDBMS 社区中逐渐失宠。

您会发现 NoSQL 数据库几乎没有共同特征。大致可以分为以下几类:

  • 键/值存储
  • Bigtable 启发的数据库(基于 Google Bigtable 论文)
  • Dynamo 启发的数据库
  • 分布式数据库
  • 文件数据库

这是一个很大的问题,但在本分布式数据库调查中得到了很好的回答。

简短回答:

NoSQL 数据库可能会放弃 ACID 的各个部分,以实现某些其他好处——分区容错性、性能、分配负载或通过添加新硬件线性扩展。

至于何时使用它们——这完全取决于您的应用程序的需求。


mrd*_*nny 13

NoSQL 是一种数据库,它不像传统的 RDBMS 那样具有固定模式。对于 NoSQL 数据库,架构由开发人员在运行时定义。他们不会针对数据库编写普通的 SQL 语句,而是使用 API 来获取他们需要的数据。NoSQL 数据库通常可以轻松地跨不同物理服务器扩展,而无需知道您要查找的数据位于哪台服务器上。

然而,所有这些灵活性都有一些折衷:与 SQL Server、Oracle、DB2、MySQL 等 RDBMS 系统相比,NoSQL 数据库缺乏相当多的功能。没有 Service Broker、事务日志、ETL 包等。

NoSQL 并不是什么新鲜事物。它实际上已经存在了 50-60 年。当时它被称为 COBOL。完全相同的想法,只是不同的小组提出了它。

  • 对于许多(所有?)NoSQL 数据库,第 1 点是不正确的,除非您明确告诉数据库您不在乎写入是否成功。例如,任何 Hadoop 支持的数据库都会将数据写入三个位置,无论是地狱还是高水位。默认情况下,Cassandra 将写入三个位置,并在两个位置成功时确认写入成功。 (3认同)
  • 在进行这些更新时它如何处理并发?它们之间是否存在分布式类型的事务,还是事先确认写入并且服务器在后台处理其余部分? (3认同)

Joh*_*son 6

基本上免除关系设置、主键和外键以及保持事务安全所涉及的额外开销,通常可以极大地提高性能。然而,这并不是新数据库/数据存储所独有的,因为例如 MySQL 已经通过绕过层调整为在“NoSQL 级别”执行。

简而言之,如果您愿意冒可能丢失数据的风险,通常可以获得令人印象深刻的性能。大多数 NoSQL 系统都这样做。例如,MongoDB 会在方便时暂存要写入的数据更改。数据本身是安全且交易安全的,但保存在易失性存储(内存)中。如果您断电,您就不能 100% 确定您没有丢失数据,或者您没有损坏的数据。

这是安全性和性能之间的权衡。


小智 5

一个很好的起点是Wikipedia 条目。本质上,不是将一个表中的数据与另一个表中的数据相关联,而是将事物存储为键值对,并且没有数据库模式,而是在代码中处理。

一些站点同时使用 NoSQL 和典型的 RDBMS 服务器,但用于存储不同的数据。因此,您不必选择其中之一。