《一起学mongodb》之第一篇

微号:「moon聊技术」
关注选择“ 「星标」 ”, 重磅干货,第一 时间送达!
[如果你觉得文章对你有帮助,欢迎「关注,在看,点赞,转发」]

moon 的开场白

「一起学」》系别终于启动了,这个系列我主要会「按照我学习的思路」,给大家更新一下,为的是「学习方法和思路」,当然重要的还有知识,以及 moon 平常是怎么学习一个新的技术的

当然《「面试八股文」》系列后面还是会更新的,别慌,等我码字

好了,前话就说这么多,开始步入正题了~

初学 mongodb

「新学一个技术应该做什么」

「官方文档」,来,我们一起来看看官方文档是怎么说的

遇事不决,先看简介

image

这里第一句话很关键,文档上说,mongoDB 是一个「文档型数据库,旨在简化开发和扩展」

这里很明显的确定了 mongoDB 的部分优势,那就是「简化开发和扩展」,那它是怎么简化开发和扩展的呢?这就是需要我们后面认真的去研究了。

然后,又提到了一个关键的词,「文档型数据库」,好了,到这里没有听过的朋友就蒙了,所以,我们往下看

什么是文档型数据库?

image

紧接着官方就给了说明,「MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组」

这句话其实讲的已经非常明了了,它记录的是一个文档,所以相比 Mysql 这种关系型数据库来说,moon 第一个想到的就是,「不用写 DDL 语句来维护表字段的关系了」,文档里面,你想怎么存就怎么存。

后面官方这里提到了文档数据库的「优点」:

  • 1.文档(即对象)对应于许多编程语言中的内置数据类型。

也就是说说文档内的「数据类型是自己定义」的,可以对应不同编程语言中的各种内置数据类型

  • 2.嵌入式文档和数组减少了对昂贵连接的需求。

最直白的说就是类似于 Mysql 当中的 Join 语句少了

  • 3.动态模式支持流畅的多态性。

这句话的 moon 是这样理解的,由于文档内容是自定义的,所以会有各种格式,比如下面这种格式就体现了其多态性

<pre class="custom" data-tool="mdnice编辑器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">普通电话,具有打电话发短信的功能 { "type": "basic_phone", "message":1, "call":1 } iphone,具有打电话发短信的功能,并且还能玩游戏 { "type": "iphone", "message":1, "call":1, "game":1 } </pre>

集合/视图/按需实例化视图

image

MongoDB 将文档存储在集合中。集合类似于关系数据库中的表。

这句话就很好理解了,我就不解释了

除集合外,MongoDB 还支持:

  • 只读视图(从MongoDB 3.4开始),和 SQL 的视图没有什么差异,视图是基于表/集合之上进行动态查询的一层对象,可以是虚拟的,也可以是物理的(物化视图)。
  • 按需实例化视图。从4.2版本开始,MongoDB 为 aggregation pipeline 添加了 $merge 阶段。此阶段可以将管道结果合并到现有集合中,而不是完全替换现有集合。此功能允许用户创建按需物化视图,每次运行管道时都可以更新输出集合的内容。

主要特性

image

后面就介绍到了 mongoDB 的一些主要特性

  • 高性能

    • 1.对嵌入式数据模型的支持减少了数据库系统上的I / O操作。

「什么是嵌入式的数据模型呢」?

MongoDB 提供高性能的数据持久化。特别是, 对嵌入式数据模型的支持减少了数据库系统上的 I / O 操作(不用连表查询了)。 索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。

「为什么嵌入式模型可以减少数据库系统上的 I / O 操作?」

  • 丰富的查询语言

MongoDB 支持丰富的查询语言以支持读写操作(CRUD)以及: 数据聚合 文本搜索和地理空间查询。

「其实数据库的核心作用就是两个,存储+查询」,各种不同的数据库几乎都是围绕着这两个点去设计的,所以查询方式也是非常重要的,MongoDB 并「不支持 sql 语句查询」,但是对于已经熟悉 sql 语句查询的人来说,官方给了我们一个很简单的理解方式,就是 sql 查询和 mongo 查询的对照

image

<pre class="custom" data-tool="mdnice编辑器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`如上图 https://docs.mongodb.com/v4.2/reference/sql-comparison/

SELECT * FROM people = db.people.find

SELECT user_id, status FROM people

db.people.find(
{ },
{ user_id: 1, status: 1, _id: 0 }
)


SELECT user_id, status FROM people WHERE status = "A"

db.people.find(
{ status: "A" },
{ user_id: 1, status: 1, _id: 0 }
)` </pre>

这样是不是就很容易去理解了

  • 高可用

MongoDB 的复制工具(称为副本集)提供:

1.「自动_故障转移」 2.「数据冗余」

副本集是一组维护相同数据集合的 mongod 实例,提供了冗余和提高了数据可用性。

  • 水平拓展

MongoDB 提供水平可伸缩性作为其核心 功能的一部分: 分片将数据分布在一个集群的机器上。 从 3.4 开始,MongoDB 支持基于分片键创建数据区域。在平衡群集中,MongoDB 仅将区域覆盖的读写定向到区域内的那些分片。

  • 支持多种存储引擎

    • MongoDB 支持多个存储引擎:

      • WiredTiger 存储引擎(包括对静态加密的支持)
      • 内存存储引擎。

另外,MongoDB 提供可插拔的存储引擎 API,允许第三方为 MongoDB 开发存储引擎。

这其实也是「类似于 mysql 存储引擎可拔插的设计」,比较容易理解

架构

作为一个新学习的数据库,「架构图也是我们了解其信息的重要手段之一」

image

我们可以看到,在 mongoDB 的架构中,核心的有三个组件

  • 数据分片(Shards)

    • 分片用于存储真正的集群数据,可以是一个单独的 Mongod实例,也可以是一个副本集。 生产环境下Shard一般是一个 Replica Set,以防止该数据片的单点故障。
    • 对于分片集合(sharded collection)来说,每个分片上都存储了集合的一部分数据(按照分片键切分),如果集合没有分片,那么该集合的数据都存储在数据库的 Primary Shard中。
  • 配置服务器(Config Servers)

    • 保存集群的元数据(metadata),包含各个Shard的路由规则,也包括了 chunk (分片数据块)的信息。
  • 查询路由(Query Routers)

    • Mongos是 Sharded Cluster 的访问入口,其本身并不持久化数据 。Mongos启动后,会从 Config Server 加载元数据,开始提供服务,并将用户的请求正确路由到对应的Shard。
    • Sharding 集群可以部署多个 Mongos 以分担客户端请求的压力。

其实到了这里就基本差不多了,但是为了「加深」我们对于 mongoDB 的「印象」,我会去再看一下,「MongoDB 和 Mysql 到底有什么区别」

MongoDB 和 Mysql 有什么区别

数据库 MongoDB MySQL
数据库模型 非关系型 关系型
存储方式 bson格式 不同引擎有不同的存储方式
查询语句 MongoDB查询方式 SQL语句
数据处理方式 基于内存,将热数据存放在物理内存中,从而达到高速读写 不同引擎有自己的特点
事务性 仅支持单文档事务操作,弱一致性 支持事务操作
占用空间 占用空间大 占用空间小
join操作 MongoDB没有join MySQL支持join

总结

以上的知识对于一个新技术的入门来说,肯定是够用了 但是「重点还是在于归纳总结」,当你看完这些知识的时候,你脑海里对它有什么印象

对于 mongoDB ,当你看完这篇文章的时候,你需要知道它是一个

  • 「cp 类型的文档数据库」
  • 它有着自己「独特的数据查询方式」,操作语法是怎样的
  • 它支持「水平扩展」
  • 「自动故障转移和数据冗余(数据分散在不同的 shard 上,有备份)成就了它的高可用」
  • 一个请求打到 mongoDB 中需要一层「路由来将请求映射到具体的数据分片上」
  • 「支持单个文档的事物」。。。。。。

入门就到这里了,后面我们再展开,包括「索引,分片原理,故障转移机制」等等

喜欢的朋友可以给 moon 来个星标,有文章都会第一时间推送给你,欢迎大家一起讨论

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,501评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,673评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,610评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,939评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,668评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,004评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,001评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,173评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,705评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,426评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,656评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,139评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,833评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,247评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,580评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,371评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,621评论 2 380

推荐阅读更多精彩内容