NoSQL是什么东西?

暫時來說,NoSQL是什麼?

NoSQL 是非关系型数据库系统的缩写,一般而言,它被归类为数据库的一种类型。数据库分为关系型数据库(RDB)和非关系型数据库(NoSQL)两种,关系型数据库使用SQL语言进行数据写入和检索,比如MySQL和PostgreSQL等。

DataBase.png

关系型数据库(RDB)和非关系型数据库(NoSQL)的比较

数据的存储方式和访问方法 de hé

关系型数据库

RDBrelation.png

非关系型数据库

在提到NoSQL时,并不是指一种统一的数据存储方式,而是被分为几种不同的”类型”。以下列举的只是一个例子,还有许多其他类型,比如图形类型等。

键值型
键值型是一种简单的数据模型,不需要定义类似RDB的表格或关系,只由键和值组成。随着数据的增加,表格会向纵向扩展。通过扩展(即增加服务器数量)并将处理工作分布化,可以在短时间内对大数据进行CRUD操作的快速响应。
例子:Redis和Riak

“カラム指向型” 是一种在键值对模型基础上引入了列概念的数据模型。
每一行都可以具有多个与之相关的列。
与关系型数据库(RDB)不同的是,列的数量可以动态地添加,不是固定的。
使用关系型数据库的人可能会认为这与异质的,但实际上可以创建具有其他行中不存在的列的行。
例如:Cassandra和HBase。

“カラム指向型” 是一种在键值对模型基础上引入了列概念的数据模型。
每一行可以有多个附加的列。
与关系型数据库(RDB)不同的是,可以动态地添加新的列,不是固定的。
使用关系型数据库的人可能会认为这与异质的,但实际上可以创建具有其他行中不存在的列的行。
例如:Cassandra和HBase。

文档型数据库是一种可以直接存储JSON、XML等文档格式数据的数据库。与键值型数据库相比,它能够适应更灵活的数据结构,如层次结构等。
每个数据单元被称为“文档”,每个文档的数据结构都是自由的,可以在添加数据时进行更改。与关系型数据库不同,不需要事先确定表的结构。(无模式)
例如:MongoDB或Firestore。

以下的图片是一个文档类型的图像(firebase/firestore),但正如前面所述,它并非被固定在这个类型上。您可以针对每个文档更改列或更改数据类型。

NoSQLrelation.png

处理速度

RDB可以用以下一种方式进行中文本地化:

根据系统的特性和规模不同,普遍认为为了进行可靠的交易处理,速度并不是特别快。

非关系型数据库

在处理大量数据的服务中,如果主要是进行引用和添加处理,由于不存在事务本身,并且不需要与其他进程进行同步的读写操作,所以会很快。由于数据结构的特性,它本来就不适合用于更新和删除处理。

交易

关系数据库

ACID(原子性、一致性、隔離性、持続性)具有以下特性。

原子性:交易必定是完整执行或完全不执行之一。
一致性:一旦交易执行,数据必须遵循数据库模式。
隔离性:同时发生的交易互不干扰地执行。
持久性:即使发生意外系统故障或停电,也能够恢复到异常发生之前的最后一个状态。

换言之,当在银行取钱时遇到错误,无法提取现金,但账户余额却减少了。在进行交易处理时,不会在中途中止,一旦出现错误,会进行回滚并恢复到初始状态,以确保银行方和客户方都不会遭受损失,这就是事务的机制,并且关系数据库中采用了这个机制。

非关系型数据库

在NoSQL中,通常情况下不存在事务。可以增加服务器,实现可扩展性(水平分散),但数据的一致性不能得到保证。

那么,NoSQL的数据设计是怎样的呢?

・由于没有建立关系,并且无法发送加入请求,所以可以同时获取数据以便拥有数据。
・允许重复保存数据。
・在更新数据时,对重复的数据分别发送更新请求。

我认为每个方面都被认为是RDB不适合的设计。由于NoSQL的特性,更喜欢具有简单设计、能够快速与数据库进行交互的感觉。

简单来说

由于RDBMS能够明确定义模式并建立关系,因此适用于处理复杂的数据。然而,当数据量过大时,速度就会变慢。

NoSQL不需要定义架构,可以自由存储所需数据。它适用于简单数据,并且即使数据膨胀也不容易出现性能劣化问题,但对于复杂数据来说则不擅长。

请参照下列内容,只需要一个选项:

・https://tracpath.com/works/development/nosql_overview/ – https://tracpath.com/works/development/nosql概述/

・https://qiita.com/kubocchi/items/e123cffc518c402b399b – https://qiita.com/kubocchi/items/e123cffc518c402b399b

bannerAds