实验 6 - NoSQL 数据库练习¶
概述¶
本次实验中,我们需要搭建起两个热门的 NoSQL 数据库环境并进行一些基本操作:
我们在实验 1的基础上,在 namenode 机器上完成 Redis 和 MongoDB 的搭建。
不一定要在 namenode 跑
我们只是在本次实验中,借助之前已经安装好的 Ubuntu 环境而已。你可以在 datanode1,
datanode2 上,甚至全新安装一个 Linux 系统来完成本次实验。除了 Linux 以外,你还可以在以下环境或系统中运行 Redis/MongoDB:
- Arch Linux
- Debian
- Fedora
- RHEL
- 其他发行版的 Linux 设备
- Windows (native)
- Windows Subsystem for Linux (WSL)
- Windows Subsystem for Android + Termux + proot (why not!)
- macOS (Intel & Apple Silicon)
- Android (Termux & proot)
那么,我们开始吧。
安装 Redis¶
Redis 的安装相对简单明了一些,我们先把它搞定。
- 使用
super身份登录到虚拟机,你可以使用 SSH(推荐)或者直接在虚拟机界面和虚拟机交互 - 更新 APT 数据库
- 使用包管理器安装 Redis:
- 修改 Redis 配置:
- 寻找到
bind 127.0.0.1 ::1字样,在行首添加#,将其注释掉 - 向下寻找
protected-mode yes,修改为protected-mode no - 保存
这是不安全的配置!
我们到底在 Redis 配置文件里修改了什么?我们将 Redis 服务的监听主机改为了所有可达的 IP 地址,并且关闭了保护模式,允许无密码访问。这样的配置是不安全的。不可在实际生产环境使用。否则会产生极大的安全隐患,并可能导致生产事故。建议在虚拟化软件中将网络适配器设置为 NAT 模式,阻止将虚拟机直接暴露在外部网络,以防被第三方扫描到、访问或攻击。
如果配置正确,应该长得像这样:
接下来我们来启动 Redis:
以上命令将 Redis 设置为开机启动,并启动 Redis 服务器。
通过这样的安装方法,我们不需要自己编译 Redis,不需要保持登录,不需要手动启动 Redis 服务,同时符合由 systemd 管理系统服务的标准操作。
如果你想确认 Redis 启动成功,可以执行 sudo systemctl status redis-server 来查看运行状态。
安装 MongoDB¶
MongoDB 的安装比 Redis 更复杂一些,一部分原因是 MongoDB 的发行模式和微软臭味相投:自行维护软件库,而不是同步到各大发行版的软件包库中。
小修复¶
修正 Ubuntu 22 废弃 libssl1.1 的问题:
echo "deb http://mirrors.ustc.edu.cn/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
sudo apt update
sudo apt install -y libssl1.1
怪谁呢?
MongoDB 官方并没有 Ubuntu 22 支持。所以我们只能强制从 Ubuntu 20 获取 libssl1.1 包,具体是否有安全性问题仍然有待商榷。不建议在生产环境使用。
安装 MongoDB¶
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
修改 MongoDB 配置文件¶
- 修改 MongoDB 配置文件:
- 找到
bindIp字段,修改为0.0.0.0 - 保存退出
这还是不安全的!
由于受到虚拟机 NAT 的保护,我们可以在本次实验中这么配置,但务必不可在生产环境中如此配置服务器。
启动 MongoDB¶
类似 Redis:
如果你想确认 MongoDB 启动成功,可以执行 sudo systemctl status mongod 来查看运行状态。
使用 Redis CLI¶
运行 redis-cli 来进入 Redis CLI.
- 用 Redis 的 hash 结构设计出学生表
Student1: - 用
hgetall命令分别输出zhangsan和lisi的成绩信息: - 用
hget命令查询zhangsan的Computer成绩: - 修改
lisi的Math成绩,改为95:
使用 exit 命令退出。
使用 Mongosh¶
运行 mongosh 来进入 Mongo Shell.
- 用 MongoDB Shell 设计出
student集合: - 用
find()函数输出两个学生的信息: - 用
find()函数查询zhangsan的所有成绩(只显示score列) - 修改
lisi的Math成绩为95
使用 exit 命令退出。
使用 Java API¶
不要直接运行!
在下载源码后,请修改 src/main/org/example/Main.java 中的 jobActions 定义,设置为正确的 Redis/MongoDB 服务器地址。
不需要在虚拟机运行
本实验中的 Java 程序可以在本机运行,不需要打包为 jar 后放置在服务器上运行。甚至不需要服务器有 Java 环境。
本实验项目主要供参考,不需要进行太多的代码补全,请 下载示例源码运行。
-
这么写的原因是 Redis CLI 不接受多行输入……方便逐条复制粘贴操作 ↩





