MongoDB入门实战教程(1)
对于后端开发工程师,NoSQL是一个需要掌握的技术点,而NoSQL中比较火热的技术当属MongoDB。欢迎入门MongoDB,进入无模式的文档数据库世界。
1 关于MongoDB
通过下面几个问题,我们来快速地认识一下MongoDB吧。

什么是MongoDB?
一个以JSON为数据模型的文档数据库。
为什么叫文档数据库?
这里的文档来自于“JSON Document”,而不是我们一般理解的PDF、WORD等文档。
是谁开发的MongoDB?
一个名叫 MongoDB Inc 的科技公司,总部在美国纽约。
MongoDB的主要用途是什么?
应用数据库,类似于MySQL、Oracle、MSSQL等。
海量数据处理,数据平台等。
MongoDB的主要特点是什么?
建模不再是必选,而是可选;
JSON数据模型比较适合开发者快速迭代;
横向扩展可以支撑很大的数据量和并发量;
MongoDB是免费的么?
MongoDB有两个发布版本:社区版 和 企业版;
社区版是基于SSPL协议,这是一种和AGPL协议类似的开源协议,对于云厂商封装云产品有一定限制,其他场景均无限制,免费使用;
企业版则是基于商业协议,需要付费使用;
MongoDB各版本有什么变迁?
一图胜前言:

值得一提的是,4.x 版本开始支持事务了。
MongoDB和关系型DB有什么异同点?
一表胜前言:

对于基本概念术语,MongoDB与关系型数据库的区别如下表:

可以看到,在MongoDB中每一行被称做一个文档,这也是MongoDB被称为文档型数据库的最大特点。
2 MongoDB的特色和优势
特色:灵活的文档模型
在传统的关系型数据库中,我们往往需要建立错综复杂的关系模型。

而在MongoDB中,我们只需要简单快速的创建一个对象模型即可。

这个对象模型就是我们常说的JSON文档文档模型,它具有以下几个特性:
(1)数据库引擎只需要在一个存储区读写;
(2)反范式、无关联的组织极大优化查询速度;
(3)动态数据模式,支持应用开发快速迭代;
优势:原生的高可用和横向扩展能力
在传统的关系型数据库中,我们往往需要借助一些组件花费很多功夫才能做到高可用和横向扩展,而这些在MongoDB中就是与生俱来的,你不需要花费很多功夫就可以实现。
例如,可以直接借助MongoDB提供的复制集的能力实现高可用,最大可支持50个复制集,完全可以实现多中心的容灾能力。

此外,还可以直接借助MongoDB提供的分片集的能力实现横向扩展,我们要做的只是在需要的时候无缝扩展,它支持多种数据分布策略(Hash、范围等),可以较为轻松地支持TB到PB级的数据量。

3 快速安装MongoDB
MongoDB支持多种安装方式和多平台(Windows/Linux),还支持Docker部署。这里为了快速演示,我们来在Linux下安装一个适用于开发测试环境的MongoDB社区版实例。
此外,你也可以通过官方提供的云托管服务来创建一个免费的MongoDB集群用于学习,这也是一个快速学习MongoDB的方式,限制是免费集群的存储大小只有512MB。当然,你还可以通过Docker来部署一个MongoDB社区版实例,不过我的习惯一般是数据库类有状态服务的运行环境都不用Docker来部署,开发环境和测试环境可以考虑采用Docker来部署。
前置条件
一台Linux主机 或 虚拟机 或 云主机,建议 CentOS 7.x 版本。
配置好静态IP、关闭防火墙、主机名等基本操作,不再赘述。
下载安装包
从官网(https://www.mongodb.com/try/download/community)下载MongoDB 4.4.5的tgz包:

下载完成后将其拷贝到Linux中,这里我们暂且将其拷贝到 /usr/local/mongodb/source 目录下。
当然,你要先创建这个目录:
mkdir /usr/local/mongodb
mkdir /usr/local/mongodb/source
然后,进入 source 目录下解压,并将压缩后的所有文件移动到 /usr/local/mongodb 目录下
mv mongodb-linux-x86_64-rhel70-4.4.5 /usr/local/mongodb
准备Mongo目录与配置文件
首先,在 /usr/local/mongodb 目录下分别创建db目录 和 log目录:
mkdir /usr/local/mongodb/data/db
mkdir /usr/local/mongodb/logs/
mkdir /usr/local/mongodb/logs/mongodb.log
然后,创建最核心的mongo配置文件:
vi /usr/local/mongodb/mongodb.conf
配置文件内容如下:
systemLog:
destination: file
path: /usr/local/mongodb/logs/mongodb.log # log path
logAppend: true
storage:
dbPath: /usr/local/mongodb/data/db # data directory
net:
bindIp: 0.0.0.0
port: 27017 # port
processManagement:
fork: true
修改环境变量
执行以下命令修改环境变量:
export PATH=$PATH:/usr/local/mongodb/bin
source /etc/profile
验证一下:
mongo -version
设置开机启动项
首先,进入 /lib/systemd/system 目录下,执行以下命令:
cd /lib/systemd/system
cat >>mongodb.service<<"EOF"
在>提示下拷贝以下内容:
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target [Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf
PrivateTmp=true [Install]
WantedBy=multi-user.target
EOF
设置mongodb.service执行权限
chmod +x mongodb.service
设置mongodb.service开机自启动
systemctl enable mongodb.service
这时开机自启动配置完成,reboot一下验证看看。
试玩MongoDB
首先,执行以下命令进入Mongo Shell:
mongo
然后,执行以下命令可以看到目前已有的数据库:
show dbs

接下来,我们来创建一个 students 数据库并新增一个文档 用于把玩:
> use students
switched to db students
> db.records.insertOne({name:"Edison", gender:"Male"})
{
"acknowledged" : true,
"insertedId" : ObjectId("6092aa664e88a1d766523bc4")
}
> db.records.find().pretty()
{
"_id" : ObjectId("6092aa664e88a1d766523bc4"),
"name" : "Edison",
"gender" : "Male"
}
暂且先不用管这个语法,你只需要知道它向test数据库的students集合中新增了一行记录 并 通过find查询到了这一行记录 即可。
使用Compass客户端
MongoDB除了提供了shell命令供我们使用,还提供了一个免费的图形化客户端工具Compass。
下载地址:https://www.mongodb.com/products/compass
安装完成后,配置一下连接参数:

即可看到所有的数据库和集合了:

通过Compass查看刚刚把玩的students数据库:

当然,除了Compass之外呢,可以选择的可视化工具还有Robo 3T 以及 Navicat,如果你已经安装了Navicat,那就直接使用Navicat连接也是一个不错的选择。
OK,到此试玩结束。
4 总结
本文总结了MongoDB的基本概念、文档模型 及 技术优势,并介绍了如何在Linux下快速部署安装一个MongoDB实例 以及 使用Compass客户端工具连接MongoDB。
下一篇,我们会学习如何在Linux下安装部署一个三节点MongoDB的高可用复制集集群,有兴趣的童鞋可以继续关注。
参考资料
唐建法,《MongoDB高手课》(极客时间)
郭远威,《MongoDB实战指南》(图书)

△推荐订阅学习

MongoDB入门实战教程(1)的更多相关文章
- Kafka入门实战教程(7):Kafka Streams
1 关于流处理 流处理平台(Streaming Systems)是处理无限数据集(Unbounded Dataset)的数据处理引擎,而流处理是与批处理(Batch Processing)相对应的.所 ...
- ZooKeeper入门实战教程(一)-介绍与核心概念
1.ZooKeeper介绍与核心概念1.1 简介ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务.在学习zookeeper之前,先要对分布式系统的概念有所了解,否则你将完全不知道 ...
- Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程(一)--MongoDB入门
前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建
前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...
- MongoDB入门必读(概念与实战并重)
MongoDB入门必读(概念与实战并重) 一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目.由C++语言编写.旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个 ...
- mybatis实战教程(mybatis in action),mybatis入门到精通
转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过hibernate了那这个就非常的简单) (再加 ...
- mybatis实战教程(mybatis in action),mybatis入门到精通(转)
转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加 ...
- mongodb入门教程二
title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...
- mongodb入门教程
title: mongodb入门教程 date: 2016-04-06 14:47:18 tags: --- 为什么要认识呢,因为这玩意就一傻逼 借用一下百科的介绍 MongoDB 是一个介于关系数据 ...
- MongoDb 入门教程
MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数据存储解决方案,经常被用于非关系型数据的存储,能存储海量的数据. 常 ...
随机推荐
- 【Linux】5.8 Shell流程控制
Shell 流程控制 1. 判断语句 1.1 if判断 if else-if else 语法格式: if condition1 then command1 elif condition2 then c ...
- 【安卓】使用Handler出现的警告
使用Handler出现的警告 零.原由 安卓中使用Hander时出现了如下警告: This Handler class should be static or leaks might occur (a ...
- 创建windows脚本bat/cmd或jar为windows服务完整教程
一.将windows bat/cmd脚本创建为windows服务 1.下载winsw工具 https://gitee.com/colinisg/winsw/releases/download/v2 ...
- Asp.net mvc基础(十一)数据验证
1.获取验证失败错误 asp.net mvc会自动根据属性的类型进行基本的校验,但Asp.net mvc并不是在请求验证失败的时候抛异常,而是把决定权交给开发人员,开发人员需要决定如何处理数据校验失败 ...
- 1779. 找到最近的有相同 X 或 Y 坐标的点
1779. 找到最近的有相同 X 或 Y 坐标的点 class Solution { public int nearestValidPoint(int x, int y, int[][] points ...
- Java编程之面向对象
一.面向对象 1.定义 (1)类:描述的是具有共性的一类事物 (2)对象:一个个具备了类的特点和功能的个体 (3)面向对象:要完成某件事,首先要先有对象,然后直接调用这个对象的响应功能 2.成员变量: ...
- [flask]自定义请求日志
前言 flask默认会在控制台输出非结构化的请求日志,如果要输出json格式的日志,并且要把请求日志写到单独的文件中,可以通过先禁用默认请求日志,然后在钩子函数中自行记录请求的方式来实现. 定义日志器 ...
- 通过SpringBoot配置文件配置Druid数据源
目录 引入坐标依赖 配置application.properties文件 新建一个controller观察使用的是哪一个数据源 在SpringBoot 1.X 中,spring-boot-starte ...
- 活动箭线的"总时差和专用时差"
总时差:后大 - 前小 - 作业时间 专用时差:后小 - 前大 - 作业时间
- SQL 日常练习 (十八)
也没啥, 就是入坑 sql 根本停不下来, 势必要达到所谓 "精通" 的地步. 从网上的例子也快搬运完了, 而工作中的 sql 又是万万不能外泄了. 因此想着, 该去哪里搬砖呢, ...
