认真学习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是一种图形数据库管理系统。
属性
这是一个以图形结构存储数据的数据库。
适用于存储网络状数据。
我们可以说它是一个将重点放在数据之间关系的数据库。
样本
总结
虽然我们称之为NoSQL,但实际上有各种不同类型的数据库,每个数据库都有其特点。
此外,NoSQL与关系型数据库共存,并不意味着取代关系型数据库。
我们需要判断要处理的数据类型,选择使用关系型数据库管理系统还是NoSQL,以便能够灵活地根据不同的情况进行使用。
文献引用
为什么要选择”NoSQL数据库”?必要性和主要产品的比较
NoSQL时代:利用文档模型