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 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的高性能数据存储解决方案,经常被用于非关系型数据的存储,能存储海量的数据. 常 ...
随机推荐
- 【EasyPR】Linux安装使用EasyPR开源车牌识别系统
[EasyPR]Linux安装使用EasyPR开源车牌识别系统 零.安装OpenCV - 3.2.0 我使用的是Kali系统,基于Debian的一个Linux发行版本. 1.配置系统的软件源(配置正确 ...
- 新装的 MySQL 不允许远程连接
新装的 MySQL 通常会出现这样的情况:无法远程连接,但是本地连接是正常的. 问题原因 新装的 MySQL 通常默认的用户是 root, 而为了安全起见, root 用户是不允许远程连接. mysq ...
- Linux权限之基础权限
介绍 Linux是多用户的操作系统,允许多个用户同时登录和工作,Linux权限是操作系统用来限制不同用户对资源的访问机制.这里暂且将Linux的权限分为三类: 基本权限:给文件和目录的所属者.所属组. ...
- zk基础—1.一致性原理和算法
大纲 1.分布式系统特点 2.分布式系统的理论 3.两阶段提交Two-Phase Commit(2PC) 4.三阶段提交Three-Phase Commit(3PC) 5.Paxos岛的故事来对应Zo ...
- CSharp_core
C#核心篇 面向对象的概念 封装(类).继承,多态 类 基本概念 具有相同特征.相同行为.一类事物的抽象 类是对象的模板,可以通过类创建出对象 关键词class 类的申明 申明在nameplace语句 ...
- System.nanoTime() 方法
System.nanoTime() 方法 JDK1.5之后java中的计时给出了更精确的方法:System.nanoTime(),输出的精度是纳秒级别,这个给一些性能测试提供了更准确的参考. 注:1 ...
- Axure RP仿网易游戏装备饰品APP平台保真交互原型rp源文件
Axure RP仿网易游戏装备饰品APP平台保真交互原型rp源文件包含以下几个模块: 1.登录和完善信息:绑定steam.获取交易链接.公开设置 2.首页部分:热门关注.数据.热门关注.数据榜.特殊磨 ...
- Python 潮流周刊#102:微软裁员 Faster CPython 团队(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- AutoCAD AutoLISP 中使用 entmake 创建标注样式(DIMSTYLE)的深度解析
前言 在 AutoCAD 二次开发中,entmake 函数相比 command 命令具有三大核心优势: 高效性:直接操作图形数据库,避免交互式命令延迟 稳定性:消除命令行参数解析导致的不可控错误 精确 ...
- 新纪元:"老"新人
博客园注册很久了,但从未发布过内容.终于开通博客,记录自己,也支持博客园! 另外,这次苹果秋季发布会真的好无聊!︎