认真学习NoSQL

首先

我最近发布了一篇关于我经常使用的Docker架构的文章。
最近经常用的Docker架构备忘录(NodeJS+Redis+MySQL)。

我认为在各种用途中,使用NoSQL的场景非常多,而且被归类为NoSQL的产品也非常多。
在上述文章中,它提到了将Redis用作缓存机制的目的。但我认为当我们在选择NoSQL产品时感到困惑时,我们可能没有意识到具体的差异,因此我在笔记中记录了这篇文章。

NoSQL是什么

NoSQL是一个广义分类术语,用于指代除了关系数据库管理系统(RDBMS)之外的数据库管理系统,它是Not Only SQL的缩写。
一些主要的产品包括Redis、MongoDB、DynamoDB、Neo4j和Memcached。

背景使得需要 NoSQL 数据库

由于NoSQL可以弥补关系型数据库的不足,因此它通常被用作解决方案。所以,首先我想整理一下关系型数据库的优缺点。

关系型数据库管理系统(RDBMS)的优势

在探讨为什么需要NoSQL之前,我想先梳理一下关系型数据库管理系统(RDBMS)的优势。以下是一些可能被提及的RDBMS的优点。

    • データの一貫性 (トランザクション)

 

    • 更新時のコストが少ない

 

    SQLによる複雑な条件での検索や集計

我认为使用关系数据库管理系统(RDBMS)的最大优点是保证数据的一致性。
在需要严格要求数据一致性的情况下,使用RDBMS会很好。
此外,使用RDBMS时,前提是表进行了规范化,因此在数据更新时的成本非常低,这也是一个优点。

关系数据库管理系统(RDBMS)的不足之处

我认为关系型数据库管理系统(RDBMS)的弱点主要体现在以下方面。

    • スケーラビリティ

 

    インデックス作成コスト

尽管我们将可伸缩性列为一个弱点,但在关系数据库管理系统(RDBMS)中,由于可以将数据加载部分配置为主从复制,因此通过增加从服务器来相对轻松地扩展系统规模是可能的。

然而,将写入部分进行扩展是困难的。虽然可以考虑使用相互复制的双主构成方法,但如果无法正确控制,更新过程可能会发生冲突,因此引入这种方法可能会很困难。特别是因为需要对每个表进行查询目标的分配,所以很难说引入会很简单。

可以考虑将数据库进行分割并分配到不同的服务器作为另一种方法。
通过分割服务器,可以减少磁盘IO,从而减少数据大小,使得分割数据库以实现快速的内存处理变得更加有效。
虽然这可能在某种程度上看起来是一个较好的解决方案,但在将数据库分割到多个服务器时,由于无法与其他服务器的表进行联接操作,所以需要考虑到这一点,并进行正确的设计。

此外,我认为在关系型数据库管理系统(RDBMS)的情况下,索引策略被用来提高搜索速度的目的。然而,需要注意的是,当数据量较大时,通过添加索引可能会导致表被长时间锁定的问题。

为何需要 NoSQL 数据库

在整理了关系数据库管理系统(RDBMS)的优点和缺点之后,我们将继续列出为什么需要NoSQL的原因。
作为NoSQL需求背景之一,需要考虑处理大数据的特性的重要性。

大数据的特点

处理大数据需要具备以下五个必要特性。

    • 量 (Volume)

多様かつ大量なデータを扱う必要性

速度 (Velocity)

データへのリアルタイムアクセス
データの意味合いの変化速度

多様性 (Variety)

構造化データや非構造化データなどの多種多様なデータの多様性

正確さ (Veracity)

データの正確さや一貫性に関する要件

変動性 (Variability)

コンテキストによってデータの意味が変動する

换句话说,数据是“大规模”,“高速”,“复杂”且“多变”的。考虑到以上五个特点,使用关系型数据库管理系统(RDBMS)来处理大数据是行不通的原因。

关系数据库管理系统(RDBMS)对于“数据量”和“速度”存在一些不足之处。

当数据量和处理速度的增加成为问题时,RDBMS在可扩展性方面非常欠缺。这是因为RDB通常设计成在一台服务器上运行。当RDBMS本身需要扩展时,可能会发生需要购买更大、更复杂和更昂贵硬件的情况。此外,正如前面提到的,如果要进行扩展,由于RDBMS的高成本,不太适合进行扩展。

关系数据库管理系统对于「多样性」的缺点

关系型数据库(RDB)并不擅长处理非结构化数据,原因是RDB具有以下特性。

    • 格納前に構造定義をする必要がある。

 

    • データソースの構造が変更された場合、スキーマを変更する必要がある。

 

    非構造データでは事前に構造を把握することは難しくスキーマ定義ができない。

基于这些理由,选择RDBMS来处理非结构化数据并不太合适。

如果使用NoSQL,能解决这个问题吗?

总结起来,这些问题是可以通过以下NoSQL的特性来解决的。

    • NoSQLは複数台のサーバ構成を利用した水平分散が得意。(Sharding)

 

    NoSQLは構造定義を必要とせずにデータを格納できる。

分散水平

NoSQL通过分片将数据分散到多个服务器上。
它最初就是为水平分散而设计的,因此非常廉价且易于构建。
将服务器分散化的最大优点是数据更容易存储在内存中。
在必须仅用一个服务器来处理的关系型数据库中,处理大量数据时很容易溢出内存,但是在具有良好可伸缩性的NoSQL中,可以在一定程度上存储在内存中。

从一致性的角度来看,不像RDBMS那样可以严格保证。
最终目标是在保证最终一致性的前提下,暂时允许一致性有所损失。

構造定義是不必要的。

具备直接处理类似于JSON和XML这样自由度高的文档的能力,而无需将其转换为关系型数据库的表。
数据处理的分类大致有四种,尽管它们的处理方式各不相同,但从无需结构定义的角度来看是相似的。

因此,可以说NoSQL擅长处理非结构化数据。

NoSQL的分类

NoSQL有四个主要类别,分别是”文档”、”键值对”、”列式”和”图形”。

文档型

主要产品

MongoDB和CouchDB

以下是特征的中文原生释义:

– 特点
– 特色
– 独特之处
– 特征
– 突出之处

可以直接存储JSON、XML等文件的数据库。相对于关系型数据库,能够直接存储JSON数据,而不需要复杂的模式定义。可以对文档的部分或全部进行读取、更新和删除操作。

键值对

主要产品

Memcached,Redis,DynamoDB

独特之处

将键和值作为对进行存储的简单数据库。
在创建和更新时,通过键和值对进行创建,并通过指定键来进行读取和删除。
值可以是单个值,也可以是具有多个值的列表或集合等可处理的数据。

面向列的

主要产品

卡桑德拉,HBase

特点

与一般的行导向型数据库类似,列导向型数据库也具有表的结构,但是它是按照列存储数据的。
关系型数据库是以行为单位进行处理,而列导向型数据库则是以列为单位进行处理。
它执行的操作不是提取行,而是提取列。
对于行导向数据库来说,列单位的大规模汇总和大规模更新是它的优势。
在有大量列单位处理的系统中,由于它可以比关系型数据库更快地进行处理,因此被广泛应用于行单位汇总处理较多的信息分析系统等领域。

图形化

主要产品

Neo4j是一种图形数据库管理系统。

属性

这是一个以图形结构存储数据的数据库。
适用于存储网络状数据。
我们可以说它是一个将重点放在数据之间关系的数据库。

样本

1_ttbR95R4sALs5XqFACI4cw.png

总结

虽然我们称之为NoSQL,但实际上有各种不同类型的数据库,每个数据库都有其特点。
此外,NoSQL与关系型数据库共存,并不意味着取代关系型数据库。
我们需要判断要处理的数据类型,选择使用关系型数据库管理系统还是NoSQL,以便能够灵活地根据不同的情况进行使用。

文献引用

为什么要选择”NoSQL数据库”?必要性和主要产品的比较
NoSQL时代:利用文档模型

广告
将在 10 秒后关闭
bannerAds