【问题标题】:Why do NoSql databases scale better than relational databases? How should I choose between them?为什么 NoSql 数据库比关系数据库扩展性更好?我应该如何选择它们?
【发布时间】:2021-09-22 20:22:57
【问题描述】:

我所说的 nosql 数据库是指 mongodb 或 dynamodb 我一直在试图找出为什么 NoSql 数据库通常在水平扩展方面比关系数据库更好,以及如何在它们之间进行选择

我查看了许多告诉我们“SQL 与 NoSQL”的视频和帖子。他们中的大多数最终都在谈论“规范化与非规范化”。

以下是一些我仍然感到困惑的问题。

1。 许多人说关系数据库必须遵循 ACID,因此它们不擅长水平扩展。但是 ACID 是关于事务的,我们总是可以选择不使用任何事务,对吧?我知道没有多少人这样做,但如果我们对表进行足够的非规范化,会不会像 NoSQL dbs 那样我们几乎不使用任何事务?许多 NoSql 数据库现在也有事务。

2。 我知道非规范化可能有利于水平缩放,因为如果数据是 分布在许多节点(机器)上,很难进行表连接(或事务)。 但是像事务一样,我们可以选择不使用任何表连接。

我唯一能想到的是 NoSQL 是无模式的,添加新字段(列)比 RDB 更容易。

我想问的是
为什么“非规范化 NoSQL 数据库”比“非规范化关系数据库”更好?
为什么“规范化 NoSQL 数据库”比“规范化关系数据库”差?
阻止关系数据库非规范化的真正原因是什么?

我读过这篇文章
https://softwareengineering.stackexchange.com/questions/194340/why-are-nosql-databases-more-scalable-than-sql
它说
""SQL API 缺少一种机制来描述放宽 ACID 要求的查询。这就是为什么 BASE 数据库都是 NoSQL。""
谁能给我一个这样的例子吗?


抱歉没有具体说明

我所说的 NoSQL 数据库是指 mongodb 之类的东西

【问题讨论】:

  • 在大多数关系数据库中,事务不是可选的。如果您不自己指定它们,它们会为您创建。

标签: mysql sql database mongodb nosql


【解决方案1】:

https://neo4j.com/blog/acid-vs-base-consistency-models-explained/ 这样的博客这样解释 BASE:

基本可用性

  • 数据库似乎大部分时间都在工作。

软状态

  • 存储不必是写一致的,不同的副本也不必一直相互一致。

最终一致性

  • 存储在稍后的某个时间点表现出一致性(例如,在读取时延迟)。

这种程度的模棱两可听起来不太可靠,是吗?他们牺牲可用性和一致性来获得性能和可扩展性。

如果您运行的服务可以容忍不匹配的数据或过时的数据,或者偶尔丢失少量数据也可以。如果这些问题很少发生,但您几乎始终都能获得卓越的性能,那么它非常有吸引力。更重要的是,它的演示效果很好。

但如果您必须运行对数据完整性有严格要求的服务,那就不好了。如果即使丢失一条数据记录也会让审计员遇到麻烦,或者如果您无法可靠地读取您刚刚提交的数据,因为该提交需要时间传播到集群的所有节点,这可能会破坏交易.

因此,选择哪种数据存储取决于您的应用程序的要求。只有您可以判断 BASE 数据存储的宽松可用性和一致性是否足以满足您应用的需求。

【讨论】:

  • 如果我有这样的上下文怎么办 1. 我想读得很快,这段数据经常被其他实体引用 2. 这种类型的数据几乎从不更新
  • 使用缓存服务。我会选择 Redis。其他人喜欢 Memcached。
【解决方案2】:

NoSQL 是一个涵盖多种类型的存储/查询引擎的术语,例如文档存储、图形数据库等——基本上是任何看起来像数据库但不使用 SQL 数据库所使用的标准表/行/列结构的东西。

NoSQL 数据库的开发是为了支持关系数据库无法很好处理的用例 - 因此,虽然您可以在任何给定场景中使用 SQL 或 NoSQL 数据库,但通常不能在两者之间进行选择 -脑筋急转弯;它们很少同时是可行的选择。

澄清一下,如果没有上下文,您关于数据库类型是好是坏的问题毫无意义。如果不确切知道您的需求是什么,就不可能说 NoSQL 数据库比 SQL 数据库好还是坏 - 这是在您开始查看每个类别中的特定产品之前。

此外,您参考的那篇文章已有 8 年历史,其中大部分信息已过时 - 正如其中一位贡献者在 2019 年的更新中所承认的那样

【讨论】:

  • 抱歉没有具体说明 nosql 数据库我的意思是 mongodb 或 dynamodb 之类的东西
  • 我的上下文是“非规范化和规范化”,例如“为什么 mongodb 在非规范化方面比 MySQL 更好”
  • 如果我有这样的上下文怎么办 1. 我想读得很快,这段数据经常被其他实体引用 2. 这种类型的数据几乎从不更新
猜你喜欢
  • 2013-03-31
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
相关资源
最近更新 更多