本文最后更新于 696 天前,其中的信息可能已经有所发展或是发生改变。
在和舍友交流之后才发现拿 JSONB 存储历史价格信息的我可能是个天才吧......
回去检查了一下 PostgreSQL 中的对应字段,果然达到了 65535 字节的最大限制,赶紧着手迁移数据。
选 MongoDB 最主要的原因是它的一个集合(与 PostgreSQL 中的表同概念)可以被当作一个队列,无限制的插入 JSON 格式的数据,放下图方便理解:

这对存储未知长度的历史价格数据真的很友好,并且根据日期建立索引后,查询的速度也会很快。
话不多说开始安装,官方文档:Install MongoDB Community Edition on Red Hat or CentOS
1、配置 repo 仓库为 Yum 安装提供源
创建 mongodb-org-5.0.repo:
vi /etc/yum.repos.d/mongodb-org-5.0.repo
内容:
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
2、使用 Yum 进行安装
执行:
sudo yum install -y mongodb-org
安装完成会输出如下信息:

你也可以使用以下命令验证是否安装成功:
rpm -qa |grep mongodb rpm -ql mongodb-org-server
3、启动 MongoDB
启动:
systemctl start mongod.service
看下数据库进程是否启动成功了:
ps -ef|grep mongod
4、配置管理员密码
进入数据库中:
# 进入数据库中
mongo
修改 root 用户的密码:
# 切换到 admin 数据库中
> use admin
switched to db admin
> db.createUser({user:"root", pwd:"mypassword", roles:["root"] })
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
编辑 mongodb.conf 使登录需要验证身份:
vi /etc/mongod.conf
修改如下内容:
...
...
# 解除注释
security:
# 新增这一行
authorization: "enabled" # disable or enabled
...
...
重启下数据库:
sudo service mongod restart
如果你想验证是否已经开启了密码验证,首先 mongo 进入数据库,接着:
# 切换到 admin 数据库 > use admin switched to db admin # 新建 test_collection 集合 > db.createCollection("test_collection") # 因为没有认证所以失败 { "ok" : 0, "errmsg" : "command create requires authentication", "code" : 13, "codeName" : "Unauthorized" } # 登录 > db.auth("root", "mypassword") 1 > db.createCollection("test_collection") # 这次创建 test_collection 集合就成功了 { "ok" : 1 }
关于 MongoDB 详细的权限管理可以参考我的这篇文章:MongoDB 学习笔记(三) MongoDB 权限管理及实践
5、配置远程访问
编辑配置文件:
vi /etc/mongod.conf
默认 bindIp 为 127.0.0.1,即只允许本地连接,修改为 0.0.0.0 即可:
...
...
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
...
...
之后重启数据库:
sudo service mongod restart
别忘了开发防火墙和云服务器厂商安全组。
远程连接方法:
mongo $mongodb_host:27017/$database -u $username -p $password
本章结束。