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 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数据存储解决方案,经常被用于非关系型数据的存储,能存储海量的数据. 常 ...
随机推荐
- study PostgreSQL【2-FireDAC连接PostgreSQL】
就这么个简单问题,一下午时间.想想就憋屈. 那么牛逼哄哄FireDAC居然连接PostgreSQL出问题了.帮助中说的啥意思,咱也不明白.网上一通也是云里雾里. 上干货,具体点: TFDConnect ...
- expected at least 1 bean which qualifies as autowire candidate
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'log ...
- Eclipse 安装---windows10环境下
Eclipse 安装---windows10环境下 一.下载 1.前往eclipse官网下载 https://www.eclipse.org/downloads/ 2.选择类型(压缩包) 3.选择版本 ...
- Java 的 CMS 垃圾回收流程
Java 的 CMS 垃圾回收流程 CMS(Concurrent Mark-Sweep)垃圾回收器 是一种并发垃圾回收器,旨在减少垃圾回收时的停顿时间,适用于对低延迟要求较高的应用.CMS 主要通过并 ...
- 什么条件会触发 Java 的 Young GC?
什么条件会触发 Java 的 Young GC? Young GC,即 新生代垃圾回收,是 Java 垃圾回收机制中的一种重要回收方式.它主要用于回收 新生代 中的对象,尤其是 Eden 区 和 Su ...
- C# Delegate 委托及事件
1.委托Delegate实质 由一个修饰符+ delegate,跟方法的定义比较类似,也需要声明参数和返回值.声明一个委托,就是声明一种方法签名(参数+返回值),只要是和声明委托方法签名相同的方法, ...
- 『Plotly实战指南』--在金融数据可视化中的应用(上)
在当今复杂多变的金融市场中,金融数据分析的重要性不言而喻. 无论是投资者.金融机构还是研究人员,都需要通过对海量金融数据的分析来洞察市场趋势.评估风险并做出明智的决策. 据彭博社统计,专业投资者平均需 ...
- CentOS 7怎么开放端口
转自:https://www.jb51.net/os/Ubuntu/617627.html 以开放8080端口为例,其他类似 centos7已经开始使用firewall作为防火墙,而不是iptable ...
- 【记录】BASE64|解决JS和C++中文传输乱码,内含两种语言的Base64编码解码的代码
JS 解决方法来源于知乎新码笔记的文章 function b64Encode(str) { return btoa(unescape(encodeURIComponent(str))); } func ...
- Lynx-字节跳动跨平台框架多端兼容Android, iOS, Web 原生渲染
介绍 字节跳动近期开源的跨平台框架Lynx被视为一项重要的技术创新.相较于市场上已有的解决方案如React Native (RN) 和Flutter,Lynx具有独特的特性. 首先,Lynx采用轻量级 ...
