为什么人们仍在使用关系数据库

The*_*hMe -2 rdbms nosql

我正在学习基于文档的数据库,它们看起来很完美,所以我问为什么人们仍在使用“经典”数据库?为什么我们不能明确转向 NoSQL?

duf*_*ymo 5

答案很简单:仍然有大量数据可以通过关系模型 完美地表示。

关系数据库将应用程序和数据很好地分开。拥有像 SQL 这样的声明性语言,以及基于集合论的坚实数学基础,不应该轻易丢弃。

ACID 意味着一些重要的事情。下次在账户之间转账时提醒自己。

为什么银行和其他机构要放弃数十年的投资?使用基于文档的数据库有什么好处?仅仅让一个工作应用程序使用新技术以同样的方式运行就需要巨大的成本。一旦完成,你会追逐什么闪亮的新事物?

对于 SQL 和 NoSQL 来说,这不是非此即彼的问题。两者都只是各有其地位的替代方案。


Phi*_*ipp 5

  1. 关系数据库已经存在 40 年了。它们是一项久经考验的真实技术,并且有很多相关的专业知识。它们是每个计算机科学教育不可或缺的一部分,每个程序员都应该至少具备如何使用它们的基本知识。另一方面,面向文档的数据库是一项相当新的技术。周围很少有人能说他们曾与他们一起完成过一个成功的项目,甚至这些人也不能声称他们真正了解这项新技术可能存在的所有陷阱。
  2. 大多数面向文档的数据库对关系数据库称为 JOIN 的东西没有本机支持,因此必须在应用程序层上模拟它们,这是不舒服且性能不佳的。有时可以通过非规范化数据来避免 JOIN,但是当实体之间使用聚合而不是组合或 n:m 关系时,非规范化会变得很丑陋。
  3. 大多数面向文档的数据库不支持事务,至少不支持跨多个文档的事务。对于许多用例来说,这些并不是真正需要的,但在敏感领域(如许多涉及金钱的领域),你就是离不开的。有一些解决方法(例如两阶段提交),但这些方法很难编程(因此容易出现错误)并且速度很慢。
  4. 无模式数据库由于其灵活性而可能是一种祝福,但它很快就会变成一种诅咒。由于具有约束和触发器的明确定义的模式,关系数据库可以变得足够智能,以拒绝任何没有意义的数据。另一方面,无模式数据库会很乐意接受由有问题的客户端提供的任何垃圾数据。

我不想说面向文档的数据库的坏话。我在自己的一个项目中使用了其中一个,我并不后悔这个决定。但您始终需要为每项工作选择正确的工具。有时它是关系数据库,有时它是文档数据库,有时它是图形数据库,有时它只是很好的旧平面文件。