mysql - 为什么 NoSql 数据库的扩展性比关系数据库好?我应该如何选择它们?

标签 mysql sql database mongodb nosql

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

我看过很多视频和帖子,告诉我们“SQL vs NoSQL”。他们中的大多数人最终谈论的是“规范化与非规范化”。

这里有一些我仍然感到困惑的问题。

1. 许多人说关系型数据库必须遵循 ACID,因此它们不擅长水平扩展。但是 ACID 是关于事务的,我们总是可以选择不使用任何事务,对吧?我知道这样做的人不多,但是如果我们对表进行足够的非规范化,它会像我们几乎不使用任何事务的 NoSQL 数据库吗?许多 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 的东西

最佳答案

类似https://neo4j.com/blog/acid-vs-base-consistency-models-explained/ 的博客以这种方式解释 BASE:

Basic Availability

  • The database appears to work most of the time.

Soft-state

  • Stores don’t have to be write-consistent, nor do different replicas have to be mutually consistent all the time.

Eventual consistency

  • Stores exhibit consistency at some later point (e.g., lazily at read time).

这种模棱两可的说法听起来不太可靠,是吗?他们权衡可用性和一致性以获得性能和可扩展性。

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

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

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

关于mysql - 为什么 NoSql 数据库的扩展性比关系数据库好?我应该如何选择它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68368190/

相关文章:

mysql - 将 CSV 导入 MySQL 和

php - IGNORE INTO Mysql不忽略记录

python - Django 和只读数据库连接

c# - 是否可以从 SQL Server 获取数据表列表?

php - 使用 PHP 和 MYSQL 的 Google map

mysql - Redhat openshift - rails mysql 响应需要超过 20 秒

php - 按网页上的按钮添加到表格中的值?

sql - 在 PL/SQL 中创建临时表

SQL - PostgreSQL 错误

mysql:一次查询更新多条记录