《「一起学」》系别终于启动了,这个系列我主要会「按照我学习的思路」,给大家更新一下,为的是「学习方法和思路」,当然重要的还有知识,以及 moon 平常是怎么学习一个新的技术的
「新学一个技术应该做什么」?
「官方文档」,来,我们一起来看看官方文档是怎么说的
遇事不决,先看简介
这里第一句话很关键,文档上说,mongoDB 是一个「文档型数据库,旨在简化开发和扩展」。
这里很明显的确定了 mongoDB 的部分优势,那就是「简化开发和扩展」,那它是怎么简化开发和扩展的呢?这就是需要我们后面认真的去研究了。
然后,又提到了一个关键的词,「文档型数据库」,好了,到这里没有听过的朋友就蒙了,所以,我们往下看
紧接着官方就给了说明,「MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组」。
这句话其实讲的已经非常明了了,它记录的是一个文档,所以相比 Mysql 这种关系型数据库来说,moon 第一个想到的就是,「不用写 DDL 语句来维护表字段的关系了」,文档里面,你想怎么存就怎么存。
后面官方这里提到了文档数据库的「优点」:
也就是说说文档内的「数据类型是自己定义」的,可以对应不同编程语言中的各种内置数据类型
最直白的说就是类似于 Mysql 当中的 Join 语句少了
这句话的 moon 是这样理解的,由于文档内容是自定义的,所以会有各种格式,比如下面这种格式就体现了其多态性
普通电话,具有打电话发短信的功能
{
"type": "basic_phone",
"message":1,
"call":1
}
iphone,具有打电话发短信的功能,并且还能玩游戏
{
"type": "iphone",
"message":1,
"call":1,
"game":1
}
MongoDB 将文档存储在集合中。集合类似于关系数据库中的表。
这句话就很好理解了,我就不解释了
除集合外,MongoDB 还支持:
后面就介绍到了 mongoDB 的一些主要特性
「什么是嵌入式的数据模型呢」?
MongoDB 提供高性能的数据持久化。特别是, 对嵌入式数据模型的支持减少了数据库系统上的 I / O 操作(不用连表查询了)。索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。
「为什么嵌入式模型可以减少数据库系统上的 I / O 操作?」
MongoDB 支持丰富的查询语言以支持读写操作(CRUD)以及:数据聚合 文本搜索和地理空间查询。
「其实数据库的核心作用就是两个,存储+查询」,各种不同的数据库几乎都是围绕着这两个点去设计的,所以查询方式也是非常重要的,MongoDB 并「不支持 sql 语句查询」,但是对于已经熟悉 sql 语句查询的人来说,官方给了我们一个很简单的理解方式,就是 sql 查询和 mongo 查询的对照
如上图 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 }
)
这样是不是就很容易去理解了
MongoDB 的复制工具(称为副本集)提供:
1.「自动_故障转移」2.「数据冗余」。
副本集是一组维护相同数据集合的 mongod 实例,提供了冗余和提高了数据可用性。
MongoDB 提供水平可伸缩性作为其_核心_ 功能的一部分:分片将数据分布在一个集群的机器上。从 3.4 开始,MongoDB 支持基于分片键创建数据区域。在平衡群集中,MongoDB 仅将区域覆盖的读写定向到区域内的那些分片。
另外,MongoDB 提供可插拔的存储引擎 API,允许第三方为 MongoDB 开发存储引擎。
这其实也是「类似于 mysql 存储引擎可拔插的设计」,比较容易理解
作为一个新学习的数据库,「架构图也是我们了解其信息的重要手段之一」
我们可以看到,在 mongoDB 的架构中,核心的有三个组件
其实到了这里就基本差不多了,但是为了「加深」我们对于 mongoDB 的「印象」,我会去再看一下,「MongoDB 和 Mysql 到底有什么区别」
数据库 | MongoDB | MySQL |
---|---|---|
数据库模型 | 非关系型 | 关系型 |
存储方式 | bson格式 | 不同引擎有不同的存储方式 |
查询语句 | MongoDB查询方式 | SQL语句 |
数据处理方式 | 基于内存,将热数据存放在物理内存中,从而达到高速读写 | 不同引擎有自己的特点 |
事务性 | 仅支持单文档事务操作,弱一致性 | 支持事务操作 |
占用空间 | 占用空间大 | 占用空间小 |
join操作 | MongoDB没有join | MySQL支持join |
以上的知识对于一个新技术的入门来说,肯定是够用了 但是「重点还是在于归纳总结」,当你看完这些知识的时候,你脑海里对它有什么印象
对于 mongoDB ,当你看完这篇文章的时候,你需要知道它是一个
入门就到这里了,后面我们再展开,包括「索引,分片原理,故障转移机制」等等