acm-header
登录

ACM通信

BLOG@CACM

NoSQL vs . SQL


银行操作技术的最新创新和用于办公场所内外的一般私有/公共混合云数据可以通过SQL或NoSQL数据库提供服务——通过相关中介/组合进行缓冲,如IBM Power Systems、PostgreSQL和各种gui。传统上,数据存储的非关系(NoSQL)模型被合理地视为一些作为计算工程和高速增长的开源环境的最佳合作伙伴。

基础数据模型

让我们称数据库为存储在计算机或集群上的组织良好的数据集合,它允许您存储和检索数据。在这个上下文中讨论数据模型时,我们正在查看数据库的基本数据存储体系结构。如前所述,这可以通过不常被称为“中间件”的中介进行或小或大的修改——这些选项正越来越多地融合在一起。

在使用SQL或NoSQL之前,数据科学家、开发人员和管理员可能首先想考虑他们需要什么功能,这些功能与演示他们所追求的操作的现有体系结构和系统有关。但是,我们仍然有必要对数据模型的概念进行深入的讨论,以便从广义上讨论在数据库中存储数据的两种方法。

需要明确的是,想要在这两种技术之间做出正确决策的开发人员将面临艰难的挑战。他们需要对整个设计空间有一个成熟的理解,这样才能清楚地了解特定系统的好处和折衷方案——并且不会丧失应用程序绝对需要的功能。

关系/非关系

关系模型和SQL在某种程度上是同义的(PostgreSQL是关系和非关系的一个例子);作为实体集合存储的数据,这些实体本身包含属性组。在精确映射的严格架构中,属性可以单独追踪到表列;实体/属性关系是表对表的精确网络—因此,常规的事务查询,如金融事务,在这种体系结构中非常可预测/有效地发生;这是通过表进行逻辑组织的数据存储的缩影。

你正在创造一个社交平台或新的应用创新。你想要最小化建造时间,竞争是非常激烈的;你的应用需要在几周或几个月内上市,而不是几年。非结构化的数据交互——音频、图像、视频——都将在数百万的流中发生冲突,这些流可能是由数千名用户创建的。为此,NoSQL(由于前面提到的“融合”原因,它也被称为Not Only SQL)——非结构化、灵活可扩展的数据存储的缩影——例如,社交平台经常使用的图形数据库类型。

概括地说,NoSQL对实体/属性缺乏严格的模式,而SQL严格地将两者联系起来/规范起来。

SQL的优点和缺点

在讨论SQL时,我们将引用使用关系体系结构模式的数据,但请记住,有些SQL数据库可以同时使用两种类型。把这当作一个介绍性的规则-跑道开始更彻底的调查更充分的空间。

优点

非常可靠和可预测的数据完整性,可以通过ACID(原子性、一致性、隔离性、持久性)非常精确地建模。

粗略地说,对于更大范围的工作负载,更高的查询灵活性;基本的限制是由SQL抽象出来的,它与引擎一起简化查询,以便它们匹配磁盘上的模型。

由于同质化模式具有更高效的性能和资源使用,数据更紧凑(当然,这取决于查询类型);为系统化、精简数据提供了额外的途径。

缺点

横向可伸缩性并不简单;事实上,这也是NoSQL在20世纪90年代早期被开发的部分原因。可能完全没有对该功能的支持、专门的解决方案或支持,但仍处于起步阶段。

在非分布式引擎上工作,代表潜在的单点故障,必须通过使用故障转移和复制方法来解决;因此,可伸缩性是昂贵的,而不是一个自然的预期功能。

模式不能也不应该被临时修改,而是应该事先仔细设计和深思熟虑;随着数据库的发展而改变这种设计仍然会涉及性能影响,可能是停机时间。

不仅仅是SQL的优点和缺点

为了减轻SQL在关系系统中的弱点,NoSQL被创建来解决两个问题:1)缺乏水平伸缩;2)高线条、刚性台面结构的先决条件。在引用SQL时,我们将重点关注非关系的“无模式”数据模型方面,但请记住有一个NoSQL数据库的多样化生态系统每个人都有自己的怪癖。

优点

在非关系系统中具有高度灵活性的数据模型;开发人员不需要在当时提交一个结构;的非模式化术语是不准确的,因为存在模式,但这些模式可以临时更改。

高可用性和可伸缩性,无需大量单点故障;NoSQL数据库通常是为自然的高集成在线水平扩展而设计的。

当对NoSQL数据库的功能设置了一定的限制时,NoSQL数据库是非常高性能的。通过最小化耐久性保证。

有一个很好的论据,NoSQL系统自然地倾向于最先进的计算机抽象创新的计算机工程将发生在未来;这些系统可以为高级数据结构提供非常高级的api。

缺点

不清晰的ACID约束解释;虽然你可以为ACID获得一些支持,但它还不成熟,因为它的解释是如此不受限制,以至于几乎无法辨别出有用的见解。

访问模式是不灵活的,因为NoSQL缺乏底层实现的抽象——这是它的引擎精简查询所需要的;引擎可以优化较少,它的磁盘数据表示不适合查询(相反,存在泄漏)。

分布式系统有一些特定的问题,需要一些SME的故障排除知识,这些知识在分布式应用程序设计中非常特殊——这些问题并不一定仅限于NoSQL。

高级api的代价是不容忽视的弱点

何时使用:SQL vs. NoSQL

SQL是关系数据的天然伙伴。除了在某些情况下,比如银行的金融交易,现在很难识别。寻找高度划分的实体,它们之间有明确的关系,其中严格的规则应该适用于它们的交互。如果是这种情况,那么您很幸运:在更广泛的数据集上进行高完整性、高专一性查询,不太需要可伸缩性。也就是说,像PostgreSQL这样的东西允许类似nosql的工作负载,非常适合混合匹配结构化/非结构化数据,而不需要复杂的数据模型集成。

NoSQL自然适合于高度灵活的数据,或者适合于关系模型之外的特定解决方案。像MongoDB这样的工具对于大量无模式数据来说非常出色。Redis允许高级数据结构;通过快速的键值数据查询,获得强大的数据完整性保证。Elasticsearch——正如它听起来那样——非常适合在大量数据之间进行高级的灵活搜索。如果您需要没有单点故障、特殊的可用性和自然的高可伸缩性的东西,请寻找这种类型。

结论

SQL vs. NoSQL是一个很有用的概念标准,从它开始,从充分了解的角度开始更深入地选择数据库。然而,做到这一点并非易事;为了满足您的可用性/性能/增长目标,您将不得不考虑应用程序需要什么、您愿意牺牲什么(利弊)以及最佳平衡在哪里。

这是一个充满探索和发现机会的设计空间。

亚历克斯·威廉姆斯是一个拥有超过15年经验的全栈开发人员,是英国托管数据的所有者。


没有发现记录

登录为完全访问
»忘记密码? »创建ACM Web帐号
Baidu
map