当前课程知识点:数据库系统原理与开发 > 第7章 NoSQL数据库技术 > 7.1 NoSQL数据库概述 > 7.1.3 NoSQL数据库概述-3
今天这一节我们来学习一下
NoSQL的基本概念
NoSQL数据库的存储模型
NoSQL数据库的特征
第一个NoSQL的基本概念
什么是NoSQL
NoSQL是Not Only SQL的缩写
即 不仅仅是SQL
是对关系型SQL数据库系统的补充
它是一类非关系数据存储系统
通常不需要一个固定的表的模式
所有的NoSQL
淡化了一个或更多的事务的ACID属性
即事务的一致性 原子性
隔离性和持久性的属性
还有相比传统数据库
他叫分布式数据库管理系统
更加贴切
而且数据的存储被简化了
重点放在我们的分布式数据管理上
NoSQL像我们的互联网公司
像谷歌或Facebook
都可以用NoSQL每天处理用户的
上万亿比特的数据
而且一些新的数据源
新的应用领域
也产生了大量的数据
用NoSQ可以做很快的一些处理
还有NoSQ并不单指一个产品和一个技术
它代表一族产品以及一系列不同的
相互有关联的
有关的数据存储以及处理的一些概念
下面我们来看一下
采用的哪些技术
第一个数据类型简单
它可以采用简单的数据类型
例如永键值类型
还有系统只需要支持单记录级别的原子操作
不需要支持批量的数据操作
还有系统的扩展性
就是我们不管是系统可以横向扩展
也可以纵向扩展
数据的内容可以扩展
数据的处理方式可以扩展
元数据和应用数据分开
又有元数据来对数据的格式进行定义
这样子是我们可以
很容易的定义
k不同类型的数据
在我们的数据库里头去应用
还有弱一致性
我们用最终一致性和实践一致性
来满足用户对数据一致性的要求
最后我们适应的数据增长
并能灵活的适应我们半结构化的数据
和稀疏数据集来进行管理
还有一个他没有声明性的查询语言
没有预定义的模式
这个随着数据的变化
可以用自定义的方式
来处理各种变化的数据
存储的方式包括我们的键值对存储
列存储 文档存储和图形存储等等方式
来对数据进行存储处理
提高数据的查询效率
最终一致性
和非结构化的不可预知的数据
我们都遵从CAP定理
使用BASE原理
用高性能 高可用性和高扩展性
来进行数据的管理
下面一个我们来看一下
NoSQL的特点
他的
优点表现在具有高扩展性
分布式计算 低成本
还有架构的灵活性
半结构化的数据
没有复杂的关系
缺点是没有标准化
而且它的查询
只要求有限的查询能力
而且最后最终的一致性不直观
他是应用很多的
NoSQL数据库的特点是
应用来决定
怎么实现数据的最终一致性
下面我们来看一下NoSQL的整体结构
我们看一下它分成三个层次
首先最上面是我们的接口层
接口层里头实际上有很多我们的
语言的API接口的子集
或者是不同的数据
分析挖掘的一个工具
来对我们用户
对用户提供的很多
功能进行处理
下面的一层是我们的逻辑层
数据逻辑层
对数据的结构设计层
我们的键值型
和我们的面向列出的和文档型
或者是图形的一个数据模型的设计
再下面一层数据的分布层
分布层在这一层里头
我们是基于CAP的支持
支持我们多数据的中心动态部署
最后最下面一层是我的数据持久层
这个是保证我们
说明我们数据怎么存储
我们可以基于内存的
可以基于硬盘的
也可以基于内存和硬盘结合的
也可以基于定制可插拔的方式来存储整个
NoSQL的数据
下面来看一下
NoSQL数据库的存储模型
整个存储数据模型分成四类
也是我们整个这一章的内容
第一类是列存储数据模型
是讲同一列的数据存储在一起
可以存我们结构化的半结构化的数据
第二类是键值存储模型
存储的数据有键和值两部分组成
通过键可以快速的查到值
值的格式可以根据我们的应用来定义
文档存储数据库实现存储的内容是文档型的
可以用格式化文件
或者是半格式化的文件进行存储
图存储数据库
以加权图的方式
对数据进行存储
下面我们来看第一个
健值存储的类型与特征
我们键值存储的类型有哪些
有三种
一种是临时性的
这种就是我们的数据是保留在内存中
可以进行快速的保存
和读取处理数据
有可能丢失
第二种永久性的是在磁盘上保存数据
可以进行快速的读写
数据不会丢失
第三种就是两者兼有
我们内存和磁盘都可以保存数据
这个就是我们的数据的类型
特征就是我们为键值
只有可以通过键来快速进行查找
可以快速的写入
可以这些所有的查找
都是基于内存和内存的映射的
而且
因为键值可以代表的含义很多
所以说组合计算不是很透明
基于混合的工作复杂
并且有大量的数据齐的情况下
可以用我们的键值存储来进行处理
第二个是我们的文档存储
文档存储的方式
我们看一下是没有表结构
实际上是结构可变化
我们的文档可以
随着你的应用不同
可以进行复杂的查询条件
因为这一个文档里头
可以定义很多文档的不同格式
所以说可以进行复杂的查询条件
第三个文档实际上是一个记录
能够对包含的数据的类型和内容
进行自我描述
像我们的xml文件一样
可以自定义自己的数据类型
所以说我们面向文档的数据库
适用于我们存储 检索 管理
面向文档和半结构化的数据
文档可以包括我们的XML YAML JSON和BSON
还有二进制的所有文档
PDF和微软的office文档等等
都可以作为文档来进行存储
下面一个是我们的列存储数据库
列存储数据库是面向列的数据库
对大量的行 少数的列进行读写
对所有特定的列进行实时的更新
它实际上是在
它的特点是拓展型比较大
但是应用十分困难
对大量的数据更新和查询有优势
适合部署在那种需要大规模数据库的场合里头
而且开发者可以动态的控制列族的各列
数据按照行的标识符
列名及时间戳来进行定位的
而且读取操作和写入操作都是原子的
数据是以行以某种顺序来进行维护的
这个就是列数据存储库
下面一个是我们第四类
是图存储数据库
图存储数据库是图形数据库的
每一个节点
对象是一个节点
之间的关系是一条边
图形数据库善于处理
大量复杂的 互连接的
结构化的数据
这些数据变化迅速
需要频繁的查询
图形数据库适合用于我们的
社交网络 推荐系统等
专注于构建关系图谱的系统
在社交网络里头
我没有朋友圈
我没有这些
朋友之间的关系可以
最适合用我们图形进行存储的
它的特点是
我们可以表示复杂的结构
数据的操作快
这个实际上就是我们用图的方式
来定义他们之间的关系
通过对图形的图
可以基于图的所有理论对数据库进行操作
所以数据的表现非常直观
还有灵活
不管有什么新的数据需求都可以
一律按照节点和边
只考虑我们节点的属性和边的属性
在扩展的方面
也是对边如何扩展
对节点如何扩展
使它具有更大的灵活性
数据库的操作速度
并不会随着数据库的增大而明显的降低
这个是因为我们数据的存储格式的一些原因
我们用图的方式来存储
图的方式
实际上我们在
要求我们的存储量比较大
但实际上能够保证我们的存储
数据操作的速度
下面我们来看一下
NoSQL数据库的特征
第一个它不需要预定义模式
这个就是我们刚才讲的四种存储的模型
就不需要时间去定义
第二个 无共享架构
它实际上是针对某些数据进行操作
弹性和扩展
他可以用分区的方式来进行
像我们用键值数据库
可以按照键值来进行分区
不同的键值存到不同的服务器上
来提高系统的可扩展性
可以进行异步复制
又有我们
是基于我们的
弱一致性来保证这个异步复制的功能进行
用BASE相对于我们的ACID特性
s我们
NoSQL数据库保证BASE特性
就是最终的一致性和软事务的一致性
在某一个时刻不一致
但是最终的数据是保持一致的
有了这个以后
我们下面来看一下它相对应的
它的架构特征
一个是数据的模型比较灵活
我们可以自定义很多种
根据需要来定义
另外一个可以实现可伸缩性
可以向上扩展也可以水平扩展
向上扩展是我们各种应用不同
要求我们来进行扩展
水平扩展是存储
根据不同的存储方式
分批复制来进行扩展
还有高可用性
下面一个他都有
具有非常高的读写性能
因为我们对数据操作的类型
都是用键基于一个
快速的查找
基于一个键值
然后再通过键值连接它的内容
所以说它的读写性能都比较高
适合于我们的
在我们社交网络 移动服务
协作编辑等等方面
我们图形数据库
存储显示的更高的灵活性
所以说我们的NoSQL数据库
也是我们现在发展的一个特征
下面我们来看一下
NoSQL的应用的一些场景
第一个场景
我们用数据模型比较简单的一些场景
因为我们NoSQL其中的四类的数据存储方式
所以说
第二种我们需要灵活
更强的一个信息处理系统
这个要求我们所有的数据
要不断的变化
而且可以是无结构的
有半结构化的数据不断的变化
需要我们有更灵活
更强的数据处理
第三个对数据库的性能要求较高
我们的可扩展性
还有高性能
因为在大数据环境底下
数据量非常大
需要我们对高性能进行一些扩展
第四个
我们不需要高度的数据一致性
这个也是我们的BASE原则
我们保证
是用软状态或者最终的数据的一致性
在我们最终可以保证
所有的数据操作
在我们整个环境下数据是一致的
对给定的键值可以比较容易的
映射到一些复杂值的环境
这个也是我们数据可扩展的
一个比较重要的一个因素
所以我们可以给定一个键值
这个键值代表的含义
可以非常复杂
也可以非常简单
而且可以随着应用不断的变化
在一个数据库里头
你可以对这个键值代表的含义
进行不断的重复定义
这样子保证数据的可用性
所以说许多云计算的环境下
新型的应用
如我们社交网络 移动服务
协作编辑等等
这些都是我们NoSQL应用的
一个很好的应用场景
当然随着我们云计算时代
海量数据的管理的设计目标
我们的可扩展信息 弹性
还有容错性
自我管理等等
弱一次性
这些都提出了更高的要求
但随着技术的发展
也有新的系统
也在不断的发展
这个就是本节的学习内容
-1.1 数据库及其系统概念
-1.2 数据库技术发展
-1.3 数据库应用系统
-1.4 典型数据库管理系统
-1.5 PostgreSQL对象-关系数据库系统软件
-第1章 数据库系统概论--本章单元测试
-2.1 关系及其相关概念
-2.2 关系模型原理
-2.3 PostgreSQL数据库关系操作实践
-第2章 数据库关系模型--本章单元测试
-3.1 SQL语言概述
-3.2 数据定义SQL语句
-3.3 数据操纵SQL语句
-3.4 数据查询SQL语句
-3.5 数据控制SQL语句
-3.6 视图SQL语句
-3.7 PostgreSQL数据库SQL实践
-第3章 数据库操作SQL语言--本章单元测试
-4.1 数据库设计概述
-4.2 E-R模型方法
-4.3 数据库建模设计
-4.4 数据库规范化设计
-4.5 数据库设计模型SQL实现
-4.6 基于Power Designer的数据库设计建模实践
--4.6 基于Power Designer的数据库设计建模实践
-第4章 数据库设计与实现--本章单元测试
-5.1 数据库管理概述
-5.2 事务管理
--5.2 事务管理
-5.3 并发控制
-5.4 安全管理
-5.5 数据库备份与恢复
-5.6 PostgreSQL数据库管理项目实践
-第5章 数据库管理--本章单元测试
-6.1 数据库连接技术
-6.2 数据库存储过程
-6.3 数据库触发器
-6.4 数据库游标
-6.5 嵌入式SQL编程
-第6章 数据库应用编程--本章单元测试
-7.1 NoSQL数据库概述
-7.2 列存储数据库
-7.3 键值对数据库
-7.4 文档型数据库
-7.5 图形数据库
-7.6 HBase数据库项目实践
-第7章 NoSQL数据库技术--本章单元测试
-期末测试--期末测试