文章目录
1. 概念
- NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的 ACID特性
- 其他解释
- 解释一:Non-Relational
- 解释二:Not Only SQL
Atomicity(原子性):表示一个事务中的所有操作要么全部成功,要么全部失败。如果事务中的任何一个操作失败,那么整个事务将被回滚,之前的操作结果将被撤销,以确保数据的完整性。
Consistency(一致性):表示事务执行前后,数据库的状态必须保持一致。也就是说,事务的执行结果必须满足数据库的约束、规则和数据完整性。
Isolation(隔离性):指并发事务之间相互隔离,彼此独立执行,不会相互干扰。每个事务都应该感觉自己是在独立地操作数据库,而不受其他事务的影响。
Durability(持久性):表示事务完成后,其对数据库的更改是永久的,即使在系统出现故障或崩溃的情况下也不会丢失。持久性保证了数据的可靠性和可恢复性。
2. 共同特征
- 易扩展
- 原因:数据之间无关系
- 大数据量,高性能
- 原因:无关系性,数据库的结构简单
- 灵活的数据模型
- 表现:无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
- 高可用
- 不太影响性能的情况下,方便的实现高可用
3. 常见分类
一般可以将NoSQL 数据库分为以下4种类型:
3.1 列式数据库
行式数据库即传统的关系型数据库,数据按记录存储,每一条记录的所有属性存储在一行。
- 列式数据库:
- 列:按列来组织和存储数据
- 页链:对应表中的一个存储列
- 表:由一组页链的集合组成
- 键:指向多个列
- 使用场景:应对分布式存储的海量数据
- 产品:Cassandra、HBase、Riak
3.2 键值对存储数据库
- 数组链表
- 是键值存储的典型数据结构
- 插入过程:
- 通过Hash算法得出Hashcode, 找到数组的某一个位置,然后插入链表
- 数据库维护该哈希表,表中有一个特定的键和一个指针指向特定的数据。
- 优点:简单、易部署
- 缺点:只对部分值进行查询或更新时效率低下了
- 产品:Tokyo Cabinet/Tyrant、Redis、Voldemort、Oracle BDB。
3.3 文档型数据库
- 概述
- 可以看做键值数据库的升级, 允许嵌套键值
- 半结构化的文档以特定的格式存储(如JSON)
- 优点:在处理复杂数据时比键值数据库的查询效率更高
- 产品:如CouchDB、MongoDb、SequoiaDB(国产)
3.4 图数据库
- 概述:
- 它使用灵活的图形模型
- 并且能够扩展到多个服务器上
- 产品:Neo4J、InfoGrid、Infinite Graph
4. 体系框架四层结构
NoSQL整体框架由下至上分为4层:
4.1 数据持久层 (Data Persistence)
- 定义了数据的存储形式
- 基于内存:存取速度最快,但可能会造成数据丢失
- 基于硬盘:持久保存,但存取速度慢
- 基于内存和硬盘:既保证速度,又保证数据不丢失
- 订制可插拔:数据存取有较高的灵活性。
4.2 数据分布层(Data Distribution Model)
数据分布方式有以下三种:
- CAP支持:可用于水平扩展
- 多数据中心支持:保证跨数据中心平稳运行
- 动态部署支持:可在运行的集群中动态地添加或删除结点
4.3 数据逻辑模型层 (Data Logical Model)
没有需要掌握的知识点
4.4 接口层 (Interface)
接口层提供了5种选择: Rest、Thrift、Map/Reduce、Get/Put、 特定语言API
以上分层结构每层可以有多个选择。这种分层设计提供了很大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。
5. 使用场景
- 数据模型较简单
- 需要灵活性更强的IT系统
- 对数据库性能要求较高
- 不需要高度的数据一致性