当前课程知识点:数据库系统原理与开发 >  第7章 NoSQL数据库技术 >  7.3 键值对数据库 >  7.3.3 键值对数据库-3

返回《数据库系统原理与开发》慕课在线视频课程列表

7.3.3 键值对数据库-3在线视频

下一节:7.4.1文档型数据库-1

返回《数据库系统原理与开发》慕课在线视频列表

7.3.3 键值对数据库-3课程教案、知识点、字幕

我们这一节开始学习

嗯,电子数据库的存储管理和它的系统架构以及api的使用

所以说我们下面来分析一下我们

在内存中都存了些哪些数据

首先第一位是数据

这个数据就是数据库中的数据

内存里头放,因为我们要对数据库的数据进行操作

操作的话题数据必须放在内存里头,这个就是

数据部分,第二部分就是我们进程运行时间运行的时间

我们的程序的代码还有一些程序的缓冲

我们还有一些相关的操作的一些中间结果

还有一些子进程等等,这些都会放到内存里头

占用内存

第三个部分就是缓存的内存

这个地方我们所有操作的数据,我们的程序运行

我们的数据库的插入,删除修改时间都需要

暂存一些信息,在在内存里头,这段时间,我们的内存里头有一片缓冲区

来存储这些相关的暂存的信息

第四部分是我内存的碎片

因为我们的程序运行的过程中,不断的申请新的内存释放

不用的,数据的一些内存,这样子会形成很多内存的碎片

这样的一个碎片是没法使用的

但是我们可以通过重启系统

重启系统,以后我们把新的数据重新把它从外传

内存里头,这样就私下就交出了内存的碎片,所以这个那是我们建筑数据库

这些数据都要存到内存,我们对内存他进行管理

下面一个我们来看一下数据存储结构

首先这个我们在前面的数据是我们所有的redis的数据库

实际上是一个字典结构

一开始她每一个数据项在字典里头有一个入口下

这个项里头,我们要存储对应的键的值

我们以为我们是一个键子数据库

所有都是存储在键值对,所以首先键的值我们要存

还有一个值

我们在键是1,我们对应的值world这个在我们的数据库里头都要把这两个词都要存进去

而且在我们的数据库里面这个值的类型有五种

所以说我们对不同的值的类型有不同的存储方法

这样肯定要对应不同的存储结构

因为整个存储都是在内存进行的

所以说内存分配器是必不可少的

内存分配器实际上不管是对我们所有的指点的入口对象

还是对我们的五种数据类型的对象还是对我们字符串的对象

实际上都是要进行内存分配,分配完以后才

我们申请内存有了内存以后我们才能把这个值存进去

有了这个以后,我们对对象来说,我们在前面讲过的对象的类型

五种对象我们提供了不同的对象编码

这个编码实际上就对应了我们的数据的存储

我们五种对象类型,实际上我们俩可以看内存的不同编码

比如说我们可以用紧凑的方式压缩的方式或不压缩的方式

实际上这些存储的方式相对我们内存使用都是有很大区别的

每一种数据类型,我们至少有两种编码

一种就是我们刚才说的,你压缩的方式一种可以

至少有两种非压缩的方式,还有压缩的行

无压缩的算法也不一样,所以对应有不同的编码来指出相关的一些

算法的使用的一些规则

有了这个编码方式以后,实际上我们可以看到

如果我们采取不同的编码,这样的系统自本生提供了相关的

这种编码如果我们需要增加,还改变编码的时间,对用户来说是透明的

用户就不用知道这个编码对应的一些具体的细节

而是由系统本身去完成这些细节的

下面一个,我们来看一下我们

我们这个键值数据库的一些体系结构也是他的

集群结构,这个也是我在我们楼下科数据库里头数据的扩展必须的一个相关的东西

我们看一下,因为在这里我们是

所有的redis数据库都是基于分布式数据处理的基础上发展的

所以说我们这边必须提供

多个电子数据库节点之间共享了一个程序集

下面一个就是我们这个集群的数据分片

在这里我们引入了hash槽的一个概念

这个集群里头有16384个hash槽

数据对每一个key,每一个相应的可以对应在哪个房型槽里头去存

实际上我们是通过一个校验的16位的循环校验码

对我们16384取模来放在哪一个槽里头,集群的每一个节点

就负责一部分,最终还是朝具体的算法,我们这边给出来了

一个我们,首先是我们有

16个循环代码了一个键值

我在和16384取模,比如说

我们当前有三个节点,我们接点a就包括领导5500号

hash槽节点b就包括我们5500,501到

11000号。节点c就剩下了11001

到16384号还是朝着样子,我们就把每一个

就把它分布放在不同的地方了

这样有了这个以后,我们的hash,我们的集群结构就很容易

看出来了,我看继续你的每一个节点是平等的

因为每一个我们对应的hash槽也是通过一种算法算出来的

我们的数据是存在一个,我们叫

master,也就是我们的主服

主节点上头去的节点和对应其他对应的一个salve

就是我们的纯节点之间实现数据同步的

我们读取数据的对应的master上头master一旦

失效了,我们可以启动对应的一些

从节点是他来充当master,就保证我们系统中有一个master

我们客户端可以直接与我们数据库的所有节点

十连到集群中的任何一个节点,因为我们所有的节点

都是连通的

而且我们客户端可以把物理节点映射到我们刚才说的不同的hash槽上

客户端就负责对应每一个槽上,取相应的值

下面这几种结构里头,我们就有主从复制

实际上我们在节点配置上把总服务器的ip地址

主服务器就可以通过导出rdb

abb或者通过aof这种方式

我们把我们的所有的数据修改,我们传到我们的重服务器上

这个就是组成的复制

我们就在这里我们支持我们从复制的一些功能

就是让从服务器成为主服务器的一个精致的一个复制品

复制的过程,我们下面来看一下

首先我们是从服务器连接到主服务器上

发送一个syc的一个信息发送过去以后

我们组服务器就结束了这个信息以后我们就生成一个新的进程

把内存的数据保存成文件,发送给从服务器

按服务器要这个子进程,在做数据快照的时间,我们父进程

可以接收我们客户端的其他的一些请求来把新的数据

发放了我们待发送的缓冲队列里头去

从服务器接受到内存快照以后

都清空所有的内存来重建我们所有把主服务器的所有东西拷贝到从服务器上头

从服务器截图的信息,是我们

先前一个时刻的我们,从这个时刻开始还有一些子进程

还有一些客户请求,也有数据改变的话我把这些改变的数据也发送给从服务器

这样可以保持数据的一致性所以整个的复制过程,我们看从第一步到

第五步完成以后,时间我们得从服务器就是一个主服务器的精确的一个拷贝

这个就是我们整个组从复制的过程

有了这个过程,我们来讨论一下复制的一个特点

在这里我们一个组服务器可以有多个从服务器

从服务器也可以有自己的从服务器

我们支持异步复制和部分复制

这个就是说我主服务器发送的时间,我可以通过异步的方式

就是我不等他复述完,我就去干其他的事情

也可以部分的方式根据请求的不一样进行复制

我们组从复制功能可以提升我们系统的伸缩性,实际上这个就是

可靠性,可用性都可以通过这个来进行保证

一群中每个节点都可以有一个到n个复制品

一个主服务器可以有多个从服务器,这个服务器下线了

从服务器选一个新的一个主节点作为主服务器

所以说某一个主节点和他所有的从节点都下线的话

我们整个集群就停止工作了

因为所有的服务器都不工作了

而且异步复制可能会因为网络的原因丢失

所以说下面来看一下我们的

客户端现在我们所有的,因为我们在

这个我们的主从服务器头,所有的服务器都是互联的

所以说所有的节点互联,我们的客户端可以通过总线的方式

申请到任何一个服务器上来进行操作我们客户端的服务

端口是1万号,这1万号是让我们所有的节点和节点之间都可以通过二进制协议进行通讯

但客户端也可以通过这些东西得到自己的信息

客户端集群节点之间可以通过文本协议进行通讯

集群节点不会代理给查询

实际上是有客户端发出申请主节点进行查询的

我们所有的数据是按照slot就刚才看到我们的

hash槽来存储

放在不同的这个我们的实例上头的

所以说我们所有的节点集群中的任何节点,如果这个节点出故障了

我们都可以自动的转移出去

而且整个所有的集群结构是没有中心的所长个集群的状态,大家都是平等的,互联的

下面一个就是在我们的

电子数据库里头,我们有实际上我们有事务和锁是让我们四个命令事务有四个命令来对这些

事务来进行管理,首先事务的开启取消,我们用开启一个事务

执行一个事务,执行一个事务的命令,完了取消事务

下面一个锁,我们用watch来进行锁实际上是一个乐观的锁

下面一个就是我们来看一下我们的数据持久化的机制

也是我们的存储机制,这个就是因为我们是内存数据库

内存数据库所有的操作是在内存里头,怎么来保持它的持久化

实际上就是要把我内存操作的数据

周期性的写入到磁盘里头,或者把操作的所有数据

放到一个日志里头写入到磁盘里头,这样子,实际上我们就可以保证这个

所有的数据可以持久化的保存

持久化的方式有两种,一种就是rdb和aof

rdb实际上就是我们把数据快照

存到我们磁盘里头,下次恢复的时间用这个

快照几恢复,aof是把所有的数据操作数据的修改成了一个文件里头

我们在数据恢复的时间,我们在执行这些,所有的数据修改是我们的

数据库带来一定的恢复,这个就是持久化的两种方案

当然这句话,rdb这种方案实际上就是写成一个二进制文件

aof的方式就是所有的操作命令

一个是直接拷贝一个时间是通过命令的方式来,就把这些重新还原数据

善于功能是它的发布订阅,这个时间发布订阅

意思就是说我们不用马上响应,是发送者可以发一个信息

订阅的人就实际上跟感兴趣的人就可以来电影院,这种就没有什么实时性的要求

实际上我们可以通过发布有三个命令来实现这种发布订阅

存储机制,刚才我已经说过了,是两种,一种就是rdb,一种aof

这个我们刚才已经说过了

rdb是快照aof是作为操作文件

而在性能方面,我们看一下我们快照的方式

要明显高于aof,直接把数据拷贝出去,aof的方式让我们要执行所有的操作

数据安全的方面,我们aol要高于我们的rab,我们要一条一条去执行

这样子实际上执行的过程就会有些安全检查

所以说我们在redis,我们reight的这些功能都是通过这些来进行的

下面一个就是我们的内存优化,这点实际上是在我们

数据类型里头,我们刚才也说过了,实际上他用对象的结构是一样的

对内存进行一些优化,就是比如说字符串和数字,我们就可以构建一个数字词

这次里头就通过一个,所以这样也用同一个数字,虽然我们只见一个缩影就可以了

这个就是可以优化,被一些复杂类型的优化,可以根据实际场景

我们可以就是,如果数据量很小的话,我直接存支付传送数据量很大的时间

我就可以通过压缩的存储这些数据而进行数据优化

第三个问题,我们就是我们的api, api实际上就是我们可以用shell

这种他的建筑提供了一个shell,可以也可以用,我们的config命令,都可以获取这些建制

你说对字符串的操作,我们有设置字符串

得到这个字符串还可以列表的操作我们有,就是在列表的两头进行

放一个数据或者取一个数据

对集合的操作有插入删除并交叉这种操作

对这个有序集合的操作,也是由我们对集合插入,删除并交叉的这些操作

都是可以通过这个程序操作的,hash表一样的,也是我们可以通过

字符串和字符串之间的映射,来进行对哈希表进行很多的操作

最后就是我们整个总结,我们整个的存储空间及群结构

以及我们这个数据库的应用是通过客户端做了

这个本节的学习就到这

数据库系统原理与开发课程列表:

第1章 数据库系统概论

-1.1 数据库及其系统概念

--1.1 数据库及其系统概念

-1.2 数据库技术发展

--1.2 数据库技术发展

-1.3 数据库应用系统

--1.3 数据库应用系统

-1.4 典型数据库管理系统

--1.4 典型数据库管理系统

-1.5 PostgreSQL对象-关系数据库系统软件

--1.5 PostgreSQL对象-关系数据库系统软件

-第1章 数据库系统概论--本章单元测试

-第1章 数据库系统概论--本章重点问题讨论

第2章 数据库关系模型

-2.1 关系及其相关概念

--2.1.1关系及其相关概念-1

--2.1.2关系及其相关概念-2

-2.2 关系模型原理

--2.2.1关系模型原理-1

--2.2.2关系模型原理-2

-2.3 PostgreSQL数据库关系操作实践

--2.3 PostgreSQL数据库关系操作实践

-第2章 数据库关系模型--本章单元测试

-第2章 数据库关系模型--本章重点问题讨论

第3章 数据库操作SQL语言

-3.1 SQL语言概述

--3.1 SQL语言概述

-3.2 数据定义SQL语句

--3.2.1数据定义SQL语句-1

--3.2.2数据定义SQL语句-2

--3.2.3数据定义SQL语句-3

-3.3 数据操纵SQL语句

--3.3 数据操纵SQL语句

-3.4 数据查询SQL语句

--3.4.1单表数据查询

--3.4.2 内置函数与分组统计

--3.4.3 多表关联查询

-3.5 数据控制SQL语句

--3.5 数据控制SQL语句

-3.6 视图SQL语句

--3.6 视图SQL语句

-3.7 PostgreSQL数据库SQL实践

--3.7 PostgreSQL数据库SQL实践

-第3章 数据库操作SQL语言--本章单元测试

-第3章 数据库操作SQL语言--本章重点问题讨论

第4章 数据库设计与实现

-4.1 数据库设计概述

--4.1 数据库设计概述

-4.2 E-R模型方法

--4.2.1 E-R模型方法-1

--4.2.2 E-R模型方法-2

-4.3 数据库建模设计

--4.3.1 数据库建模设计-1

--4.3.2 数据库建模设计-2

-4.4 数据库规范化设计

--4.4.1 数据库规范化设计-1

--4.4.2 数据库规范化设计-2

-4.5 数据库设计模型SQL实现

--4.5 数据库设计模型SQL实现

-4.6 基于Power Designer的数据库设计建模实践

--4.6 基于Power Designer的数据库设计建模实践

-第4章 数据库设计与实现--本章单元测试

-第4章 数据库设计与实现--本章重点问题讨论

第5章 数据库管理

-5.1 数据库管理概述

--5.1 数据库管理概述

-5.2 事务管理

--5.2 事务管理

-5.3 并发控制

--5.3.1 并发控制-1

--5.3.2 并发控制-2

-5.4 安全管理

--5.4.1 安全管理-1

--5.4.2 安全管理-2

-5.5 数据库备份与恢复

--5.5 数据库备份与恢复

-5.6 PostgreSQL数据库管理项目实践

--5.6 PostgreSQL数据库管理项目实践

-第5章 数据库管理--本章单元测试

-第5章 数据库管理--本章重点问题讨论

第6章 数据库应用编程

-6.1 数据库连接技术

--6.1.1 数据库连接技术-1

--6.1.2 数据库连接技术-2

-6.2 数据库存储过程

--6.2 数据库存储过程

-6.3 数据库触发器

--6.3 数据库触发器

-6.4 数据库游标

--6.4 数据库游标

-6.5 嵌入式SQL编程

--6.5 嵌入式SQL编程

-第6章 数据库应用编程--本章单元测试

-第6章 数据库应用编程--重点问题讨论

第7章 NoSQL数据库技术

-7.1 NoSQL数据库概述

--7.1.1 NoSQL数据库概述-1

--7.1.2 NoSQL数据库概述-2

--7.1.3 NoSQL数据库概述-3

-7.2 列存储数据库

--7.2.1列存储数据库-1

--7.2.2列存储数据库-2

-7.3 键值对数据库

--7.3.1 键值对数据库-1

--7.3.2 键值对数据库-2

--7.3.3 键值对数据库-3

-7.4 文档型数据库

--7.4.1文档型数据库-1

--7.4.2文档型数据库-2

--7.4.3文档型数据库-3

-7.5 图形数据库

--7.5.1图形数据库-1

--7.5.2图形数据库-2

--7.5.3 图形数据库-3

-7.6 HBase数据库项目实践

--7.6 HBase数据库项目实践

-第7章 NoSQL数据库技术--本章单元测试

-第7章 NoSQL数据库技术--本章重点问题讨论

期末考试

-期末测试--期末测试

7.3.3 键值对数据库-3笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。