MongoDB在执行写操作时,WiredTiger存储引擎会在文档级别进行并发控制。换句话说在同一时间点上,多个写操作能够修改同一个集合中的不同文档;而当多个写操作修改同一个文档时,必须以序列化方式执行。这意味着如果当前文档正在被修改,其他写操作必须等待该文档上的写操作完成之后才能进行修改。对于大部分的文档读写操作,WiredTiger引擎使用的都是乐观锁;而在数据库和集合级别,WiredTig
数据是MongoDB的核心,MongoDB通过使用Journal日志保证数据的安全。Journal日志用于记录上一个检查点之后发生的数据更新,并将更新的信息顺序写入Journal日志文件中。通过使用Journal日志能够将数据库从系统异常终止事件中还原到一个有效的状态。通过6.5.1.3小节的介绍了解到,MongoDB使用预写日志机制实现数据的持久化。每个Journal日志文件的大小是100M,
MongoDB的逻辑存储结构是一种层次结构,主要包括了三个部分,即:数据库(Database)、集合(Collection,也可以叫做表)和文档(Document,也可以叫做记录)。MongoDB的逻辑存储结构是面向用户使用的,使用mongoshell或者应用程序操作MongoDB时,主要就是操作的MongoDB逻辑存储结构。
点击这里查看视频讲解:【赵渝强老师】:MongoDB
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出会造成服务器中的数据库状态也会消失。所以 Redis 提供了数据持久化功能。Redis支持两种方式的持久化,一种是RDB方式;另一种是AOF(append-only-file)方式。两种持久化方式可以单独使用,也可以将这两种方式结合使用。
点击这里查看视频讲解:【赵渝强老师】:Redis的数据持
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出会造成服务器中的数据库状态也会消失。所以 Redis 提供了数据持久化功能。Redis支持两种方式的持久化,一种是RDB方式;另一种是AOF(append-only-file)方式。两种持久化方式可以单独使用,也可以将这两种方式结合使用。
点击这里查看视频讲解:【赵渝强老师】:Redis的数据持
Memcached是一个高性能的分布式的内存对象缓存系统。通过使用Memcached可以支持高负载的网站系统,以分担数据库的压力。Memcached通过在内存里维护一个统一的巨大的Hash表来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。但是Memcached不能将数据进行持久化,因此严格意义来说,Memcached只能叫做一个缓存技术,而不能叫做数据库。
点击
Memcached是一个高性能的分布式的内存对象缓存系统。通过使用Memcached可以支持高负载的网站系统,以分担数据库的压力。Memcached通过在内存里维护一个统一的巨大的Hash表来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。但是Memcached不能将数据进行持久化,因此严格意义来说,Memcached只能叫做一个缓存技术,而不能叫做数据库。
点击
WiredTiger提供文档级别(Document-Level)的并发控制,检查点(CheckPoint),数据压缩和本地数据加密( Native Encryption)等功能。从MongoDB 3.2 版本开始,WiredTiger成为MongDB默认的Storage Engine。
点击这里查看视频讲解:【赵渝强老师】:MongoDB的WiredTiger存储引擎
MongoDB的In-Memory存储引擎将会把数据存储在内存中。除了少量的元数据和诊断日志以外,In-Memory存储引擎不会维护任何存储在硬盘上的数据,从而避免硬盘的读写操作,以减少数据查询的延迟,从而提高性能。
提示:虽然In-Memory存储引擎不会向文件系统写入数据,但是它任然需要使用--dbpath参数指定一个目录用于存储少量的元数据和诊断日志。通过指定参数--inMemory
在MongoDB 3.2版本以前,MongoDB使用MMAPv1作为默认的存储引擎。在MMAPv1的存储引擎中,包含以下的组成部分:
Database
每个Database由一个.ns名称空间文件及若干个数据文件组成。数据文件从0开始编号,依次为.0、.1、.2等。数据文件大小从64MB起,依次倍增,最大为2GB。
Namespace
每个Database可以包含多个Namespa
存储引擎(Storage Engine)是MongoDB的核心组件,它负责管理数据如何存储在硬盘(Disk)和内存(Memory)上。从MongoDB 3.2 版本开始,MongoDB支持多种类型的数据存储引擎。
点击这里查看视频讲解:【赵渝强老师】:MongoDB的存储引擎
从MongoDB的发展历史上看,支持以下三种存储引擎:
WiredTiger存储引擎
Wi
Redis使用的是客户端-服务器(C-S)模型和请求/响应协议的TCP服务器。这意味着通常情况下一个请求会遵循以下步骤:
第一步:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
第二步:服务端处理命令,并将结果返回给客户端。
点击这里查看视频讲解:【赵渝强老师】:Redis的管道Pipeline
Redis执行的过程如图
在了解到了MongoDB复制集的体系架构以后,下面将通过具体的步骤来演示如何搭建单个节点的MongoDB复制集环境。下表列举了MongoDB复制集的配置信息。
提示:上表在一台主机上通过监听不同的端口来搭建MongoDB复制集环境,也可以使用三台主机来搭建。
点击这里查看视频讲解:【赵渝强老师】:部署MongoDB复制集
下面是具体的搭建步骤:
(1)创建M
MongoDB的复制集中主要包括三个成员,即:主库、从库和仲裁者。一般情况下,MongoDB复制集集群中是一个主库和两个从库。数据库管理员也可以在复制集中添加一个MongoDB的实例,作为复制集的仲裁者。但仲裁者不是必须的。视频讲解如下:
点击这里查看视频讲解:【赵渝强老师】:MongoDB复制集中的成员
主库
在一个MongoDB复制集中,只能存在一个主库用于接收
MongoDB的复制就是数据文档在多个MongoDB服务器节点直接进行数据同步的过程。因此MongoDB的复制集是一种集群技术。
点击这里查看视频讲解:【赵渝强老师】:MongoDB复制集的体系架构
MongoDB复制集由一组MongoDB实例组成,其中包含一个Primary节点和多个Secondary节点,MongoDB 客户端的Driver通过使用Primary节
一般来说消息队列有两种场景,一种是发布者订阅者模式,而另一种是生产者消费者模式。这两种场景的消息队列Redis都能够实现。
该模式是利用了List能够实现队列(先进先出)和栈(先进后出)的特点。Redis List的主要操作为lpush/lpop/rpush/rpop四种,分别代表从头部和尾部的push/pop,除此之外List还提供了两种pop操作的阻塞版本blpop/brpop,
一般来说消息队列有两种场景,一种是发布者订阅者模式,而另一种是生产者消费者模式。这两种场景的消息队列Redis都能够实现。
发布者和订阅者通过channel频道进行解偶, 订阅者监听某个channel的消息,当发布者向该channel推送消息时,订阅该channel的消费者都可以收到消息。
点击这里查看视频讲解:【赵渝强老师】:Redis的消息发布与订阅
下
MongoDB是一个基于分布式文件存储的NoSQL数据库,它也是最像关系型数据库的NoSQL数据库。MongoDB官方提供了两个客户端工具:一个是命令行客户端工具mongoshell;另一个是图形化免费工具MongoDB Compass。
点击这里查看视频讲解:【赵渝强老师】:MongoDB的客户端工具
下面分别介绍。
一、命令行客户端工具 mongoshell
mo
Redis内部默认存在16个数据库,这是通过在redis.conf文件中的参数databases决定的。
# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT<dbid>
在学习HBase的体系架构之前,需要先了解一下HBase中的一些术语。这些术语如下表所示。
从体系架构的角度看,HBase是一种主从架构,包含:HBase HMaster、Regionserver和ZooKeeper。视频讲解如下:
点击这里查看视频讲解:【赵渝强老师】:HBase的体系架构
下图展示了这一架构。
其中:
HBase HMaste
在学习HBase的表结构之前,首先需要了解一下什么是Google的BigTable思想。BigTable大表的思想是Google的“第三驾马车”。正因为有了这样的思想就有了Hadoop生态圈体系中的NoSQL数据库HBase。
提示:NoSQL数据库泛指所有的非关系型数据库。NoSQL数据库有很多种,比如:Hadoop体系中的HBase;基于内存的Redis和基于文档的MongoDB。而N
MongoDB是一个基于BSON文档的NoSQL数据库,下面的步骤将在Linux的操作系统上安装和部署MongoDB。下表列举了所使用的版本信息。
点击这里查看视频讲解:【赵渝强老师】:MongoDB的安装与访问
下面是具体的操作步骤:
(1)安装MongoDB所需的依赖包。
yum install -y libcurl openssl xz-libs
(2)解
本文将基于Redis 6.2版本进行讲解,并将Redis部署在CentOS 7 64位的虚拟机环境中。下图展示了Redis官方网站提供的Redis下载信息。
提示:由于Redis基于C语言开发,因此在安装CentOS 7的时候需要安装GCC编译器。GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Ob
MongoDB是一个可移植的NoSQL数据库,它几乎可以运行在所有的操作系统之上,从而实现了跨平台性。尽管在不同的操作系统上虽然略有差别,但是从整体上来看,MongoDB在不同的操作系统平台上的体系架构(如数据逻辑结构和数据存储等等)都是一样的。一个运行着的MongoDB数据库就可以看成是一个MongoDB服务器,该服务器由MongoDB数据库实例和MongoDB数据库组成。在一般情况下,一
下图展示了引入缓存后系统的架构。通过使用缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。
点击这里查看视频讲解:【赵渝强老师】:基于Redis的旁路缓存架构
一般情况下数据存在数据库中,应用程序直接操作数据库。当应用程序访问量上万,数据库压力突然增大,如果需要减轻数据库服务器的压力,有以下方法:
数据库读写分离
数据库分库分表
使用缓存并实现读写
MySQL在备份方面包含了自身的mysqldump工具,但其只支持单线程工作,这就使得它无法迅速的备份数据。而mydumper作为一个实用工具,能够良好支持多线程工作,这使得它在处理速度方面十倍于传统的mysqldump。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起DML阻塞。但一般现在的MySQL都有主从,备份也大部分在从上进行,所以锁的问题可
MySQL可以使用select...into outfile语句将表的内容导出为一个文本文件。其基本的语法格式如下:
select [列名] from 表名 [WHERE 语句] into outfile '目标文件' [其他选项];
该语句分为两个部分。前半部分是一个普通的select语句,通过这个select语句来查询所需要的数据;后半部分是导出数据的。其中,“目标文件”参数指出将查询的记
mysqldump 是MySQL自带的逻辑备份工具。它的备份原理是通过协议连接到MySQL数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert语句,当我们需要还原这些数据时,只要执行这些insert语句,即可将对应的数据还原。下面语句可以列出mysqldump的帮助信息。
mysqldump --help
# 输出的信息如下:
mysqldump Ver 8.0.20
MySQL支持多种方式的备份与恢复,下面详细介绍了每种备份与恢复方式的含义以及它们之间的区别。
点击这里查看视频讲解:【赵渝强老师】:MySQL的备份方案
一、 物理备份与逻辑备份
数据库从存储上看主要由数据库的物理数据文件、日志文件及配置文件等组成。数据库的物理备份是指备份时直接复制备份这些数据库的文件。
数据库逻辑备份就是备份软件按照最初设计的逻辑关系,以数据库的逻辑结















