Table of Contents
为什么我们需要NoSQL数据库
NoSQL数据库是生活中的那些东西,都无助地定义一个只有它们是什么不是,而不是由他们什么是,即防定义。
NoSQL是不只是SQL的厚脸皮缩写,或者更是对抗性的,是SQL的否定。这种反定义向您介绍了NoSQL运动开始的原因:基于SQL的关系数据库并不总是足够的。
关系数据库(RDBMS)仍然有其完美的用例,RDBMS经常可以与NoSQL数据库一起很好地利用两种技术的优势。(这就是Neo4j正式选择不仅仅将SQL作为NoSQL的定义的原因,因为SQL仍然在任何后端中都有它的位置。)但是,仍然很清楚,关系数据模型不能满足所有数据需求。
因此,一旦其他数据存储及其随附的数据模型可用,NoSQL数据库技术的普及便会(并将继续)迅速增长。今天,除了证明为什么我们现在比以往任何时候都需要它们更多的理由之外,我们还将定义NoSQL数据库。
在本“面向初学者的图数据库”博客系列中,我将带您了解图技术的基础知识,假设您在该领域几乎没有(或没有)背景。在过去的几周中,我们解决了为什么图技术是未来,为什么关联数据很重要,数据建模的基础知识(陷阱),为什么数据库查询语言很重要,命令式和声明式查询语言之间的差异,使用图的预测建模图搜索算法的理论和基础。
本周,我们将讨论NoSQL数据库的各种世界-为什么它们如此流行。
NoSQL数据库的Many&Motley世界
NoSQL数据库是各种各样的数据存储技术,它们之间的差异远非相同,因此很难对其特征进行全面的概括。
在接下来的几周中,我们将探索几种类型的NoSQL数据库和其他重要的NoSQL定义。我们的游览将涵盖被称为集合存储(以下以蓝色突出显示)的组,包括键值存储,列族存储和文档存储以及各种类型的图形技术(绿色),其中包括属性图,超图和RDF三重商店。
从历史上看,大多数企业级Web应用程序都运行在关系数据库(RDBMS)之上。但是仅在过去的十年中,数据格局就发生了巨大变化,并且传统RDBMS部署根本无法管理。
NoSQL数据库的兴起尤其是针对以下三个数据挑战:
- 数据量
- 数据速度
- 数据种类
- 数据价
我们将在下面进一步详细探讨这些挑战。
数据量
毫不奇怪,随着数据存储量的急剧增加,数据量(即存储数据的大小)已成为企业采用NoSQL数据库的主要驱动力。
当大型数据集存储在关系数据库中时,它们变得太笨拙。特别是,查询执行时间随着表的大小和JOIN数量的增加而增加(所谓的JOIN pain)。
但是,这并不总是关系数据库本身的错。相反,它与基础数据模型有关。
为了避免JOIN的痛苦,NoSQL世界提供了几种替代关系模型的方法。尽管这些NoSQL数据模型可以更好地处理当今更大的数据集,但其中大多数都不如关系模型那么具有表现力。唯一的例外是图模型,它实际上更具表达力。(在接下来的几周中将对此进行更多介绍。)
数据速度
但是数量并不是现代企业系统必须解决的唯一问题。除了庞大之外,当今的数据通常会快速变化。
因此,数据速度(即数据随时间变化的速率)是NoSQL数据库设计要克服的下一个主要挑战。
速度很少是静态指标。许多速度测量取决于应用程序内部和外部变化的背景,其中一些会对整个系统产生重大影响。
再加上数据量大,数据速度的变化要求数据库不仅要处理高水平的编辑(技术术语:写入负载),还要处理数据库活动高峰。关系数据库根本不准备处理持续的写入负载水平,如果调优不当,可能会在高峰活动期间崩溃。
但是数据速度的另一个方面是NoSQL技术可以帮助我们克服:数据结构的变化速度。换句话说,这不仅与特定数据点的快速变化有关,而且还与数据模型本身的快速变化有关。
数据结构通常由于两个主要原因而移动。首先是业务的快速发展。随着企业的变化,其数据需求也随之变化。
其次,数据采集通常是实验性的。有时,您的应用程序会捕获某些数据点,以防万一您以后需要它们。通常,证明对您的业务有价值的数据仍然存在,但是如果不值得,则这些数据点通常会被抛在一边。因此,这些实验性的添加和消除会定期影响您的数据模型。
两种形式的数据速度对于关系数据库来说都是有问题的。通常,高写入负载会带来昂贵的处理成本,而定期更改数据结构会带来高昂的运营成本(请询问您的DBA)。
NoSQL数据库通过针对高写入负载进行优化以及拥有更灵活的数据模型来应对数据速度挑战。
数据种类
当今数据领域的第三个挑战是数据的多样性–即它可能是密集的或稀疏的,连接或断开的,规则的或不规则的结构。
今天的数据比关系数据库最初设计的目的要多样化得多。实际上,这就是为什么当今许多RDBMS部署的表中都有许多空值,而其代码中却有空检查的原因–这都是适应当今数据种类的一种解决方法。
另一方面,NoSQL数据库是自下而上设计的,可以适应各种数据,并灵活地满足未来的数据需求,每个数据库都采用自己的策略来处理各种数据。
数据价
每当您谈论数据时,总会出现很多“ V”(我在上面选择了三个,但有大约一百万个可供选择)。但是几乎总是缺少一个强大的“ V”:数据价。
拉丁语的价根与价值valere相同,意思是坚强,强大,有影响力或健康。
在化学中,化合价是元素的结合力。在心理学上,它是物体的内在吸引力。在语言学中,这是一个单词结合的元素数量。在大数据的上下文中,价是单个数据连接的趋势以及数据集的整体连接性。
数据集的化合价以连接数与可能的连接总数之比来衡量。数据集中的连接越多,其价数就越高。
数据价随时间增加,但不一致。网络科学家(即超级书呆子)已经描述了优先依附关系(例如,富人变得更富裕)导致了幂律分布和具有轮辐结构的无标度网络。从字面上看,前一句话中的任何内容都不能使用关系数据库进行分析。
随着时间的流逝,高度密集和块状的数据网络趋向于发展,实际上会增加大数据及其复杂性。这是很重要的,因为很难使用传统分析(例如基于RDBMS数据存储的分析)来分解和探索密集而又连接不均的数据。因此,在关系数据库还不够的情况下需要NoSQL技术。
(如果您有兴趣特别了解更多有关数据价的信息,请查看Amy Hodler和Mark Needham撰写的这本电子书,其中部分内容已在本博文中使用。)
结论
关系数据库不再能够应对当今数据量,速度,多样性或价数带来的挑战。但是,了解NoSQL数据库如何克服这些挑战只是为您的企业用例找到合适的数据库的序幕。
在接下来的几周中,我们将探讨各种NoSQL技术的优缺点,以便您做出最明智的决策。
现在,您已经大致了解了NoSQL,是时候特别仔细地研究图形技术了:获得O'Reilly Graph Databases书籍的副本,并开始使用图形技术解决实际问题。
ACID与BASE的解释说明
对于NoSQL数据库,数据一致性模型有时可能与关系数据库所使用的模型大为不同(并且与其他NoSQL存储完全不同)。
缩写ACID和BASE已知两种最常见的一致性模型。尽管他们经常在争取最终胜利的战斗中相互竞争(请给别人录制视频),但这两种一致性模型都具有优点和缺点,而且都不总是完美的契合。
让我们仔细研究两个数据库一致性模型的权衡。
在本“面向初学者的图数据库”博客系列中,我将带您了解图技术的基础知识,假设您在该领域几乎没有(或没有)背景。在过去的几周中,我们解决了为什么图技术是未来,为什么关联数据很重要,数据建模的基础知识(陷阱),为什么数据库查询语言很重要,命令式和声明式查询语言之间的差异,使用图的预测建模理论,图搜索算法的基础以及为什么我们需要NoSQL数据库。
本周,我们将仔细研究ACID和BASE数据库一致性模型之间的主要区别以及它们之间的权衡对您的数据交易意味着什么。
ACID一致性模型
许多开发人员通过使用关系数据库来熟悉ACID事务。因此,一段时间以来,ACID一致性模型一直是规范。
ACID的主要保证是,它提供了一个安全的环境,可在其中操作数据。ACID的缩写代表:
- Atomic:All operations in a transaction succeed or every operation is rolled back.
- Consistent:On the completion of a transaction, the database is structurally sound.
- Isolated:Transactions do not contend with one another. Contentious access to data is moderated by the database so that transactions appear to run sequentially.
- Durable:The results of applying a transaction are permanent, even in the presence of failures.
- Atomic:事务中的所有操作都会成功,或者每个操作都会回滚。
- 一致的:事务完成后,数据库在结构上是健全的。
- 孤立:交易不相互竞争。数据库对有争议的数据访问进行仲裁,以便事务似乎按顺序运行。
- 持久性:即使存在故障,应用事务的结果也是永久的。
赶上Graph Databases for Beginners系列的其余部分:
- 为什么图技术是未来
- 为什么连接数据很重要
- 数据建模基础
- 要避免的数据建模陷阱
- 为什么数据库查询语言很重要(超出您的想象)
- 命令式与声明式查询语言:有什么区别?
- 图论与预测建模
- 图搜索算法基础
- 酸与碱的解释
- 综合商店之旅
- 其他图形数据技术
- 本机与非本机图技术