MongoDB

课程目标

理解 MongoDB 的业务场景、熟悉 MongoDB 的简介、特点和体系结构、数据类型等。
能够在 Windows Linux 下安装和启动 MongoDB 、图形化管理界面 Compass 的安装使用
掌握 MongoDB 基本常用命令实现数据的 CRUD
掌握 MongoDB 的索引类型、索引管理、执行计划。
使用 Spring Data MongoDB 完成文章评论业务的开发

1 MongoDB相关概念

1.1 业务应用场景

传统的关系型数据库(如 MySQL ),在数据操作的 三高 需求以及应对 Web2.0 的网站需求面前,显得力不从心。
解释: 三高 需求:
• High performance - 对数据库高并发读写的需求。
• Huge Storage - 对海量数据的高效率存储和访问的需求。
• High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。

MongoDB可应对三高需求。

具体的应用场景如:
1 )社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
2 )游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
3 )物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将
订单所有的变更读取出来。
4 )物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
5 )视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。
这些应用场景中,数据操作方面的共同特点是:
1 )数据量大
2 )写入操作频繁(读写都很频繁)
3 )价值较低的数据,对事务性要求不高
对于这样的数据,我们更适合使用 MongoDB 来实现数据的存储。

什么时候选择MongoDB

在架构选型上,除了上述的三个特点外,如果你还犹豫是否要选择它?可以考虑以下的一些问题:
应用不需要事务及复杂 join 支持
新应用,需求会变,数据模型无法确定,想快速迭代开发
应用需要 2000-3000 以上的读写 QPS (更高也可以)
应用需要 TB 甚至 PB 级别数据存储
应用发展迅速,需要能快速水平扩展
应用要求存储的数据不丢失
应用需要 99.999% 高可用
应用需要大量的地理位置查询、文本查询
如果上述有 1 个符合,可以考虑 MongoDB 2 个及以上的符合,选择 MongoDB 绝不会后悔。
思考:如果用 MySQL 呢?
答:相对 MySQL ,可以以更低的成本解决问题(包括学习、开发、运维等成本)

1.2 MongoDB简介SQL术语/概念

MongoDB术语/概念

解释/说明

database
database
数据库
table
collection
数据库表 / 集合
row
document
数据记录行 / 文档
column
field
数据字段 /
index
index
索引
table joins
表连接 ,MongoDB 不支持
嵌入文档
MongoDB 通过嵌入式文档来替代多表连接
primary key
primary key
主键 ,MongoDB 自动将 _id 字段设置为主键
MongoDB 是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是 NoSQL 数据库产品中的一种。是最
像关系型数据库( MySQL )的非关系型数据库。
它支持的数据结构非常松散,是一种类似于 JSON 的 格式叫 BSON ,所以它既可以存储比较复杂的数据类型,又相当的灵活。
MongoDB 中的记录是一个文档,它是一个由字段和值对( field:value )组成的数据结构。 MongoDB 文档类似于 JSON 对象,即一个文档认
为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。

1.3 体系结构

MySQL MongoDB 对比

1.4 数据模型

MongoDB 的最小存储单位就是文档 (document) 对象。文档 (document) 对象对应于关系型数据库的行。数据在 MongoDB 中以
BSON Binary-JSON )文档的格式存储在磁盘上。
BSON Binary Serialized Document Format )是一种类 json 的一种二进制形式的存储格式,简称 Binary JSON BSON JSON 一样,支持
内嵌的文档对象和数组对象,但是 BSON JSON 没有的一些数据类型,如 Date BinData 类型。
BSON 采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可
以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。
Bson 中,除了基本的 JSON 类型: string,integer,boolean,double,null,array object mongo 还使用了特殊的数据类型。这些类型包括
date,object id,binary data,regular expression code 。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详
细信息。
BSON 数据类型参考列表: 数据类型
描述
举例
字符串
UTF-8 字符串都可表示为字符串类型的数据
{"x" : "foobar"}
对象 id
对象 id 是文档的 12 字节的唯一 ID
{"X" :ObjectId() }
布尔值
真或者假: true 或者 false
{"x":true}+
数组
值的集合或者列表可以表示成数组
{"x" ["a", "b", "c"]}
32 位整数
类型不可用。 JavaScript 仅支持 64 位浮点数,所以 32 位整数会被
自动转换。
shell 是不支持该类型的, shell 中默认会转换成 64
位浮点数
64 位整数
不支持这个类型。 shell 会使用一个特殊的内嵌文档来显示 64
整数
shell 是不支持该类型的, shell 中默认会转换成 64
位浮点数
64 位浮点数
shell 中的数字就是这一种类型
{"x" 3.14159 "y" 3}
null
表示空值或者未定义的对象
{"x":null}
undefined
文档中也可以使用未定义类型
{"x":undefined}
符号
shell 不支持, shell 会将数据库中的符号类型的数据自动转换成
字符串
正则表达式
文档中可以包含正则表达式,采用 JavaScript 的正则表达式语法
{"x" /foobar/i}
代码
文档中还可以包含 JavaScript 代码
{"x" function() { /* …… */ }}
二进制数据
二进制数据可以由任意字节的串组成,不过 shell 中无法使用
最大值 /
小值
BSON 包括一个特殊类型,表示可能的最大值。 shell 中没有这个
类型。
提示:
shell 默认使用 64 位浮点型数值。 {“x” 3.14} {“x” 3} 。对于整型值,可以使用 NumberInt 4 字节符号整数)或 NumberLong 8 字节符
号整数), {“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}

1.5 MongoDB的特点

MongoDB 主要有如下特点:

1高性能

MongoDB 提供高性能的数据持久性。特别是 ,
对嵌入式数据模型的支持减少了数据库系统上的 I/O 活动。
索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求、 TTL 索引解决历史数据自动过期的需求、地
理位置索引可用于构建各种 O2O 应用)
mmapv1 wiredtiger mongorocks rocksdb )、 in-memory 等多引擎支持满足各种场景需求。
Gridfs 解决文件存储的需求。

2高可用性:

MongoDB 的复制工具称为副本集( replica set ),它可提供自动故障转移和数据冗余。

3高扩展性:

MongoDB 提供了水平可扩展性作为其核心功能的一部分。
分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)
3.4 开始, MongoDB 支持基于片键创建数据区域。在一个平衡的集群中, MongoDB 将一个区域所覆盖的读写只定向到该区域内的那些
片。

4丰富的查询支持:

MongoDB 支持丰富的查询语言,支持读和写操作 (CRUD) ,比如数据聚合、文本搜索和地理空间查询等。
5 )其他特点:如无模式(动态模式)、灵活的文档模型、
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值