AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 5
Accepted
Spredzy
Spredzy
Asked: 2011-01-04 12:52:52 +0800 CST2011-01-04 12:52:52 +0800 CST 2011-01-04 12:52:52 +0800 CST

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

  • 772

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

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

使用 NoSQL 的最佳地点在哪里?为什么?

rdbms nosql
  • 6 6 个回答
  • 42999 Views

6 个回答

  • Voted
  1. Best Answer
    Jonas
    2011-01-04T17:29:47+08:002011-01-04T17:29:47+08:00

    NoSQL 代表“Not only SQL”,通常表示该数据库不是过去几十年非常流行的关系数据库。

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

    CAP定理

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

    • 一致性_
    • 可用性_
    • 网络分区容忍度

    Amazon Dynamo 使用最终一致性来接近获得所有三个属性。在学习 NoSQL 数据库和分布式系统时,这篇论文Dynamo:Amazon 的高可用键值存储值得一读。Amazon Dynamo 具有 A 和 P 属性。

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

    其他 NoSQL 数据库

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

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

    • 61
  2. Jeremiah Peschka
    2011-01-04T13:21:59+08:002011-01-04T13:21:59+08:00

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

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

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

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

    简短的回答:

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

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

    • 22
  3. mrdenny
    2011-01-04T13:00:15+08:002011-01-04T13:00:15+08:00

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

    然而,所有这些灵活性都有一些折衷:与 SQL Server、Oracle、DB2、MySQL 等 RDBMS 系统相比,NoSQL 数据库非常缺乏功能。没有服务代理、事务日志记录、ETL 包等。

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

    • 13
  4. Johanna Larsson
    2011-01-04T13:00:29+08:002011-01-04T13:00:29+08:00

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

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

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

    • 6
  5. steve.lippert
    2011-01-04T13:02:44+08:002011-01-04T13:02:44+08:00

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

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

    • 5
  6. Virat Gaywala - CSM
    2014-05-07T23:21:17+08:002014-05-07T23:21:17+08:00

    我在 MongoDB NoSQL 数据库和 Oracle 上投入了大量精力。

    架构

    SQL 数据库有自己的预定义架构来存储结构化数据。

    在 NoSQL 数据库中,没有预定义的模式,这里模式是基于数据元素的最动态的元素。

    可扩展性

    SQL 数据库是垂直可扩展的,这意味着如果我们想要扩展 SQL 基础数据库,我们需要为安装 DBMS 系统的硬件提供支持。这就是有时会限制可扩展性的地方。

    NoSQL 数据库是水平可扩展的,这意味着如果我们想要扩展它,我们需要添加更多的节点并根据我们自己的需要和所需的功率创建分布网络。这就是他们减少数据库负载的方式

    数据检索

    在基于 SQL 的数据库中,要定义和操作数据,我们可以使用如今非常强大的 SQL(结构化查询语言)。

    在 NoSQL 数据库方面,查询侧重于集合和文档。有时它被称为 UnQL(非结构化查询语言)。这仍处于演进阶段,因此它因 NoSQL 数据库的供应商而异。

    有关关键差异的更多信息,请参阅我的博客:SQL 和 NoSQL 数据库之间的差异

    • 0

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve