《图数据库》——2.2 NoSQL数据库也缺少联系

2.2 NoSQL数据库也缺少联系

图数据库
大多数NoSQL数据库—无论是键值数据库、文档数据库,还是基于列的数据库—存储的都是无关联的文档/值/列,因此很难将它们用于关联数据和图。

对这些数据库来说,一种广为认知的添加联系的策略是在某个聚合数据(aggregate)中嵌入另一个聚合数据标识符,即添加外键。然而这需要在应用层连接聚合数据,其代价极速增加。

当我们着眼于聚合存储模型(aggregate store model)时,如图2-3所示,我们联想到了联系。看到开头为user: Alice的记录中有对订单的引用order: 1234时,我们推断user: Aliceorder: 1234之间存在关联。而这给了我们错误的希望:我们可以使用键值对来管理图。

在图2-3中,我们看到一些属性值确实引用了数据库中其他的聚合数据。然而将这些引用转化为可导航的结构并非是没有代价的,因为聚合数据之间的联系并非数据模型中的一等公民—多数聚合存储只是以内嵌映射结构的方式装饰在聚合数据之内。相反,应用程序使用数据库时必须从这种扁平的、无关联的数据结构中建立起联系。我们还必须确保应用程序能够随着剩余数据的变化更新或删除外部聚合引用,假如不这样做,存储将积累无用的引用,从而破坏数据的质量和查询性能。

Riak中的指针(Links)和查找(Walking)

Riak键值存储引擎允许使用指针(Link)元数据去扩展每个存储的值。指针都是单向的,从一个存储的值指向另一个。Riak允许查找(Walk)(Riak术语)任何数量的指针,从而一定程度上将数据模型关联起来。然而,Riak的指针查找是通过map-reduce驱动的,这一定程度上会有延迟。与图数据库不同,这种指针的连接仅适用于简单的图结构编程,对于通用的图算法就不适用了。
这种方案还有另一个弱点。由于没有反向指针(当然,外部聚合引用的指针不是自反的),数据库丧失了运行其他有趣的查询的能力。比如在图2-3中,想要知道是谁买了某种商品(也许问这个问题的目的是想要基于客户资料进行推荐)就是一个代价高昂的操作。想要回答这类问题,我们可能得通过导出数据集并在外部计算框架(如Hadoop)上运行它们来暴力地获得结果。或者只能回过头将外部聚合引用反向插入,随后才能查询结果。无论哪种方法,结果都不是直接的,都是潜在的。

人们很容易认为聚合存储和图数据在关联数据这方面的功能是等同的。但其实不是这样的。聚合存储并不维护关联数据的一致性,也不提供免索引邻接(index-free adjacency),即元素直接与其邻居相连。因此未解决数据关联问题,聚合存储必须使用天生的潜在的方法在数据模型之外创建和查询联系。

让我们看看它们的局限性是如何表现的。图2-4展示了一个使用聚合存储来实现文档存储的小型社交网络。

通过这种结构,可以很容易地找到用户的直接朋友—假设应用程序一直在努力确保存储在friends属性中的标识符与数据库中的其他记录的ID保持一致。在这种情况下,我们可以简单地通过它们的ID检索直接朋友,这需要对每个朋友进行大量索引查找,但不需要对整个数据集暴力扫描。这样做我们会发现,Bob认为AliceZach是他的朋友。

但朋友关系不总是自反的。如果我们想问问“谁的朋友是Bob?”而不是“谁是Bob的朋友?”,问题就比较难以回答了。在这种情况下,我们唯一的选择是暴力扫描整个数据集,从而在所有friends条目中寻找到包含Bob的条目。

O符号和暴力计算

我们用O符号作为描述一个算法的性能随数据集的大小而变化的简写方式。O(1)算法表示性能的时间复杂度为常数时间,也就是说,该算法与数据集大小无关,无论数据集大小如何,执行算法所花时间都是相同的。O(n)算法表示性能的时间复杂度为线性时间,当数据集增加一倍,执行算法所花时间也会增加一倍。O(log n)算法表示性能的时间复杂度为对数时间,当数据集增加一倍,执行算法所花时间增加一个固定的量。在起步阶段,随着数据集的增大,其所花时间的增加相对很多,但数据集变得非常大的时候,时间的增加会渐渐消失趋于稳定。O(m log n)算法表示的时间复杂度是本书所考虑的最差情况。在O(m log n)的算法中,当数据集增加一倍时,执行时间会在加倍的同时有额外的增加,其增加量与数据集中元素数目成正比。

暴力计算整个数据集的时间复杂度是O(n),因为在数据存储中所有的即n个聚合数据都需要加以考虑。这对于大多数合理规模的数据集来说代价过高,在这里我们要选择一个时间复杂度为O(log n)的算法(这很大程度上是高效的,因为它在每次迭代时能够丢弃掉一半的潜在工作量)或者复杂度更低的算法。

相反,图数据库对于同一个查询提供恒定的查找顺序。在这种情况下,我们只需在图中找到表示Bob的节点,然后寻找任何friend的入度联系,这些联系连接的节点表示那些认为Bob是他们的朋友的人。这比暴力扫描的代价小得多,因为它只和网络中很少的节点相关,即,那些和Bob关联的节点。当然,如果所有人都认为Bob是他们的朋友,我们还是会遍历到整个数据集。
为了避免处理整个数据集,我们可以增加反向指针,但这会反规范化存储模型。通过为每个用户添加另一个属性,也许可以称为friended_by,我们可以列出与该用户相关联的入度朋友关系。但这不是没有代价的。对于起点数据,我们要因写入延迟增加初始成本和后续成本,还要为存储额外的元数据增加磁盘使用开销。最重要的是,因为每一跳(hop)都需要通过一次索引查找,所以遍历指针的代价仍然很高。这是因为聚合数据没有局部性这个概念,它不像图数据库那样通过真实的(而不是具体化的)联系自然地提供免索引邻接。如此,通过实现图结构之上的非原生存储,我们获得了局部连通性的好处,但却引入了巨大的开销。

当遍历涉及比一跳更深的时候,这种巨大的开销被放大了。朋友关系是足够简单的,然而想象一下,当试图实时地计算朋友的朋友,或是朋友的朋友的朋友时,这类数据库就不合时宜了,因为遍历一个虚假的联系的代价并不小。这不仅限制了你扩大社交网络的机会,也减少了有益的推荐,错过数据中心的故障设备,并让欺诈采购活动成为漏网之鱼。许多系统试图去维护类图的计算处理,但仍很难避免要分批处理,并不能按照用户需求提供实时的交互。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2024-11-03 21:56:20

《图数据库》——2.2 NoSQL数据库也缺少联系的相关文章

NoSQL数据库概览及其与SQL语法的比较

[文章摘要] HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,同时也是知名的NoSQL数据库之一.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题. 本文对NoSQL数据库的定义.分类.特征.当前比较流行的NoSQL数据库系统等进行了简单的介绍,并对NoSQL和SQL语法进行了简单的比较,为大家对NoSQL数据库的学习提供了有益的参考.   一.NoSQL的出现 关系型数据库系统多年来在解决数据存储.服务和处理问题方面取得了巨大的成

超越传统:NoSQL数据库大比拼 助你轻松选择数据库

在两三年前,选择数据库是一件非常容易的事.资金充足的企业会选择甲骨文数据库,使用微软产品的企业通常SQL Server,而预算不足企业则会选择MySQL.不过,如今的情况已经大不相同了. 最近两三年,许多企业都推出了他们自己的开源项目以用于存储信息.在许多案例中,这些项目抛弃了传统的关系型数据库准则.许多人将这些项目称为NoSQL,即"Not Only SQL"的缩写.虽然有些NoSQL数据库很简单,但是还有一部分NoSQL数据库极为复杂.不过,它们的目标都是通过替代关系型数据库,并实

深入解析NoSQL数据库的分布式算法(图文详解)_数据库其它

尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依然引发了铺天盖地的关于各种协议和算法的研究以及实践.在这篇文章里,我将针对NoSQL数据库的分布式特点进行一些系统化的描述. 系统的可扩展性是推动NoSQL运动发展的的主要理由,包含了分布式系统协调,故障转移,资源管理和许多其他特性.这么讲使得NoSQL听起来像是一个大筐,什么都能塞进去.尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依然引发了铺天盖地的关于各种协议和算法的研究以及实践.正是通过这些尝试逐渐总

使用NoSQL 数据库提供云级别数据可伸缩性

就创建.交流.访问内容.共享信息和购买产品而论,快速扩展的新一代基于 Internet 的服务(比如电子邮件.博客.社交媒体.搜索和电子商务)实际上重新定义了 Web 用户的行为和趋势.由于这些系统的数量的不断增多,IT 专业人士正见证着所生成数据和所消耗数据的规模的扩大,不断增长的伸缩性需求和新功能需求为传统关系型数据库管理系统 (RDBMS) 带来了新的挑战. 我们先来了解一下低成本高性能 NoSQL 数据库软件.NoSQL  数据库软件的主要特性包括: 能够水平扩展数据. 支持较弱的一致性

甲骨文公司日前宣布推出Oracle NoSQL数据库2.0版

北京,2012年12月28日--甲骨文公司日前宣布推出Oracle NoSQL数据库2.0版(Oracle NoSQL Database 2.0),持续推动其在数据管理技术领域的创新.这是一款具有高可扩展性.低延迟.面向实时大数据工作负载的核心价值数据库. Oracle NoSQL数据库2.0版增加了对存储和大型对象(如文档和图像)检索的支持,以及在应对不断变化的生产数据处理要求时,用于分配存储和计算资源的动态弹性和自动重新调整性能. Oracle NoSQL数据库2.0版实现了与Oracle数

初识NoSQL NoSql数据库入门 NoSql数据库基础知识_MongoDB

做了一年的大一年度项目了,对于关系型数据库结构还是有些了解了,有的时候还是觉得这种二维表不是很顺手.在看过一篇文章之后,对NoSQL有了初步的了解,(https://keen.io/blog/53958349217/analytics-for-hackers-how-to-think-about-event-data).这篇文章写的很好,确实写出来了在实际情况下NoSQL的"用武之地",而且用了MineCraft作分析,但是也许不够全面.比如文章中只是提到了,entity数据用关系型怎

《图数据库(第2版)》——2.2 NoSQL数据库也缺少联系

2.2 NoSQL数据库也缺少联系 大多数NoSQL数据库-无论是键值数据库.文档数据库,还是基于列的数据库-存储的都是无关联的文档/值/列,因此很难将它们用于关联数据和图. 对这些数据库来说,一种广为认知的添加联系的策略是在某个聚合数据(aggregate)中嵌入另一个聚合数据标识符,即添加外键.然而这需要在应用层连接聚合数据,其代价极速增加. 当我们着眼于聚合存储模型(aggregate store model)时,如图2-3所示,想象我们可以看到联系.看到开头为user: Alice的记录

你印象中似知非知的NOSQL数据库

/**************************************************************/NoSQl产生原因:NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据

甲骨文公布其 NoSQL 数据库 Blueprints API

Oracle NoSQL,顾名思义,这是甲骨文的NoSQL数据库,基于Java版本的Berkeley DB,主要面向"需要处理海量数据.不确定数据的架构.想采集更多的流媒体数据的客户". Blueprints是一组针对属性图数据模型的接口.实现.测试套件,有些类似于JDBC,不同之处在于Blueprints是针对图形数据库的.Blueprints提供了一组通用的接口,允许开发者在他们的图形数据库后端即插即用.  以下项目采用了Blueprints作为基本技术: Pipes:一个数据流框