当我们可以通过共享横向扩展 SQL DB 时,为什么要使用 NoSQL DB?
Why to use NoSQL DB when we could scale out SQL DB by sharing?
我最近读到,NoSQL 数据库比传统的 SQL 数据库更容易横向扩展。
但是考虑到我在 SQL 数据库中有一个巨大的 table 然后我可以很容易地根据一些散列函数在多个服务器之间分配行。
例如- 如果我有 4 个服务器,我可以执行 (id%4),其中 id 是 table 的主键,以确定在哪个 table 上存储该特定行。
通过这样做,我们不仅可以扩展 SQL 数据库,还可以确保遵循 ACID 属性。
那为什么要用NoSQL?
NOSQL 数据库倾向于放宽数据库的 ACID 属性。例如,它们允许“最终”一致性,而不是“立即”一致性。
也就是说,如果您更新 table 中的一行,那么在提交事务后 一段时间内 其他查询可能会看到旧值。最终,每个人都会看到相同的价值。
因为这很宽松,NOSQL 数据库在优化方面具有更大的灵活性——尤其是不需要等待集群中的所有节点都同意某些事情。
关系数据库在过去的几十年里并没有停滞不前,因此它们经常提供接近的锁定和事务的变体。
根据我的经验,这可以在非常大的交易量环境中发挥作用。然而,出于许多目的,SQL 数据库上的事务完整性保证是值得的。
注意:NOSQL 实际上指的是 class 个“替代”数据库。 NOSQL中的“NO”代表“不仅”。实际上,我认为这些都是功能生态系统的一部分。 NOSQL 也可以指文档存储、键值对数据库、图形数据库、GIS 数据库——任何类型的复杂数据库通常都具有重要的重叠功能。
我最近读到,NoSQL 数据库比传统的 SQL 数据库更容易横向扩展。
但是考虑到我在 SQL 数据库中有一个巨大的 table 然后我可以很容易地根据一些散列函数在多个服务器之间分配行。 例如- 如果我有 4 个服务器,我可以执行 (id%4),其中 id 是 table 的主键,以确定在哪个 table 上存储该特定行。
通过这样做,我们不仅可以扩展 SQL 数据库,还可以确保遵循 ACID 属性。
那为什么要用NoSQL?
NOSQL 数据库倾向于放宽数据库的 ACID 属性。例如,它们允许“最终”一致性,而不是“立即”一致性。
也就是说,如果您更新 table 中的一行,那么在提交事务后 一段时间内 其他查询可能会看到旧值。最终,每个人都会看到相同的价值。
因为这很宽松,NOSQL 数据库在优化方面具有更大的灵活性——尤其是不需要等待集群中的所有节点都同意某些事情。
关系数据库在过去的几十年里并没有停滞不前,因此它们经常提供接近的锁定和事务的变体。
根据我的经验,这可以在非常大的交易量环境中发挥作用。然而,出于许多目的,SQL 数据库上的事务完整性保证是值得的。
注意:NOSQL 实际上指的是 class 个“替代”数据库。 NOSQL中的“NO”代表“不仅”。实际上,我认为这些都是功能生态系统的一部分。 NOSQL 也可以指文档存储、键值对数据库、图形数据库、GIS 数据库——任何类型的复杂数据库通常都具有重要的重叠功能。