如何更全面的认识 MongoDB ?
MongoDB 是一个非关系型数据库(NoSQL)。它拥有很多优秀特性,例如高性能、高可用、支持丰富的查询语句、无需预定义数据模型和水平可伸缩等,这些特性使它受到众多开发者的青睐。
内容提要:在认识 MongoDB 之前,我们需要了解一些非关系型数据库的概念,这有助于我们更全面的认识 MongoDB。接着学习 MongoBD 的安装、交互式接口的使用和 MongoDB 的数据类型。
初识 NoSQL
NoSQL 泛指非关系型数据库,该词是关系型数据库(即 SQL)的相对称呼。我们常用的关系型数据库无法满足 WEB2.0 时代的需求,在实际应用中暴露了很多难以克服的问题。NoSQL 的产生就是为了解决例如海量数据的存储、弹性可伸缩和灵活性等方面的挑战。
NoSQL 的分类
NoSQL 数据库数量很多,但可以划分为如下图所示的 4 大类:
每种类型都有一个我们熟知的数据库代表,例如文档型存储数据库的代表就是 MongoDB。以下列出不同类型数据库的适用场景和数据库代表:
键值存储数据库:查询速度快,非常适合业务关系简单的场景。数据库代表——Redis;
列存储数据库:数据以列簇形式存储,通常用来应对分布式存储的海量数据,数据库代表——HBase;
文档型存储数据库:适合存储结构化、半结构化的文档和特定格式的文档。数据库代表——MongoDB;
- 图形数据库:它使用灵活的图形模型,适合推荐系统、社交网络。数据库代表——Neo4J。
NoSQL 的范围和定义
NoSQL 数据库并没有明确的范围和定义,但它们都存在以下特征:
不需要预定义模式:不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。
无共享架构:相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。
弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。
分区:相对于将数据存放于同一个节点,NoSQL 数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。
异步复制:和 RAID 存储系统不同的是,NoSQL 中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。
BASE:相对于事务严格的ACID特性,NoSQL 数据库保证的是BASE特性。BASE是最终一致性和软事务。
归纳:NoSQL 适用于数据模型较简单、无高度的数据一致性需求,但要求高性能和灵活性的情况。
安装 MongoDB
MongoDB 官网有详细的安装指引,我们只需要根据指引进行操作即可。这里以 Ubuntu 18.04 TLS 系统和 macOS 系统为例,演示如何在系统中安装 MongoDB。
在 Ubuntu 18.04 TLS 中安装 MongoDB
安装共有 5 个步骤:导入公钥,创建列表,更新库列表,安装,验证。
Ubuntu 软件包管理工具要求使用 GPG 密钥签署软件包,以确保软件包一致性和真实性,所以我们在安装前必须导入 MongoDB 的 GPG 密钥。在终端输入以下命令:
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
命令执行后,终端输出内容如下:
gpg: 密钥 68818C72E525xxxx:公钥“MongoDB 4.0 Release Signing Key <packaging@mongodb.com>”已导入gpg: 合计被处理的数量:1gpg: 已导入:1
这说明密钥添加成功。接着为 MongoDB 创建列表文件。在终端输入以下命令:
$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
然后更新库列表,对应命令如下:
$ sudo apt-get update
待列表更新完毕后,就可以执行 MongoDB 的安装命令了。对应命令如下:
$ sudo apt-get install -y mongodb-org
命令执行后,终端输出内容如下:
完成。正在添加用户"mongodb"到"mongodb"组...正在将用户“mongodb”加入到“mongodb”组中完成。正在设置 mongodb-org (4.0.10) ...
这代表 MongoDB 已成功安装。要注意的是,`apt-get` 命令会在新版本可用时升级软件包。为防止意外升级,我们可以将软件包固定在当前安装的版本上。对应命令如下:
$ echo "mongodb-org hold" | sudo dpkg --set-selections$ echo "mongodb-org-server hold" | sudo dpkg --set-selections$ echo "mongodb-org-shell hold" | sudo dpkg --set-selections$ echo "mongodb-org-mongos hold" | sudo dpkg --set-selections$ echo "mongodb-org-tools hold" | sudo dpkg --set-selections
最后,使用 --version
验证 MongoDB 是否安装成功。验证命令如下:
$ mongo --version
命令执行后,终端输出内容如下:
MongoDB shell version v4.0.10git version: c389e7f69f637f7a1ac3cc9fae843b635f20b766OpenSSL version: OpenSSL 1.1.0g 2 Nov 2017allocator: tcmallocmodules: nonebuild environment: distmod: ubuntu1804 distarch: x86_64 target_arch: x86_64
这说明 MongoDB 已成功安装。MongoDB 安装完成后并未自动启动,启动命令如下:
$ sudo systemctl start mongod
命令执行后,如无报错信息即视为启动成功。当然,我们也可以为它设置开机启动。对应命令如下:
$ sudo systemctl enable mongod
以上就是在 Ubuntu 18.04 TLS 系统中安装 MongoDB 的过程。
在 macOS 中安装 MongoDB
在 macOS 中,我们通常使用 Homebrew 安装应用,因此我们在安装 MongoDB 前必须先安装 Homebrew。Homebrew 官方网址为:https://brew.sh/,我们按照其指引进行安装即可。在终端执行以下命令:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
命令执行后,系统就会自动安装 Homebrew。接着我们就可以使用 `brew install name` 这样的命令安装其他应用了。首先,我们将 MongoDB 的包添加到 Homebrew,对应命令如下:
$ brew tap mongodb / brew
接着执行安装命令:
$ brew install mongodb-community
命令执行后,就会在系统中安装 MongoDB。安装后会创建对应的文件,例如:
配置文件,路径为:
/usr/local/etc/mongod.conf
;
日志目录,路径为:
/usr/local/var/log/mongodb
;数据目录,路径为:
/usr/local/var/mongodb
;
MongoDB 安装完成后通常会自己启动,或者我们可以输入命令启动它。例如前台运行(进程方式)的命令如下:
$ mongod --config /usr/local/etc/mongod.conf
或者作为服务启动,对应命令如下:
$ brew services start mongodb-community
安装完后,我们就该:
认识 MongoDB
交互式接口 MongoShell的使用
MongoDB 数据类型
- 数据库和集合的 CRUD 操作
由于篇幅有限,文章内容还特别夯实感兴趣的同学可以扫描二维码阅读完整文章▼
细心的读者可能已经发现了,本篇并没有介绍数据库重命名的方法。这是因为 MongoDB 并未提供直接为数据库改名的方法,虽然可以使用 `db.copyDatabase()` 方法复制数据库,然后删除原数据库这种方式,但这在实际应用中是不可取的。你可以想象,拷贝一个庞大的数据库所耗费的时间和资源。接下来我还会继续撰写流式聚合操作,并深入了解语句的执行效率。
在效率提升方面,数据模型也是必须要了解的知识。然后我们将深入学习能够提高数据服务可用性的复制集。接着,我们将了解 MongoDB 的水平扩展能力。最后,我们将了解 MongoDB 数据的备份与还原,并为数据服务开启访问控制。
感兴趣的同学还可以加入 MongoDB 交流群哦~
扫描二维码发送暗号「db」即可
(如若添加不上的话,可以直接搜索微信号「huacode」)
点击阅读原文,订阅本场 Chat 。
如何更全面的认识 MongoDB ?相关推荐
- MongoDB分布式原理以及read-preference和readConcern解决读写一致性问题
MongoDB词汇表: https://docs.mongodb.com/manual/reference/glossary/#term-replica-set MongoDB分布式原理 primar ...
- mongodb不等于某个值_MongoDb进阶实践之四 MongoDB查询命令详述
一.引言 上一篇文章我们已经介绍了MongoDB数据库的最基本操作,包括数据库的创建.使用和删除数据库,文档的操作也涉及到了文档的创建.删除.更新和查询,当然也包括集合的创建.重命名和删除.有了这些基 ...
- mysql和mongodb配合_MongoDB和Mysql怎样结合
二者结构有何不同? SQL中的许多概念都与MongoDB的文档结构相关.让我们来看一个简单的MongoDB环境结构,以更好地了解MongoDB的布局. 下面的图表涉及MySQL与MongoDB的不同点 ...
- MongoDB 3.0新增特性一览
引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoDB 3.0于2015年3月3日正式发布.可以毫不夸张的说,该版本的新增特性标志着MongoDB这款典型的NoSQ ...
- MongoDB与Cassandra的比较
我正在评估什么是最好的迁移选项. 目前,我在分片的MySQL(水平分区)上,我的大部分数据存储在JSON Blob中. 我没有任何复杂的SQL查询(自从对数据库进行分区以来,已经迁移了). 现在,似乎 ...
- MongoDB【最新版V2.6】- 发行说明
2019独角兽企业重金招聘Python工程师标准>>> 开发团队表示,MongoDB 2.6是迄今为止改进最大的版本,全面增强了核心服务器,引入了新的开创性的自动化工具.重要的企业特 ...
- MongoDB空间分配
2019独角兽企业重金招聘Python工程师标准>>> Mongodb占据的磁盘空间比MySQL大得多,可以理解文档数据如Json这种格式,存在许多冗余数据,但空间占用大得不正常,甚 ...
- MongoDB 基础用法及学习笔记
MongoDB 基础用法 环境配置与安装 安装 查看MongoDB版本 启动MongoDB服务 检查服务状态 启动服务 打开配置文件,连接MongoDB 查看数据列表 退出 MongoDB 连接 Mo ...
- MongoDB 杭州用户会全记录(千寻位置、妈妈帮、阿里云专家等精彩分享)
MongoDB杭州用户交流会于2017年3月12日下午在阿里巴巴西溪园区举行,吸引了来自全国各地的近300名用户参与,千寻位置.妈妈帮.阿里云等公司的5位技术专家分享了MongoDB 的运维管理及使用 ...
最新文章
- 自动调度GPU的卷积层
- 元素的 is_enable()、is_displayed()和is_selected()
- 在 Ubuntu Linux 下搜索文件和文件内容
- mysql执行计划字段解析_MySQL执行计划解析
- 数学之美系列12(转帖)
- CImageList类Create函数参数解析
- PullToRefresh
- 中国抗生素骨水泥行业市场供需与战略研究报告
- vb简单控制音量大小及静音的方法
- .NetCore源码阅读笔记系列之Security (四) Authentication AddJwtBearer
- win10未检测到任何音频设备解决办法
- C语言如何作用于unity,在Unity 3D中使用C进行车轮转向#
- java 英文翻译工具类
- 电脑如何打开软键盘,教大家Win10如何打开软键盘的方法
- 我为什么花 1 万多买 MacBook Pro,重点是推荐我常用的开发写作相关的工具
- Synchronized详细介绍之锁升级过程
- C.Defuse the Bombs(简单二分)
- 最简单的Ogre系列之二——画线
- gVim编辑器——基本设置、常用命令、代码片段
- Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
热门文章
- 连续特征离散化--汇总
- [论文阅读] iCaRL: Incremental Classifier and Representation Learning
- distinct去重多个字段_sql中去重是distinct还是group by?
- demo:flask进行模型部署 | ros接收点云流 | Web接收三路视频流及局部刷新——>显示效果展示
- html 中写注释吗,html怎么注释?
- ubuntu更新显卡驱动到460.84,升级cuda版本到11.2
- 【QT】QT从零入门教程(十二):实现工具箱QButtonGroup
- Tensorflow卷积神经网络识别MINST手写数字
- 在c语言程序中可把整型数,C语言程序设计(2).doc
- 即学即会 Serverless | 初识 Serverless 架构