开发者如何学好 MongoDB

做为一名研发,数据库是或多或少都会接触到的技术。 MongoDB 是当前火热的 NoSQL 之一,咱们怎样才能学好 MongoDB 呢?本篇文章,咱们将从如下几方面讨论这个话题:

  • MongoDB 是什么web

  • 我如何肯定我须要学习 MongoDB数据库

  • 开发者应该掌握 MongoDB 的哪些知识编程

  • 学习的选择和困境bash

咱们先来了解一下,MongoDB 为什么物。websocket

NoSQL 泛指非关系型数据库,该词是关系型数据库(即 SQL)的相对称呼。MongoDB 是非关系型数据库(NoSQL)中较为人熟知的一种。负载均衡

它拥有不少优秀特性,例如高性能、高可用、支持丰富的查询语句、无需预约义数据模型和水平可伸缩等,适合存储结构化、半结构化的文档和特定格式的文档,这些特性使它受到众多开发者的青睐。socket

咱们经过几个例子来看看 MySQL 与 MongoDB 的差别。编程语言

与 MySQL 数据库不一样的是,MongoDB 不须要预先定义表和字段,这正是它灵活性的体现。MongoDB 能够拥有多个数据库,每一个数据库能够拥有多个集合,每一个集合能够存储多份文档,这种关系与 SQL 数据库中的“数据库、表、数据”至关。下图描述了 MongoDB 中数据库、集合和文档的关系: 工具

数据库 fotoo 中有两个集合,它们分别是 player 和 books。每一个集合中都包含了许多文档,例如集合 books 中关于书籍《红楼梦》的文档,集合 player 中关于球员 James 的文档。性能

在查询方面,一个简单的 MySQL 查询语句为 SELECT * FROM tablename,对应的 MongoDB 查询语句为 db.tablename.find()。在面对多步骤的查询条件时,MongoDB 更游刃有余。例如:

“统计数据库 artic 中 score 大于 70 且小于 90 的文档数量”

这样的需求,用 MongoDB 的聚合操做就能够轻松完成,对应示例以下:

> db.artic.aggregate([
... {$match: {score: {$gt: 70, $lt: 90}}},
... {$group: {_id: null, number: {$sum: 1}}}
... ])
复制代码

这个例子或许简单了些,在 MySQL 中咱们能够用 count 和 where 完成,但若是复杂度再提升四五个等级呢?例如在此基础上增长对某个字段的运算、替换、排序、分组计数、增删字段,用 MySQL 来实现就会很头疼,而 MongoDB 的聚合可让咱们轻松地完成这类复杂需求。

我如何肯定我须要学习 MongoDB

MongoDB 是近些年涌现的几十种 NoSQL 中第一梯队的成员,另一个为人熟知的是 Redis。

你可能会有”我如何肯定我须要学习 MongoDB 呢?“ 这样的疑问,面对这个问题,咱们能够经过 MongoDB 的特色和应用场景着手:

  • MongoDB 适合存储结构肯定或不肯定的文档。例如爬虫爬取的信息常缺失字段的状况或字段良莠不齐的状况;

  • 对数据库可用性要求较高的状况。MySQL 这类数据库要作到负载均衡、自动容灾和数据同步须要借助外部工具,而 MongoDB 的复制集可让咱们轻松完成这一系列的工做。相对接借助第三方工具来讲,复制集的稳定性更高。

  • 分库分表是 WEB 开发中经常使用到的数据库优化手段,MySQL 的分库分表要考虑的问题很是多,例如字段冗余、数据组装跨节点分页、排序和数据迁移等,而 MongoDB 的分片可让咱们轻松完成“分库分表”的工做。MongoDB 的分片机制使咱们没必要将心思放在由“分库分表”带来的问题,而是专一于具体需求。

  • 一样的,MySQL 的权限控制、定义数据模型、数据库备份和恢复等功能在 MongoDB 上也有。

  • MongoDB 中支持地理位置的存储和查询,这意味着 MongoDB 能够用于共享单车、共享雨伞、汽车定位等业务中。

咱们经常使用的关系型数据库没法知足 WEB2.0 时代的需求,在实际应用中暴露了不少难以克服的问题。NoSQL 的产生就是为了解决例如海量数据的存储、弹性可伸缩和灵活性等方面的挑战,因此做为一名合格的开发者,应该抽空学习 SQL 之外的数据库知识。

开发者应该掌握 MongoDB 的哪些知识

学习前,咱们须要明白自身定位:专业 DBA 或者平常开发使用。

MongoDB 有完善的体系和对应的认证考试,对于但愿成为专业 DBA 的朋友我建议到 MongoDB 官方网站了解。

而对于仅须要知足平常开发需求的朋友,我建议学习的内容以下:

  • MongoDB 在各个平台的安装方法

  • MongoDB 数据库和集合的基本操做

  • MongoDB 文档 CRUD 操做,包括可以丰富 CRUD 的投影和修饰符等

  • MongoDB 流式聚合操做,这可以在数据库层面轻松完成复杂数据的处理,而不是用编程语言来处理

  • MongoDB 的数据模型,虽然 MongoDB 能够存储不规则的文档,但有些状况下定义数据模型能够提升查询效率

下图描述了一种聚合操做的完整过程:

固然,除了这些基本操做以外咱们还能够学习更多的知识提升我的竞争力,这些知识是:

  • MongoDB 执行计划和索引,执行计划可让咱们清楚的了解到查询语句的效率,而索引则是优化查询效率的经常使用手段

  • MongoDB 的复制集,这是提升 MongoDB 可用性,保证数据服务不停机的最佳手段

  • MongoDB 的分片,分片可以在数据量变得庞大以后保证效率

  • MongoDB 的事物,若是你将 MongoDB 用于 WEB 网站,那么事物是你必须学习的知识

  • MongoDB 数据库备份和还原,有了复制集后,备份就显得不是那么重要了,但并非没有这个需求。并且 MongoDB 的备份能够精细到文档,这就很是有意义了。

学习的选择和困境

有必定工做经验的开发者,大多数状况下都会选择自学。有些在网上搜索对应的文章,有些则直接翻阅官方文档。

我推荐的方式是翻阅官方文档,在遇到难以理解的观点时经过搜索引擎查找网友分享的文章。

自学的优势不少,缺点也很明显。例如:

  • 断断续续的学习,难以保持专一致使知识吸取很差

  • 耗费时间很长,虽然知道应该学习哪些方面的知识,但文档并非按你所想而规划的,因此翻阅文档要费不少功夫

  • 知识不成体系,东看看西看看,没有概括容易忘记

  • 学习就须要记笔记,这又是一件很费时间的事情

  • 官方文档有些观点难以理解,卡在半路很难受

  • 零星学了一两个月,也不肯定学会了没有,心里毫无把握

若是不自学,就得找一些成体系的教程来帮助本身快速进步,少走弯路。知识付费时代,在条件容许的状况下适当地投入也是很好的选择。

但面对动辄几百的费用,很多开发者仍是感受略有压力,毕竟咱们搬砖的经济压力也很是大。 考虑到这些问题,这里推荐韦世东的文章 《超高性价比的 MongoDB 零基础快速入门实战教程》,它售价不到 10 块钱。

文章做者韦世东是:图灵签约做者、电子工业出版社签约做者,华为云认证云享专家、掘金社区优秀做者、开源项目 aiowebsocket 做者。因此在文章质量上,你们能够放心。

这篇文章的内容几乎囊括了上面咱们提到的全部知识点,看完这篇仅 5 万词的文章,你将收获:

  • 文档的 CRUD 操做和 Cursor 对象

  • 掌握流式聚合操做,轻松面对任何数据处理需求

  • 了解 MongoDB 的查询效率和优化

  • 如何提升 MongoDB 的可用性

  • 如何应对数据服务故障

  • 理解 MongoDB 的访问控制

  • 学会用数据模型下降数据冗余,提升效率

  • 掌握 mongodump 数据备份与还原方法

这样就能够胜任平常开发中对数据库操做能力的要求了。这篇文章适合对 MongoDB 感兴趣的零基础开发者或者有必定基础,想要继续巩固和加深学习的开发者。

文章篇幅很长,内容详尽,不乏优质配图,例如描述复制集节点关系的图:

描述节主点掉线,从新选举主节点的图

若是你以为有学习 MongoDB 的须要,且这篇文章规划的内容是你想要的内容,那么请前往订阅吧!

相关文章
相关标签/搜索