NoSQL非关系型数据库

1. 简介

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

现代计算系统每天在网络上都会产生庞大的数据量。这些数据有很大一部分是由关系型数据库管理系统(RDBMSs)来处理,其严谨成熟的数学理论基础使得数据建模和应用程序编程更加简单。

但随着信息化的浪潮和互联网的兴起,传统的RDBMS在一些业务上开始出现问题。首先,对数据库存储的容量要求越来越高,单机无法满足需求,很多时候需要用集群来解决问题,而RDBMS由于要支持join,union等操作,一般不支持分布式集群。其次,在大数据大行其道的今天,很多的数据都“频繁读和增加,不频繁修改”,而RDBMS对所有操作一视同仁,这就带来了优化的空间。另外,互联网时代业务的不确定性导致数据库的存储模式也需要频繁变更,不自由的存储模式增大了运维的复杂性和扩展的难度。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。这类数据库主要有这些特点:非关系型的、分布式的、开源的、水平可扩展的。最初的目的是为了大规模web 应用。NoSQL 的拥护者们提倡运用非关系型的数据存储,通常的应用如下特点:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。

2. 理论基础

2.1 关系型数据库理论——ACID

ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

A – Atomicity – 原子性

一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有被执行过一样。

C – Consistency – 一致性

在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

I – Isolation – 隔离性

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

D – Durability – 持久性

事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

关系型数据库严格遵循ACID理论。但当数据库要开始满足横向扩展、高可用、模式自由等需求时,需要对ACID理论进行取舍,不能严格遵循ACID。以CAP理论和BASE理论为基础的NoSQL数据库开始出现。

2.2 分布式系统

2.2.1 分布式系统介绍

分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式是NoSQL数据库的必要条件

  • 因为分布式集群里的服务器是通过内部网络松散耦合,各节点之间的通讯有一定的网络开销,因此分布式系统在设计上尽可能减少节点间通讯。
  • 因为网络传输瓶颈,单个节点的性能高低对分布式系统整体性能影响不大。
  • 提升分布式系统的整体性能是通过横向扩展(增加更多的服务器),而不是纵向扩展(提升每个节点的服务器性能)实现。
  • 分布式系统最大的特点是可扩展性,可以通过增加服务器数量来增强分布式系统整体的处理能力,以应对企业的业务增长带来的计算需求增加。

2.2.2 分布式存储的问题——CAP理论

CAP理论告诉我们:一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)、分区容错性(P:Partitiontolerance)这三个基本需求,并且最多只能满足其中的两项。
对于一个分布式系统来说,分区容错是基本需求,否则不能称之为分布式系统。因此架构师需要在C和A之间寻求平衡。

 

  • Consistency – 一致性(与ACID的C完全不同):一致性是指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。

权衡一致性和可用性——BASE理论

  • BA:基本可用。允许损失部分可用性,即保证核心功能或者当前最重要功能可用。
  • S:Soft State,软状态。允许系统数据存在中间状态,即允许系统在不同节点的数据副本之间进行数据同步时存在延时。
  • E: Eventually Consistent,最终一致性。要求系统数据副本最终能够一致,而不需要实时保证数据副本一致。最终一致性是弱一致性的一种特殊情况。

2.2.3 分布式存储算法

1. 一致性算法 - Paxos

节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。Paxos 算法就是一种基于消息传递模型的一致性算法。

2. 分区(Partitioning)

原来所有的数据都是在一个数据库上的,而分区的方案就是把某一个表或某几个相关的表的数据放在一个独立的数据库上

3. 分片(Replication)

分区有两种模式,一种是主从模式,用于做读写分离;另外一种模式是分片模式,也就是说把一个表中的数据分解到多个表中。一个分区只能是其中的一种模式。

4. 一致性哈希(Consistent Hashing)

比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了。
一致性哈希基本解决了在P2P环境中最为关键的问题——如何在动态的网络拓扑中分布存储和路由。每个节点仅需维护少量相邻节点的信息,并且在节点加入/退出系统时,仅有相关的少量节点参与到拓扑的维护中。

3. NoSQL

与SQL对比

模式: 预定义的模式    没有预定义的模式

查询语言:结构化查询语言   没有声明行查询语言

一致性:严格的一致性   最终一致性

事务:支持    不支持

理论基础:ACID     CAP,BASE

扩展:纵向扩展   横向扩展(分布式)

NoSQL数据库分类

1. 键值存储数据库

这一类数据库主要会使用到哈希表

Redis

2. 列储存数据库

这部分数据库通常是用来应对分布式存储的海量数据。

HBase

3. 文档型数据库

该类型的数据模型是版本化、半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。

MongoDB

4. 图形数据库

Neo4

4. 参考链接

1. 简书-一文读懂非关系型数据库(NoSQL)

2. 维基百科-NoSQL

posted @ 2020-03-22 11:58  Rogn  阅读(386)  评论(0编辑  收藏  举报