MongoDB快速上手指南:业务场景、三高特点及相关概念

2022-08-0220:12:25数据库教程Comments975 views字数 2915阅读模式

MongoDB快速上手指南:业务场景、三高特点及相关概念文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

1.1 业务场景

传统的关系型数据库 (比如 MySQL), 在数据操作的”三高”需求以及对应的 Web 2.0 网站需求面前, 会有”力不从心”的感觉文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

所谓的三高需求:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

高并发, 高性能, 高可用, 简称三高文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

  • High Performance: 对数据库的高并发读写的要求
  • High Storage: 对海量数据的高效率存储和访问的需求
  • High Scalability && High Available: 对数据的高扩展性和高可用性的需求

而 MongoDB 可以应对三高需求文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

具体的应用场景:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

  • 社交场景, 使用 MongoDB 存储用户信息, 以及用户发表的朋友圈信息, 通过地理位置索引实现附近的人, 地点等功能.
  • 游戏场景, 使用 MongoDB 存储游戏用户信息, 用户的装备, 积分等直接以内嵌文档的形式存储, 方便查询, 高效率存储和访问.
  • 物流场景, 使用 MongoDB 存储订单信息, 订单状态在运送过程中会不断更新, 以 MongoDB 内嵌数组的形式来存储, 一次查询就能将订单所有的变更读取出来.
  • 物联网场景, 使用 MongoDB 存储所有接入的智能设备信息, 以及设备汇报的日志信息, 并对这些信息进行多维度的分析.
  • 视频直播, 使用 MongoDB 存储用户信息, 点赞互动信息等.

这些应用场景中, 数据操作方面的共同点有:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

  1. 数据量大
  2. 写入操作频繁
  3. 价值较低的数据, 对事务性要求不高

对于这样的数据, 更适合用 MongoDB 来实现数据存储文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

那么我们什么时候选择 MongoDB 呢?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

除了架构选型上, 除了上述三个特点之外, 还要考虑下面这些问题:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

  • 应用不需要事务及复杂 JOIN 支持
  • 新应用, 需求会变, 数据模型无法确定, 想快速迭代开发
  • 应用需要 2000 - 3000 以上的读写QPS(更高也可以)
  • 应用需要 TB 甚至 PB 级别数据存储
  • 应用发展迅速, 需要能快速水平扩展
  • 应用要求存储的数据不丢失
  • 应用需要 99.999% 高可用
  • 应用需要大量的地理位置查询, 文本查询

如果上述有1个符合, 可以考虑 MongoDB, 2个及以上的符合, 选择 MongoDB 绝不会后悔.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

如果上述业务场景使用用MySQL呢?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

显然相对于MySQL, MongoDB可以以更低的成本解决问题(包括学习, 开发, 运维等成本)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

1.2 MongoDB 简介

MongoDB是一个开源, 高性能, 无模式的文档型数据库, 当初的设计就是用于简化开发和方便扩展, 是NoSQL数据库产品中的一种.是最 像关系型数据库(MySQL)的非关系型数据库. 它支持的数据结构非常松散, 是一种类似于 JSON 的 格式叫BSON, 所以它既可以存储比较复杂的数据类型, 又相当的灵活. MongoDB中的记录是一个文档, 它是一个由字段和值对(field:value)组成的数据结构.MongoDB文档类似于JSON对象, 即一个文档认 为就是一个对象.字段的数据类型是字符型, 它的值除了使用基本的一些类型外, 还可以包括其他文档, 普通数组和文档数组.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

“最像关系型数据库的 NoSQL 数据库”. MongoDB 中的记录是一个文档, 是一个 key-value pair. 字段的数据类型是字符型, 值除了使用基本的一些类型以外, 还包括其它文档, 普通数组以及文档数组文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

Mongo和Mysql对比文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

MongoDB快速上手指南:业务场景、三高特点及相关概念文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

MongoDB快速上手指南:业务场景、三高特点及相关概念文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

MongoDB 数据模型是面向文档的, 所谓文档就是一种类似于 JSON 的结构, 简单理解 MongoDB 这个数据库中存在的是各种各样的 JSON(BSON)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

  • 数据库 (database)
    • 数据库是一个仓库, 存储集合 (collection)
  • 集合 (collection)
    • 类似于数组, 在集合中存放文档
  • 文档 (document)
    • 文档型数据库的最小单位, 通常情况, 我们存储和操作的内容都是文档

在 MongoDB 中, 数据库和集合都不需要手动创建, 当我们创建文档时, 如果文档所在的集合或者数据库不存在, 则会自动创建数据库或者集合文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

1.2.1 数据库 (databases) 管理语法

操作语法
查看所有数据库show dbs;show databases;
查看当前数据库db;
切换到某数据库 (若数据库不存在则创建数据库)use <db_name>;
删除当前数据库db.dropDatabase();

1.2.2 集合 (collection) 管理语法

操作语法
查看所有集合show collections;
创建集合db.createCollection("<collection_name>");
删除集合db.<collection_name>.drop()

1.3. 数据类型

MongoDB的最小存储单位就是文档(document)对象。文档(document)对象对应于关系型数据库的行。数据在MongoDB中以 BSON(Binary-JSON)文档的格式存储在磁盘上。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON。BSON和JSON一样,支持 内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如DateBinData类型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

BSON采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

Bson中,除了基本的JSON类型:string,integer,boolean,double,null,array和object,mongo还使用了特殊的数据类型。这些类型包括 date,object id,binary data,regular expression 和code。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详细信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

MongoDB快速上手指南:业务场景、三高特点及相关概念文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

提示: shell默认使用64位浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可以使用NumberInt(4字节符号整数)或NumberLong(8字节符 号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

1.4 MongoDB 的特点

1.4.1 高性能

MongoDB 提供高性能的数据持久化文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

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

1.4.2 高可用

MongoDB 的复制工具称作副本集 (replica set) 可以提供自动故障转移和数据冗余。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

1.4.3 高扩展

水平扩展是其核心功能一部分。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

分片将数据分布在一组集群的机器上 (海量数据存储, 服务能力水平扩展)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

MongoDB 支持基于片键创建数据区域, 在一个平衡的集群当中, MongoDB 将一个区域所覆盖的读写只定向到该区域的那些片。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

1.4.4 丰富的查询支持

MongoDB支持丰富的查询语言, 支持读和写操作(CRUD), 比如数据聚合, 文本搜索和地理空间查询等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

1.4.5 其他

无模式(动态模式), 灵活的文档模型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

作者:是小梁同学呀
来源:稀土掘金文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/26456.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/sjk/26456.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定