学习进入大数据平台 – NoSQL

这篇文章是介绍大数据平台入门的子文章。

之前: 初学者入门大数据平台 – Hadoop


我们已经提到了通过分布式处理对大规模数据进行高效汇总处理的能力。通过使用NoSQL,您可以在操作中利用这种高效的分布式处理能力(有一些例外情况)。

我突然写了一些关于有例外的内容,但实际上NoSQL代表的是“Not only SQL”,而且就连所谓的NoSQL数据库也存在着各种各样的平台。

然而,这些平台共同的特点是“以分布式处理为前提,易于扩展且能存储无架构数据”。需要注意的是,有一些例外情况,比如需要定义模式的Apache Cassandra和难以扩展的图形数据库。特别是图形数据库与其他NoSQL平台有明显的特性差异,因此以下的解释是针对“除了图形数据库之外的NoSQL数据库”的。

要实现在操作用途的数据库上进行分布式处理。

为何在关系数据库中很难提升处理性能呢?简单来说,这是因为它们强调“数据一致性”。

像关系型数据库所暗示的,RDB严格定义了数据之间的关系。如果将数据分布在不同的节点上,那么相关数据将穿越多个节点。当对这类数据执行事务处理时,需要参考多个节点,并且在处理过程中需要锁定其他处理以保持一致性。因此,有效并行处理这些操作是困难的。
正如在Map/Reduce部分所提到的,对于分布式处理而言,每个操作都是相互独立的且具有高并发性是实现高性能处理的重要因素。
然而,在每个操作相互影响的状态下,将会增加开销并且无法达到足够的处理性能。

在NoSQL中,则主要通过以下两点来实现高效的分布式处理。

    • 分散させやすいデータ構造をとる

 

    強い厳密性をある程度犠牲にする

首先,关系型数据库( RDB )降低了分布式处理的性能,因为在数据之间定义了严格的关系。因此,通过采用关系较弱且各数据更加独立的形式来存储数据(具体形式稍后详述)。此外,通过放弃类似关系型数据库的完全一致性,而是保证”结果基本正确”的程度的一致性(也可以用 BASE 特性来描述),可以实现高效的分布式处理。

非关系型数据库种类

可以根据数据存储方式对NoSQL数据库进行分类。目前主要使用的NoSQL数据库有四种类型,按照数据结构的简单程度排列,

    • キーバリューストア(KVS)

 

    • カラムストア

 

    • ドキュメントストア

 

    グラフ

可以列举如下:

データ処理プラットフォーム入門_素材.003.png

关键值存储

KVS以所谓的关联数组(也称为映射、字典)的格式存储数据。
它采用一种非常简单的形式,每个键对应一个值,并且可以通过键快速获取数据。

主要平台有DynamoDB、Voldemoto等。

“卡拉姆商店”

这个也被称为宽列存储。它具有类似于常见关系型数据库的表格形式,但是对于某些键,可以自由选择包含列A、B和C的值,对于另一些键,可以自由选择包含列B、C、D和E的值等等,而且列的格式也可以自由定义。

主要平台:包括Apache Cassandra、Apache HBase等。

文档存储

在文档存储中,可以存储层次结构的数据。
如果您能想象一下XML或JSON格式的数据,应该就能够理解数据结构的概念。
实际上,文档数据库可以直接存储JSON结构的数据,并能在保持从外部Restful API获取的数据等方面发挥作用。

主要平台:主要平台有Apache CouchDB和MongoDB等。

呈现一个选项,以下是以中文本地方式的解释:这个词是“图表”的意思,指的是一种可视化工具,用来展示和比较数据。

以图形结构的节点和边来存储数据。
由于与以上三种“易于分散”的数据结构不同,因此很难进行扩展,
但在关系型数据模型中,可以明确定义过于复杂的关系,并通过基于关系进行的搜索(如路径搜索)来展示出高性能。

主要平台:Amazon Neptune、Neo4J等。

NoSQL的特点

延迟极小

与DWH和Hadoop不同,NoSQL是一个用于操作目的的平台。
作为表示数据处理速度的术语,使用了”吞吐量”和”延迟”这两个词,
用于聚合的平台,如DWH和Hadoop,重视的是”吞吐量”的大小,
而用于操作的平台,如NoSQL,则重视”延迟”的小。

“Throughput”表示单位时间内可以处理的数据量,
“Latency”表示一次处理完成所需的延迟时间。
虽然感觉上它们有什么区别呢?让我们以Hadoop和NoSQL为例来看看。

在Hadoop中进行处理时,任务将分配给每个TaskTracker,然后在JVM上启动程序,同时还需要以顺序访问数据的方式在HDFS上进行访问。
换句话说,在Hadoop上进行处理需要一定的准备时间,并且可能会访问到除了实际想要访问的数据之外的其他数据。

即使只需要获取一条记录,与需要处理大量数据的情况相比,准备时间也是相对较少的。

换句话说,当处理大量数据的聚合时,每单位时间可以处理的数据量很大,但每次处理的延迟可能达到几十秒甚至几分钟。这意味着”吞吐量”很大,同时”延迟”也很大。

在NoSQL数据库中,例如KVS和文档型数据库,数据以简单的格式存储,可以高效地提取特定的数据项。因此,NoSQL数据库具有非常小的延迟,约为几毫秒。

如果进行一方面的汇总处理,数据并不以适合列导向的形式存储,因此不能仅仅访问特定的列进行汇总。因此,对于大量数据的汇总处理,将需要花费更长的时间,同时”吞吐量”也会相对较小。

在用于操作的数据库中,”延迟”很重要。
如果访问一条数据需要花费十秒的时间,那这个服务就无法成立。
这就是NoSQL成为操作用途平台的原因。

无模式

在NoSQL中,为了更容易地进行分布式处理,数据被存储在具有较少数据间依赖的结构中,但是不严格定义关联性也有其好处。

如果要将数据放入RDB中,首先需要定义表的模式。
如果要创建一个存储具有复杂关联性的数据的表,定义模式并不容易,
而且后来要更改模式的定义也非常困难。

不过,在KVS或者文档型数据库中并不需要定义这样的模式。
可以先简单地存入数据,并且以后如果想要改变数据结构,也可以灵活地进行变更。
这种数据库被称为无模式数据库。

如果说我们需要调用外部API并存储从中获取的数据的情况,这种优点就会显现出来。
在文档数据库中,我们可以直接存放作为响应返回的JSON数据,
而且可以很快地适应经常变动的API规格,使得开发工作可以顺利进行。

在NoSQL中,尽管相对关系型数据库(RDB)在数据一致性方面稍逊一筹,但在需要开发速度和灵活的规格更改的情况下,它也能发挥作用。

广告
将在 10 秒后关闭
bannerAds