有什么事情你可以用SQL关系数据库去做而无法用MongoDB这样的NoSQL数据库?

本文来自quora问答
作者 Scott McNulty,干过30多种工作。
2019年5月18日回答

对于许多事情,关系型数据库是数据结构的瑞士军刀。这也是为什么他一直牢牢占据(数据库领域的)王者之位的原因。

关系型数据库可以将数据分离,这样你就可以写出特别复杂的查询,并获得好的结果。你可以在不创建门卫应用的条件下允许不同的系统访问这些查询。对于NoSQL来说,允许“任何人”运行查询或者更新数据,通常是一种坏的实践。

RDBMSes(关系型数据库管理系统)有查询优化器,这是其发展成熟的部分。无论是否含有索引,一个查询优化器真的很擅长有效的获取数据。他们基于每个表使用规则,或者如果可能的话他们在每个表中收集统计。 NoSQL数据库系统几乎全部是基于索引的。

这意味所有东西,包括基于数据产生的报告,或者做更多基本读写之外的操作。

这也意味着使用NoSQL,你需要围绕你期待的查询做好计划。对于一些应用来说这是好事,但对另外一些则未必。例如,你知道如果你正在存储一个会话钥匙你是不需要数据库管理系统的。

大多数NoSQL不需要强制方案。据我所知,唯一不强制数据类型的关系型数据库管理系统是SQLite。你要么依赖数据库管理系统,要么使用应用程序来强制这些事情,这取决于你使用SQL或者是NoSQL。

如果你讲一个关系型数据库管理系统超速度的方向设计,那么你可以利用其获得很高的性能。

在关系型数据库中,备份和其他特性是成熟的。一个数据库管理员可以依赖许多有效的和可理解的工具。使用NoSQL的条件是由应用程序或者操作系统和某个程序员来负责这些功能。更多成熟的NoSQL系统拥有在前些年对于系统有巨大提升的管理系统,因而这种鸿沟正在缩小。但如果你正在使用一个NoSQL系统,你可能发现自己正在管理一些你曾授权MS-SQL服务器的部分。

最终,当你有数据需求时,需要考虑一些混合的解决方案。例如,你可以把数据的一份拷贝放到NoSQL数据库中用于操作,一份拷贝放在关系型数据库中用于报告。如果在数据验证方面有争议的话,你只需使用其中一个“记录系统”。

如果我有一个来自客户的请求,需要两年前发票的拷贝,我会使用存有每张发票的NoSQL数据库,无需查询任何其他的用户ID。同时不必担心某人没有正确的建立这个数据库,比如部分价格是按照发票创建时的方式设置的。

并且我希望让报告者告诉我们在过去三年当中从这种模式变换到那种模式可以得到更好决定的头30个部分。(使用RDBMS更加容易,免得不那么明显。)

发表评论