NoSql vs 关系数据库

最近 < em > NoSQL 获得了极大的欢迎。

与传统的 < em > RDBMS 相比,< em > NoSQL 有什么优势?

114987 次浏览

并非所有的数据都是关系型的。

也就是说,NoSQL 代表“不仅仅是 SQL”,它并不是要打击或取代 SQL。

SQL 有几个非常大的优势:

  1. 很强的数学基础。
  2. 声明性语法。
  3. 一种著名的 SQL 语言(SQL)。

这些还没有消失。

认为这是一个非此即彼的论点是错误的。NoSQL 只是一个人们需要在合适的时候考虑的替代方案,仅此而已。

文档可以存储在非关系数据库中,如 CouchDB。

也许读 这个会有帮助。

历史似乎是这样的:

  1. 谷歌的反向搜索索引需要一个存储层。他们认为传统的关系数据库管理系统无法满足需求。因此,他们在 GFS 文件系统上实现了 NoSQL 数据存储 BigTable。主要部分是数以千计的廉价商品硬件机器提供的速度和冗余。

  2. 其他人都知道谷歌刚刚做了什么。

  3. 酿酒商 CAP 定理已被证实。所有使用的 RDBMS 系统都是 CA 系统。人们也开始使用 CP 和 AP 系统。K/V 商店要简单得多,所以它们是研究的主要工具。

  4. 软件即服务(Software-as-a-service)系统通常不提供类似 SQL 的存储,因此人们对 NoSQL 类型的存储更感兴趣。

我认为很多起飞可以与这段历史有关。缩放谷歌采取了一些新的想法在谷歌和其他人效仿,因为这是唯一的解决方案,他们知道的缩放问题现在。因此,你愿意围绕谷歌的分布式数据库创意重新设计所有东西,因为这是扩大规模的唯一途径。

一致性
可用性
分区公差
K/V-键/值

相对于关系数据库模型,NOSQL 没有什么特别的优势。NOSQL 确实解决了当前 SQL DBMS 的某些局限性,但它并不意味着比以前的数据模型具有任何根本性的新功能。

NOSQL 意味着只有没有 SQL(或“不仅仅是 SQL”) ,但这并不意味着没有 关系。一个原则上的关系数据库将会是一个非常好的 NOSQL 解决方案——只是目前没有一个 NOSQL 产品使用这个关系模型。

如果您需要以高性能处理大量数据

或者

如果数据模型未预先确定

那么

NoSQL 数据库是一个更好的选择。

由于以下原因/NoSQL 的特性,NoSQL 优于 RDBMS

  1. 它支持半结构化数据和易失性数据
  2. 它没有模式
  3. 读/写吞吐量非常高
  4. 可以很容易地实现水平可伸缩性
  5. 将支持 Terra Bytes 和 Peta Bytes 卷中的 Bigdata
  6. 为 Bigdata 顶端的分析工具提供良好的支持
  7. 可以托管在更便宜的硬件机器上
  8. 内存中缓存选项可用于提高查询的性能
  9. 为开发人员提供更快的开发生命周期

编辑:

为了回答“为什么关系数据库管理系统不能扩展”这个问题,请参考 Stavros Harizopoulos,Daniel j。 Abadi,Samuel Madden 和他的迈克尔·斯通布雷克撰写的 关系数据库管理系统 pdf

RDBMS 在处理巨大的 Terabytes & Peta 字节数据量方面存在挑战。即使你有独立/廉价磁盘冗余阵列(RAID)和数据分解,它也不能很好地扩展海量数据。你需要非常昂贵的硬件。

日志记录 : 组装日志记录并跟踪数据库结构中的所有更改会降低性能。如果不需要可恢复性,或者可恢复性是通过其他方式(例如,网络上的其他站点)提供的,则可能不需要记录。

锁定 : 传统的两阶段锁会带来相当大的开销,因为所有对数据库结构的访问都由一个单独的实体 Lock Manager 控制。

闩锁 : 在多线程数据库中,许多数据结构在被访问之前必须被闩锁。删除这个特性并使用单线程方法会对性能产生明显的影响。

缓冲区管理 : 主内存数据库系统不需要通过缓冲池访问页面,从而消除了每个记录访问的间接级别。

这并不意味着我们必须使用 NoSQL 而不是 SQL

尽管如此,由于以下原因/RDBMS 的属性,RDBMS 比 NoSQL 好

  1. 具有 属性的事务-原子性、一致性、隔离性和耐久性
  2. 遵守正在写/读的数据的强模式
  3. 实时查询管理 (如果数据大小 < 10 Tera 字节)
  4. 执行涉及 子句连接和分组的复杂查询

我们必须使用 RDBMS (SQL)和 NoSQL (不仅仅是 SQL) ,这取决于业务案例和需求

RDBMS 更关注关系,而 NoSQL更关注存储。

当你的 关系数据库到达瓶颈时,你可以考虑使用 NoSQLNoSQL使得 关系数据库更加灵活。

NoSQL 相对于 RDBMS 的最大优势是 可伸缩性
NoSQL 数据库可以很容易地扩展到许多节点,但是对于 RDBMS 来说这是非常困难的。
可伸缩性不仅为您提供了更多的存储空间,而且由于许多主机同时工作,所以性能要高得多。

来自 蒙哥布网:

NoSQL 数据库在以下四个主要领域不同于旧的关系技术:

数据模型 : NoSQL 数据库允许您构建应用程序,而不必首先定义模式,这与关系数据库不同,关系数据库使您在向系统添加任何数据之前必须先定义模式。没有预定义的模式使 NoSQL 数据库更容易随着数据和需求的变化而更新。

数据结构 : 关系数据库是在一个数据结构相当完善并由关系清晰定义的时代建立起来的。NoSQL 数据库被设计用于处理非结构化数据(例如,文本、社交媒体帖子、视频、电子邮件) ,这些数据构成了当今存在的大部分数据。

扩展 : 扩展一个 noSQL 数据库比扩展一个关系数据库数据库要便宜得多,因为你可以通过扩展便宜的商品服务器来增加容量。另一方面,关系数据库需要一台服务器来承载整个数据库。为了扩大规模,您需要购买更大、更昂贵的服务器。

开发模型 : NoSQL 数据库是开放源码的,而关系数据库通常是封闭源码的,使用它们的软件需要支付许可费。使用 NoSQL,您可以开始一个项目,而不需要预先在软件费用上投入大量资金。

只是添加上面给出的所有信息

NoSql 优点:

1) NoSQL 是很好的,如果你想要生产准备快,因为它支持无模式和面向对象的架构。

2) NoSql db 最终是一致的,在简单的语言中,这意味着它们不会像 RDBMS 那样提供任何数据(文档)锁,这意味着数据的最新快照总是可用,从而增加应用程序的延迟。

3)它使用多视图并发控制(mvCC)策略来维护和创建数据(文档)的快照。

4)如果你想要索引数据,你可以创建视图,它会根据你提供的视图定义自动索引数据。

缺点:

1)它肯定不适合大型的重型事务应用程序,因为它最终是一致的,并且不支持 ACID 属性。

2)它还会创建你的数据(文档)的多个快照(修订) ,因为它使用的是 MVCC 方法进行并发控制处理,结果是空间消耗得比以前更快,从而使得压缩和重新索引更加频繁,并且随着应用中数据和事务的增长,它会减慢应用的响应速度。 要计算这一点,您可以水平地缩放节点,但是与 sql 数据库相比,它的成本更高。