未加星标

何时该用SQL,何时该用NoSQL ?

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二04 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

有些人做架构决策的时候纯粹是基于谁的声音大:

@xeraa @lukaseder 不,我们最重要的架构决策是基于#tweets. 这是一个面向Twitter的体系结构。

― 加里斯 维斯特恩 (@gareth) 2016年9月21日

然而对其他大多数人而言,决策并不是这么简单。例如:什么时候我们应该启用NoSQL存储系统来代替关系型数据库管理系统(RDBMS)?

关系型数据库(RDBMS)能够适应所有情况

这个问题很明显,假设你开始就使用关系型数据库(RDBMS),这种传统的数据库系统能够解决任何问题且不容易被取代。这意味着什么?简单的举例:

关系型数据库(RDBMS)一直被使用,所以他们和”新来者“相比在市场上有巨大的优势,“新来者”缺少优秀的工具,如社区、支持也不够成熟。 埃德加弗兰克科德的工作对我们整个行业产生的最大影响可能就是,自那以后,几乎没有像关系模型那样具有革命性的东西了。对一个替代型数据库来说,它很难被普遍使用。意即它们通常被用来解决小问题。

有人会这么说,有时候你确实碰到一个小问题。例如,一个图形数据库的问题。然而事实上,图表和你在关系模型中所标识的东西没有什么根本性的不同。它很容易用多到多的关系表来模拟一个图。

这些同样使用于数据库中的XML/JSON(别忘记,JSON就是XML,但比XML少一些语法和属性,所以它更棒)。有时候,您需要在数据库中的层次结构中存储文档的结构(层次结构数据)而不是规范他们。当然你也可以先规范文档,但可能会做很大的无用功。

大多数现代关系型数据库提供XML/JSON数据结构来存储(以及更重要的查询)数据,包括PostgreSQL、Oracle、DB2、SQL Server等。

那么,我们什么时候决定切换?

作为开发人员,我们倾向于能够快速的切换。例如,当我们处理图形时,我们喜欢用 Neo4j , 因为它具有不起的 数字查询语言 。当我们使用JSON时,我们喜欢用 Couchbase , 因为它实现了有趣的 N1QL查询语言 。这两种语言都深受SQL查询语言影响,在我看来我们的供应商会给我们提供明智的选择(不会像MongoDB基于JSON查询语言),终究原因,SQL语言乃是由最强大和最流行的 4GL 曾经创造的。

但是作为开发人员,我们不应该轻率的做出决定。首先,虽然这些专业的数据库看起来像是更好的选择,但是运营团队需要增加额外的维护成本、监控、补丁以及生产系统的额外调整。这在关系型数据库中真实的存在,最近的一个突出的例子是Uber从PostgreSQL 切换回mysql:

https://eng.uber.com/mysql-migration


何时该用SQL,何时该用NoSQL ?

然而唯一令人遗憾的是他们切换方式和以前相反,这点请注意。事实上你的团队总是喜欢使用相同的数据库有很多的原因,即使是这些数据库团队开发许可很贵,在很多案例里更贵:

从事额外的许可和/或合同需要新数据库供应商提供技术支持. 为了新技术寻找技能熟练的数据库管理员(DBA)(能够胜任新数据库). 维护两个数据仓库,并能维持数据同步的成本。 最终,有一个临界值:

@gareth @xeraa 一般情况下,都有一个临界值,没到临界点,可以坚持使用关系型数据库(RDBMS),在某种程度上就要开始考虑同时使用两种数据库或者完全迁移到另一个上。

― 卢卡斯埃德尔 (@lukaseder) 2016年9月21日

在数据库中使用JSON,这很简单:

偶尔使用JSON存储:坚持使用关系型数据库(RDBMS)。 一切以JSON为主:可以考虑不用关系型数据库(RDBMS)。

这个同样适用于图形问题。SQL完全能够处理图形和递归遍历。递归的计算子集之和,这是一个时髦的声明:


何时该用SQL,何时该用NoSQL ?

如果你只有一点树形/图形遍历需要计算(例如,一个简单的菜单结构),就无需涉及关系型数据库。如果图形存储是您的主要业务,那么关系型数据库可能不是一个好的选择。

结论

无论你要解决什么问题,请记住:如果你有一把锤子,而每一个问题开始的时候都可以当作钉子。但不要把关系型数据库当作是把愚蠢的锤子。不要小看它,在2016年它在处理非关系型小众的事情上做的非常的好。

关系型数据库仍然是处理各种数据问题的最好的选择。只有当你存储超过一定阀值(或者你可以预见到要这么做),那是你应该去寻找替代品来替代它。因为当你去寻找一个新的(JSON,图形等)来改变的时候,要浪费你很多的时间回到你“正常”的关系业务里去。

本文数据库(综合)相关术语:系统安全软件

分页:12
转载请注明
本文标题:何时该用SQL,何时该用NoSQL ?
本站链接:http://www.codesec.net/view/481199.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(39)