NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
现代计算系统每天在网络上都会产生庞大的数据量。这些数据有很大一部分是由关系型数据库管理系统(RDBMSs)来处理,其严谨成熟的数学理论基础使得数据建模和应用程序编程更加简单。
A – Atomicity – 原子性
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有被执行过一样。
C – Consistency – 一致性
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
I – Isolation – 隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
D – Durability – 持久性
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
关系型数据库严格遵循ACID理论。但当数据库要开始满足横向扩展、高可用、模式自由等需求时,需要对ACID理论进行取舍,不能严格遵循ACID。以CAP理论和BASE理论为基础的NoSQL数据库开始出现。
分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式是NoSQL数据库的必要条件。
权衡一致性和可用性——BASE理论
1. 一致性算法 - Paxos
节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。Paxos 算法就是一种基于消息传递模型的一致性算法。
2. 分区(Partitioning)
原来所有的数据都是在一个数据库上的,而分区的方案就是把某一个表或某几个相关的表的数据放在一个独立的数据库上
3. 分片(Replication)
分区有两种模式,一种是主从模式,用于做读写分离;另外一种模式是分片模式,也就是说把一个表中的数据分解到多个表中。一个分区只能是其中的一种模式。
4. 一致性哈希(Consistent Hashing)
模式: 预定义的模式 没有预定义的模式
查询语言:结构化查询语言 没有声明行查询语言
一致性:严格的一致性 最终一致性
事务:支持 不支持
理论基础:ACID CAP,BASE
扩展:纵向扩展 横向扩展(分布式)
1. 键值存储数据库
这一类数据库主要会使用到哈希表
Redis
2. 列储存数据库
这部分数据库通常是用来应对分布式存储的海量数据。
HBase
3. 文档型数据库
该类型的数据模型是版本化、半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。
MongoDB
4. 图形数据库
Neo4
2. 维基百科-NoSQL
原文:https://www.cnblogs.com/lfri/p/12545181.html